AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Administrar bases de datos / HFSQL / Funciones HFSQL
  • Límite inferior y límite superior de un elemento clave de Texto o Clave Compuesta
  • Filtro e iteración filtrada
  • Condición de selección
  • Habilitar/Deshabilitar un filtro
  • Filtro en una clave compuesta
  • Archivos de datos no HFSQL
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Define y activa un filtro en un archivo de datos, vista o consulta.
Después de su ejecución, los casos más comunes son los siguientes:
  • no se puede crear el filtro: Filtro HF devuelve una cadena vacía. HError devuelve el identificador del error.
  • se crea el filtro: la función Filtro HF devuelve la clave de búsqueda adecuada que se utilizará para navegar por el archivo de datos, la vista o la consulta.
Ejemplo
// Simple filter with condition:
// Find the customers of a city
 
SearchKey is string
mycity is string
 
mycity = "MONTPELLIER"
SearchKey = HFilter(Customer, "CITY='" + mycity + "'")
HReadFirst(Customer, SearchKey)
WHILE HOut() = False
// Process the record
...
HReadNext(Customer, SearchKey)
END
// Cancels the filter
HDeactivateFilter(Customer)
// Filter performed with a bounded search key and a condition:
// the search key is fixed
 
SearchKey is string
// Filters the invoices found between 1/1/2005 and
// 12/31/2005, whose total is greater than 1500 Euros IOT
// with a discount whose type is passed as parameter (text item)
SearchKey = HFilter(Invoice, InvoiceDate, "20050101", "20051231", ...
StringBuild("TotalIOT>1500 AND DiscountType='%1'" + , ...
Replace(sDiscountType, "", "\")))
// The Replace function is used to prefix the quotes
// contained in sDiscountType with a backslash
IF SearchKey <> "" THEN
HReadFirst(Invoice, SearchKey)
WHILE HOut() = False
// Process the record: send a thank you letter
Send_Letter()
HReadNext(Invoice, SearchKey)
END
END
...
// Cancels the filter
HDeactivateFilter(Invoice)
Sintaxis

Filtro construido con una clave de búsqueda limitada y una condición Ocultar los detalles

<Result> = HFilter(<Data file> , <Search key> , <Lower bound> [, <Upper bound> [, <Selection condition>]])
<Result>: Cadena de caracteres
Campo de navegación. Corresponde a:
  • la clave de búsqueda del archivo de datos si el filtro está activado.
  • una cadena vacía ("") si no se puede establecer el filtro.
<Data file>: Cadena de caracteres
Nombre del archivo de datos, vista HFSQL o consulta utilizada.
<Search key>: Cadena de caracteres
Nombre del elemento clave utilizado para el bucle de el archivo de datos, vista o consulta. Este elemento debe ser una clave de búsqueda de archivo, vista o consulta de datos. Los límites inferior y superior se aplicarán a este ítem.
<Lower bound>: Tipo de campo de búsqueda
Valor mínimo (incluido) del elemento de búsqueda (si la clave de búsqueda se define con una iteración en orden ascendente en el análisis). Los registros correspondientes a este valor mínimo se incluirán en el filtro. Para una iteración descendente (es decir, si la clave de búsqueda se define con una iteración en orden descendente en el análisis), es el valor máximo del elemento de búsqueda.
El tipo de este parámetro debe corresponder al tipo de elemento de búsqueda. Por ejemplo, si el elemento de búsqueda es una cadena, el límite inferior también debe ser una cadena.
<Upper bound>: Tipo de campo de búsqueda, parámetro opcional
Valor máximo (incluido) del elemento de búsqueda (iteración ascendente). Los registros correspondientes a este valor máximo se incluirán en el filtro. El tipo de este parámetro debe corresponder al tipo de elemento de búsqueda. Por ejemplo, si el elemento de búsqueda es una cadena, el límite superior también debe ser una cadena.
Para una iteración descendente, es el valor mínimo del elemento de búsqueda.
Si no se especifica este parámetro, el límite superior corresponde al valor de <Límite inferior>.
<Selection condition>: Cadena de caracteres opcional
Condición de selección para crear el filtro (véase Notas). Esta condición de selección puede ser una cadena de caracteres Ansi o Unicode.

Filtro construido con una condición Ocultar los detalles

<Result> = HFilter(<Data file> , <Selection condition>)
<Result>: Cadena de caracteres
Campo de navegación. Corresponde a:
  • la clave de búsqueda del archivo de datos si el filtro está activado
  • una cadena vacía si el filtro no se puede implementar
<Data file>: Cadena de caracteres
Nombre del archivo de datos, vista HFSQL o consulta utilizada.
<Selection condition>: Cadena de caracteres
Condición de selección utilizada para crear el filtro (véanse las Notas). Esta condición de selección puede ser una cadena de caracteres Ansi o Unicode.
Observaciones

Límite inferior y límite superior de un elemento clave de Texto o Clave Compuesta

Si el límite inferior y el límite superior son iguales:
  • para realizar un filtro de búsqueda exacta en un valor, solo se debe indicar el valor en el parámetro "Límite mín".
    Por ejemplo, para seleccionar los clientes cuyo nombre corresponde a "Smith":
    HFilter(Customer, Name, "Smith")

    El cliente "Durán" no se seleccionará.
  • para implementar un filtro genérico sobre un valor, debe hacerlo:
    • completar el límite inferior con la constante hMinVal para darle el valor mínimo.
    • completar el límite superior con la constante hMaxVal para darle el valor máximo.
    Por ejemplo, para seleccionar los clientes cuyo apellido comienza con "Smith":
    HFilter(Customer, Name, "Smith" + hMinVal, "Smith" + hMaxVal)

    Se seleccionarán los clientes "Durá" y "Durán".
Observaciones:
  • La constante hMinVal es equivalente a Charact( 0).
  • La constante hMaxVal es equivalente a Charact( 255).

Filtro e iteración filtrada

Después de ejecutar la función Filtro HF, la navegación del archivo de datos debe realizarse en el elemento devuelto por la función Filtro HF. El filtro será ignorado si se utiliza otro elemento para recorrer el archivo de datos.
Cuando se define y habilita un filtro en un archivo de datos (vista o consulta), todos los registros leídos corresponden al filtro. Si no hay ninguna otra Record que corresponda al filtro durante la iteración:
  • HOut devuelve True.
  • la actual Record corresponde a la última Record leída con el filtro.
Por ejemplo:
En un archivo de datos filtrado, después de la función:el actual Record es:
HReadFirstel primer archivo Record correspondiente al filtro
HReadLastel último archivo Record correspondiente al filtro
HReadNext (or HForward)el siguiente Record (o el siguiente n-ésimo Record) correspondiente al filtro
HReadPrevious (o HBackward)el anterior Record (o el anterior n-ésimo Record) correspondiente al filtro

Condición de selección

La sintaxis general de una condición tiene el siguiente formato:
"ApellidoCli>'Durá' y (CódigoPos=34 o CódigoPos=32)"
Los operadores soportados dependen del tipo de los elementos utilizados en la condición:
>Mayor queVálido para todos los tipos
>=Mayor que o igual aVálido para todos los tipos
<Menor queVálido para todos los tipos
<>DiferenteVálido para todos los tipos
<=Menor que o igual aVálido para todos los tipos
]Contiene: distingue mayúsculas y minúsculasVálido solo para cadenas
]=Comienza por: distingue mayúsculas y minúsculasVálido solo para cadenas
~]Contiene: no distingue entre mayúsculas y minúsculasVálido solo para cadenas
~~Igualdad muy flexible: no distingue entre minúsculas y mayúsculas, ignora los espacios antes y después de la cadena, acentos en minúsculas, espacios y puntuación dentro de las cadenas.Válido solo para cadenas
~=Casi igual a: ignora espacios a la derecha, acentos, y mayúsculas y minúsculasVálido solo para cadenas
=Estrictamente igual aVálido para todos los tipos
AndroidWidget Android Los operadores ~~ y ~= no deben utilizarse. Estos operadores no están permitidos.
Notas sobre la condición de selección :
  • Las cuerdas constantes deben estar encerradas en comillas simples.
  • Si el nombre de la posición contiene comillas simples, deben ser dobladas.
    Por ejemplo: ‘Elemento‘‘con‘‘comillas‘
  • Las comparaciones entre strings se realizan según los parámetros especificados para los índices.
  • Los memos binarios y las claves compuestas no pueden formar parte de una condición de selección.
    Para las claves compuestas, se recomienda utilizar la primera sintaxis. No se puede utilizar la siguiente sintaxis:
    HFilter(FILENAME, "COMPKEY~]'AAA' AND COMPKEY]='" + ...
    HBuildKeyValue(FILENAME, COMPKEY, 0) + "'")
  • Si una cadena de caracteres (constante o Variable) contiene una sola cita, ésta debe estar precedida por una barra invertida ( \).
  • Para optimizar la iteración, utilice HStatCalculate en el archivo de datos antes de crear el filtro. El motor HFSQL analiza la condición de selección y utiliza estas estadísticas para determinar qué elementos se utilizarán para optimizar la iteración realizada en el archivo de datos.
  • Esta condición de selección puede ser una cadena de caracteres Ansi o Unicode.

Habilitar/Deshabilitar un filtro

HDeactivateFilter se utiliza para desactivar un filtro.
HActivateFilter se utiliza para volver a habilitar un filtro.
El filtro se borra cuando se cierra el archivo de datos (consulta o vista) (HClose por ejemplo).
Un único filtro puede existir en un momento dado en un archivo de datos (consulta o vista). Si la función Filtro HF se utiliza varias veces, solo se tendrá en cuenta el último filtro: se borrarán los filtros anteriores.
Universal Windows 10 AppiPhone/iPadHFSQL ClassicHFSQL Client/ServerProcedimientos almacenados

Filtro en una clave compuesta

Se pueden utilizar varios métodos para implementar un filtro en una clave compuesta:
  • Método 1: Utilizar una lista de valores en la función Filtro HF.
  • Método 2: Utilizando la declaración FOR EACH.
  • Método 3: Llamando a HBuildKeyValue.
Para más detalles sobre cómo utilizar las teclas compuestas en los filtros, véase Claves compuestas y filtros.
Ejemplo de utilización del método 1: Utilizando una lista de valores .
El valor de la clave compuesta sobre la que se realizará el filtro set se puede construir directamente en Filtro HF utilizando la siguiente sintaxis:
HFilter(<File name>, <Name of composite key>,
[<List of values for the lower bound of composite key>],
[<List of values for the upper bound of composite Key>])
Ejemplo: Buscar todos los registros del archivo CLIENTE cuyos apellidos y nombres están comprendidos entre "Arias" y "Barrera" y "Pablo" y "Teresa".
HFilter(Customer, LastNameFirstName, ["AA", "Philomene"], ["Barnaby", "Tartuffe"])
En este ejemplo, el filtro devuelve "AA", "Zorro" mientras que "Philomene", "Zorro" no.
Ejemplo: Buscar todos los registros del archivo de Tareas cuyas tareas estén incluidas entre el 15/03/2021 00:00 y el 25/03/2021 00:00.
HFilter(Tasks, TaskStarDateTaskStartTime, [20210315,0000], [20210325,0000])
AndroidWidget Android Procedimientos almacenadosConectores Nativos

Archivos de datos no HFSQL

Componente: wd290hf.dll
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Exemplo de montagem de filtro em variável para aplicar no HFilter
HourGlass(True)

x is int = 30

sMontaFiltro is string = "T002_Produtos_Local.T002_Produtos_ID IN ("

LOOP(5)

x++

sMontaFiltro += (Length(sMontaFiltro)>0 and x<35?", " else "") + X

END

sMontaFiltro += ")"

HFilter(T002_Produtos_Local, sMontaFiltro)

TableDisplay(TABLE_T002_Produtos_PCSOFT,taInit)

gnTotal = TABLE_T002_Produtos_PCSOFT.Count(toTotal)

HourGlass(False)

by Mello
Boller
25 01 2023
Exemplo usando a clausula IN
HFilter(T002_Produtos_Local, "T002_Produtos_Local.T002_Produtos_ID IN(36, 37, 38, 32, 27)")

by Mello
Boller
25 01 2023
Exemplo com Between de intervalo de valores dinamicos atraves de Stringbuild
2 campos na tela de entrada
Edt_gn_glo_cod_emp = 2
Edt_gn_glo_cod_obra = 120

HourGlass(True)

Hfilter(pla_cus_obra, StringBuild("id_cllientes = %1 and id_obras = %2 and id_insumos > 0", gn_glo_cod_emp, gn_glo_cod_obra))

TableDisplay(pla_cus_obra,taInit)

gnTotal = pla_cus_obra.Count(toTotal)

HourGlass(False)

by Mello
Boller
25 01 2023
Exemplo montando um filtro dinamicamente com LOOP ou FOR ou While...
HourGlass(True)

x is int = 30

sMontaFiltro is string

LOOP(5)

x++

sMontaFiltro += "T002_Produtos_Local.T002_Produtos_ID="+x+" OR "

END

//remove o ultimo OR = 4 caracteres

sMontaFiltro = Middle(sMontaFiltro,1,Length(sMontaFiltro)-4)

HFilter(T002_Produtos_Local, (sMontaFiltro))

TableDisplay(TABLE_T002_Produtos_PCSOFT,taInit)

gnTotal = TABLE_T002_Produtos_PCSOFT.Count(toTotal)

HourGlass(False)
Boller
25 01 2023
Exemplos com valores Fixos
HourGlass(True)

HFilter(T002_Produtos_Local,("T002_Produtos_Local.T002_Produtos_ID=36 OR T002_Produtos_Local.T002_Produtos_ID = 37 OR T002_Produtos_Local.T002_Produtos_ID = 38 OR T002_Produtos_Local.T002_Produtos_ID = 32 OR T002_Produtos_Local.T002_Produtos_ID = 27"))

TableDisplay(TABLE_T002_Produtos_PCSOFT,taInit)

gnTotal = TABLE_T002_Produtos_PCSOFT.Count(toTotal)

HourGlass(false)
Boller
25 01 2023

Última modificación: 17/07/2022

Señalar un error o enviar una sugerencia | Ayuda local