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
  • Búsqueda genérica/búsqueda por coincidencia de datos de salida
  • Búsqueda realizada sobre un elemento clave o sobre un elemento no clave
  • Realizar una búsqueda en una clave compuesta
  • Buscar en un artículo de array
  • Buscar y filtrar
  • Recorrer en bucle los registros que coinciden con una condición
  • Búsqueda por coincidencia exacta en Access
  • Bloqueos
  • Optimización de las iteraciones
  • Conector Nativo XML
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
Posiciones en la primera Record de un archivo de datos cuyo valor para un artículo específico es estrictamente igual al valor buscado (búsqueda de coincidencia exacta). Se lee la Record y se actualizan las variables HFSQL correspondientes.
En la mayoría de los casos, HReadSeekFirst establece la posición en el archivo de datos para recorrer los registros que coinciden con una condición. HReadNext se utiliza para leer el siguiente Record correspondiente a la condición.
Después de llamar a la función HReadSeekFirst, se pueden producir los siguientes casos:
  • a Record correspondiente a la condición se encontró, bloqueado (si es necesario) y cargado en la memoria: HFound devuelve True.
  • si no existe ningún registro que corresponda a la condición, pero existe un registro de mayor valor: se lee el registro, la función HOut devuelve False y la función HFound devuelve False.
  • el archivo de datos está vacío: no se realiza ninguna operación de lectura, HOut devuelve True y HFound devuelve False.
  • la función intenta bloquear un registro ya bloqueado en modo de lectura: no se realiza ninguna operación de lectura, HErrorLock devuelve True y HOut devuelve True.
    Observación: Por defecto, se realiza una gestión automática de errores de bloqueo y de conflictos de modificación (excepto en el código de procedimientos almacenados). La gestión automática de errores se puede personalizar o desactivar en cualquier momento con la función HOnError.
La función HReadSeekFirst puede utilizarse con archivos de datos, vistas HFSQL o consultas.
Observación: la búsqueda puede ser cancelada por HCancelSeek.
// Find the first record for which
// the CUSTOMER name is MOORE
HReadSeekFirst(CUSTOMER, NAME, "MOORE")
IF HFound(CUSTOMER) = False THEN
Error("Customer not found")
RETURN
ELSE
// Continue the process on the customer named MOORE
END
Sintaxis
<Result> = HReadSeekFirst(<Data file> , <Item> , <Sought value> [, <Options>])
<Result>: booleano
  • True si se encontró el Record (corresponde al valor devuelto por HFound).
  • False si se produce un problema. Este problema puede ser causado por:
    • un problema de posicionamiento (archivo de datos vacío, etc.): la función HFound devuelve False y la función HError devuelve 0.
    • un error: la función HError devuelve un número entero distinto de 0. La función HErrorInfo devuelve más detalles.
<Data file>: Cadena de caracteres
Nombre del archivo de datos HFSQL, vista o consulta utilizada.
<Item>: Cadena de caracteres
Nombre del artículo sobre el que se realizará la búsqueda. Este elemento puede ser o no una clave de búsqueda.
<Sought value>: Tipo de valor
Valor del artículo buscado.
<Options>: Constante o combinación de constantes opcional
Permite configurar:
  • el modo de bloqueo aplicado al buscado Record
  • el tipo de búsqueda realizada.
hForwardOnly
Conectores Nativos Esta constante sólo se puede utilizar con Conectores Nativos.
Optimiza las iteraciones simples que no utilizan las siguientes características:
  • Leyendo el anterior Record.
  • Modificando un Record.
  • Posición de almacenamiento.
Si se utiliza una de estas características, el resultado puede diferir del esperado.
Por ejemplo, esta constante puede utilizarse para rellenar una control Tabla de forma programada.
hGenericBúsqueda genérica (ver las Notas)
Una búsqueda de coincidencia exacta es realizada por Default (constante no especificada).
hKeepFilterEl filtro set de HFilter se tendrá en cuenta, aunque la clave de búsqueda no esté optimizada para el filtro. Recordatorio: la función HFilter devuelve la clave de búsqueda optimizada para el filtro.
Atención: en este caso, pueden surgir problemas de rendimiento en archivos de datos demasiado grandes.
Por Default, la iteración realizada después de HReadSeekFirst ignora el filtro.
hLimitParsingLa iteración se detendrá cuando se encuentre el último valor buscado o si ningún valor coincide con la búsqueda.
El actual Record corresponderá a este último Record encontrado.
HFound devolverá False y HOut devolverá True.
Esta constante se utiliza para optimizar la velocidad de búsqueda en el modo Cliente/Servidor y en las bases de datos externas (accesibles a través de OLE DB o a través de Conectores Nativos).
hLockNoSin bloqeuo: el Record puede ser leído o modificado por otra aplicación durante la lectura.
hLockReadWriteBloqueo de lectura y escritura: el Record que se lee actualmente no puede ser leído o modificado por otra aplicación.
El bloqueo de teclas se ignora si se utiliza una consulta.
hLockWriteBloqueo de escritura: el registro leído actualmente puede ser leído por otra aplicación, pero no se puede modificar.
El bloqueo de teclas se ignora si se utiliza una consulta.
hNoRefresh
Conectores Nativos La función HReadSeekFirst no actualiza el contenido de la tabla o consulta. Si es posible, la consulta no se vuelve a ejecutar. Se guardan todas las posiciones guardadas.
Conectores Nativos Las opciones de bloqueo no tendrán efecto si los bloqueos no son soportados por el proveedor OLE DB o por Conector Nativo.
Observaciones

Búsqueda genérica/búsqueda por coincidencia de datos de salida

  • Búsqueda genérica (principalmente en las posiciones de la cadena de caracteres): Busca todos los registros que empiezan con el valor especificado.
    Por ejemplo: Cuando se realiza una búsqueda genérica en "Smith" (para el elemento NAME), todos los registros cuyo elemento Name comience con "Smith" coincidirán con la búsqueda. Por lo tanto, la Record que contiene "Smither" coincidirá con la búsqueda (HFound devuelve True).
    Observación: Para la compatibilidad con WINDEV 5.5, la búsqueda genérica de una cadena vacía ("") es equivalente al uso de la función HReadFirst.
  • Búsqueda exacta: Busca todos los registros que coinciden exactamente con el valor especificado..
    Por ejemplo: Al realizar una búsqueda exacta en la cadena "Martin" (para el elemento NOMBRE), la función HFound devuelve True solo para los registros cuyo elemento corresponde exactamente a "Martin".
  • Ejemplos de búsqueda en el fichero de datos de CLIENTES ordenados por nombre:
Valor buscadoOpcionesHReadSeekFirst fija la posición en el Record.HFound vuelveHOut vuelveExplicaciones
De los cuales1TrueFalseDe los cuales existen.
El final del archivo de datos no se ha alcanzado todavía.
Davo1FalseFalseDavo no existe. Posición en el primer valor mayor (Davon).
El final del archivo de datos no se ha alcanzado todavía.
MorohGeneric8TrueFalseMoor no existe pero la búsqueda es genérica y se encuentra Moore (entre otros).
El final del archivo de datos no se ha alcanzado todavía.
MoroNo se encontró el Record (no hay movimiento, el Record actual no cambia).FalseFalseEl moro no existe.
El final del archivo de datos no se ha alcanzado todavía.
NorbertNo se encontró el Record (no hay movimiento, el Record actual no cambia).FalseTrueNorbert no existe.
Posición en el primer valor mayor (este valor no existe): se ha llegado al final del archivo de datos.

Para más detalles, consulte la página web de Hyper File 5.5 y 7: ¿Cómo gestionar los caracteres de espacio en las búsquedas? tabla

Búsqueda realizada sobre un elemento clave o sobre un elemento no clave

La búsqueda se puede realizar en un elemento clave o no clave.
Si la búsqueda se realiza en un elemento clave:
  • la búsqueda es rápida y el resultado está ordenado.
  • si la operación de iteración es continuada por HReadNext, los siguientes registros corresponderán a los valores mayores o iguales al valor de búsqueda. En este caso, hay que comprobar HOut después de cada operación de lectura para saber si se ha alcanzado el final del archivo de datos.
Si la búsqueda se realiza en un elemento no clave:
  • el elemento seleccionado aparecerá en rojo en el editor de código y aparecerá una advertencia en el "Panel"Errores de compilación.
    Observación: La autocompletado propone únicamente los puntos clave.
  • si la iteración es continuada por HReadNext, los próximos registros corresponderán a los valores iguales al valor de búsqueda.

Realizar una búsqueda en una clave compuesta

Se pueden utilizar varios métodos para realizar una búsqueda en una clave compuesta:
1. Utilizando una lista de valores .
La siguiente sintaxis se utiliza para realizar una búsqueda en una clave compuesta:
HReadSeekFirst(<File Name>, <Name of Composite Key>,
[<Search value of first element of composite key>,
<Search value of first element of composite key>, ...])
Ejemplo:
// Find the record
HReadSeekFirst(CUSTOMER, LASTNAME_FIRSTNAME, ["MOORE", "Vince"])

2. Uso de la función HBuildKeyValue
Ejemplo:
bufSoughtVal is Buffer = HBuildKeyValue(CUSTOMER, LASTNAME_FIRSTNAME, sLastName, sFirstName)
HSeekFirst(CUSTOMER, LASTNAME_FIRSTNAME, bufSoughtVal)
WHILE HFound(CUSTOMER)
HDelete(CUSTOMER)
HNext(CUSTOMER, LASTNAME_FIRSTNAME)
END

Buscar en un artículo de array

La búsqueda se realiza en el primer elemento array (elemento con índice 1). Para realizar una búsqueda en los otros elementos de array, utilice los filtros o consultas.

Buscar y filtrar

Si se activa un filtro (HFilter), la búsqueda tendrá en cuenta el filtro sólo si la clave utilizada es idéntica.
Para tener en cuenta este filtro en el resto de la navegación (incluso si la clave de búsqueda no está optimizada para el filtro), utilice la constante hKeepFilter.

Recorrer en bucle los registros que coinciden con una condición

En la mayoría de los casos, HReadSeekFirst establece la posición en el archivo de datos para recorrer los registros que coinciden con una condición. HReadNext y HReadPrevious se utilizan para leer los registros coincidentes siguientes y anteriores.
Para ignorar la búsqueda mientras se va a la siguiente o anterior Record, utilice una de las siguientes funciones:
Conectores Nativos

Búsqueda por coincidencia exacta en Access

Para realizar una búsqueda de coincidencia exacta en una base de datos ACCESS, se recomienda utilizar NoSpace si hay caracteres de espacio al final del valor buscado.
Universal Windows 10 AppiPhone/iPadIOS WidgetMac CatalystHFSQL ClassicHFSQL Client/ServerConectores Nativos

Bloqueos

Las cerraduras se aplican sólo cuando se encuentra un Record.
Por defecto (no hay modo de bloqueo especificado en <Opciones>), la Record no está bloqueada.
Si se solicita un bloqueo (constantes hLockWrite o hLockReadWrite), se leerá el registro solo si este aún no ha sido bloqueado.
Recordatorio: Una Record bloqueada puede ser desbloqueada por HUnlockRecNum.
Conectores Nativos Las opciones de bloqueo no tendrán efecto si el proveedor de OLE DB o Conector Nativo (también llamado Native Access) no admite bloqueos.
Universal Windows 10 AppiPhone/iPadIOS WidgetMac CatalystHFSQL ClassicHFSQL Client/ServerConectores Nativos

Optimización de las iteraciones

Para optimizar las primeras iteraciones en un archivo de datos, utilice HOptimize en este archivo de datos.
Conectores Nativos

Conector Nativo XML

El comportamiento de la función HReadSeekFirst depende de las funciones HActivateAutoFilter y HDeactivateAutoFilter.
HActivateAutoFilter está habilitada por Default.
Por lo tanto, para leer el contenido del archivo XML, lea el contenido del archivo principal (el padre) y luego lea el contenido de los archivos relacionado (los hijos).
Por Default, cuando se lee un archivo, se aplica automáticamente un filtro a los archivos de relacionado para leer sólo los registros correspondientes al archivo principal.
Por ejemplo:
El Email de esta persona puede ser recuperado al recorrer el archivo de Personas.
Para ello, basta con set la posición en la ficha "Persona" y aplicar HReadSeekFirst a la ficha "Email".
En este caso, la Record leída en el archivo "Correo electrónico" corresponderá al primer correo electrónico asociado con la Record actual en el archivo "Persona".
Si este mecanismo está desactivado (HDeactivateAutoFilter), el Record leído en el fichero "Email" corresponderá al primer Record encontrado en el fichero Email (y no al hijo del Record leído en el fichero "Persona").
Componente: wd290hf.dll
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 17/07/2022

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