|
|
|
|
- Equivalencia
- Filtro (sintaxis 2)
- Salir de cada bucle de FOR EACH
- Influencia del modo de salida del bucle en la iteración automatic de los ficheros de datos
- Ejecutar la siguiente iteración
- Modificación de la clave utilizada para la iteración automatic de ficheros de datos o consultas
Sentencia FOR EACH/FOR ALL (bucle a través de los archivos)
No disponible con este tipo de conexión
La declaración FOR EACH se usa para ejecutar diferentes tipos de bucles HFSQL: - Bucle completo (según una clave especificada o no)
- Bucle con filtro (filtro simple, filtro sobre una tecla o filtro sobre la tecla de búsqueda). En este caso, los filtros aceptan los operadores de HFilter.
Puede recorrer en bucle archivos de datos, vistas, consultas o fuentes de datos. Los registros bloqueados en lectura/escritura no se leen. Observaciones: - Si la clave proporcionada a la declaración FOR EACH es la clave que devolvió previamente HFilter , se respetará el filtro.
- Se aceptan las sentencias FOR ALL, FOR EACH. La instrucción FOR EACH se usará en esta documentación, pero se puede reemplazar con FOR ALL .
// Syntax 1 FOR EACH Customer // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END
// Syntax 1 FOR EACH Customer ON CustomerNum // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END
// Syntax 2 // Loop with filter FOR EACH Customer where "CustomerCity = 'Montpellier'" // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END City = "Lyon" FOR EACH Customer where "CustomerCity = '"+City+"' and CustomerAge >= 21" // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END // Syntax 2 // Loop with filter on a specific key FOR EACH Customer where "CustomerCity = 'Montpellier'" ON CustomerNum // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END City = "Lyon" FOR EACH Customer where "CustomerCity = '" + City + "' AND " + ... "CustomerAge >= 21" ON CustomerNum // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END // Syntax 3 // Comparison according to a value FOR EACH Customer where CustomerName = "Doe" // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END // Comparison according to a value FOR EACH Orders where OrderDate = "20031231" // Add orders into the List Box control ListAdd(LIST_OrderList, Order.OrderNum) END
// Syntax 3 // Comparison according to a set of values FOR EACH Orders where OrderDate = "20030101" TO "20031231" // Add orders into the List Box control ListAdd(LIST_OrderList, Order.OrderNum) END // Comparison according to a set of values FOR EACH Orders where "20030101" <= OrderDate <= "20031231" // Add orders into the List Box control ListAdd(LIST_OrderList, Order.OrderNum) END
// Syntax 4 // Loop with filter on a specific key FOR EACH Customer where CityCustomer [= "Mont" FromEnd // Add customers into the List Box control ListAdd(LIST_CustomerList, Customer.CustomerNum) END // Syntax 5 // Loop with filter on a composite key FOR EACH ContactFile where CCState = ["Prospect", 69] // Add contacts into the List Box control ListAdd(LIST_ContactList, ContactFile.ContactNum) END // Loop with filter on a composite key FOR EACH ContactFile where CZipCode [= ["Prospect", 69] // Add contacts into the List Box control ListAdd(LIST_ContactList, ContactFile.ContactNum) END Sintaxis
1 - Bucle completo Ocultar los detalles
1. Full loop using the best search key
Caution: Modifying the file in the analysis (adding a key item for example) can modify the search key used. FOR EACH <File> [[WITHOUTSAVEPOSITION,] [<Direction>]] ... END 2. Full loop using the key passed as parameter FOR EACH <File> ON <Key item> [[WITHOUTSAVEPOSITION,] [<Direction>]] ... END
<FOR EACH>: Marca el inicio del bloque de instrucciones. <File>: Nombre del archivo de datos HFSQL, vista o consulta que se va a recorrer en bucle. <ON>: Define el tipo de bucle. <Key item>: Nombre del elemento clave utilizado para recorrer el archivo de datos, la vista o la consulta HFSQL. <WITHOUTSAVEPOSITION>: Palabra clave opcional. Desactiva las funciones de guardar y restaurar la posición en el bucle. En efecto, FOR EACH guarda automáticamente la posición al principio del bucle y restaura esta posición en caso de salida "Normal" del bucle (la posición no se restaura si el bucle es interrumpido por las palabras clave BREAK, RETURN o RESULT). Estas operaciones de guardar y restaurar posiciones pueden tener un alto impacto (principalmente en términos de tiempo), especialmente si el código que utiliza la instrucción FOR EACH en sí mismo es llamado en un bucle. <Direction>: Indicador opcional de la dirección de iteración:
| | FromBeginning (valor predeterminado) | Recorre el archivo de datos desde el primer elemento hasta el último. | FromEnd | Recorre el archivo de datos desde el último elemento hasta el primero. |
<END>: Marca el final del bloque de instrucciones.
2 - Bucle con filtro Ocultar los detalles
1. Loop with filter (the best search key is automatically defined)
Caution: Modifying the file in the analysis (adding a key item for example) can modify the search key used. FOR EACH <File> WHERE "<1st Condition> [AND/OR/NOT <2nd Condition> [ET/OU/PAS...<Nth Condition>]]" [[WIHTOUTSAVEPOSITION,] [<Direction>]] ... END 2. Loop with filter according to the specified key FOR EACH <File> WHERE "<1st Condition> [AND/OR/NOT <2nd Condition> [ET/OU/PAS...<Nth Condition>]]" [[WIHTOUTSAVEPOSITION,] [<Direction>]] ... ON <Key Item> END
<FOR EACH>: Marca el inicio del bloque de instrucciones. <File>: Nombre del archivo de datos HFSQL, vista o consulta que se va a recorrer en bucle. <WITH>: Define el tipo de bucle. <Nth Condition>: Enésima condición del filtro para el bucle HFSQL. Para más detalles, consulte la página web de Observaciones. <AND/OR/NOT>: Operadores lógicos opcionales utilizados para combinar las diferentes condiciones de filtrado. <WITHOUTSAVEPOSITION>: Palabra clave opcional. Desactiva las funciones de guardar y restaurar la posición en el bucle. En efecto, FOR EACH guarda automáticamente la posición al principio del bucle y restaura esta posición en caso de salida "Normal" del bucle (la posición no se restaura si el bucle es interrumpido por las palabras clave BREAK, RETURN o RESULT). Estas operaciones de guardar y restaurar posiciones pueden tener un alto impacto (principalmente en términos de tiempo), especialmente si el código que utiliza la instrucción FOR EACH en sí mismo es llamado en un bucle. <Direction>: Indicador opcional de la dirección de iteración:
| | FromBeginning (valor predeterminado) | Recorre el archivo de datos desde el primer elemento hasta el último. | FromEnd | Recorre el archivo de datos desde el último elemento hasta el primero. |
<Key item>: Elemento correspondiente a una clave del archivo de datos. El filtro se realizará en esta tecla. <END>: Marca el final del bloque de instrucciones.
3 - Bucle con filtro de selección en la tecla de búsqueda Ocultar los detalles
1. Comparison filter according to a value FOR EACH <Fie> WHERE <Key item> [ = / <= / >= ] <Value> [[WIHTOUTSAVEPOSITION,] [<Direction>]] ... END 2. Comparison filter according to an interval of values FOR EACH <File> WHERE <Key item> = <Minimal value> TO <Maximum value> [[WITHOUTSAVEPOSITION,] [<Direction>]] ... END
FOR EACH <File> WHERE <Minimum value> <= <Key item> <= <Maximum value> [[WIHTOUTSAVEPOSITION,] [<Direction>]] ... END
<FOR EACH>: Marca el inicio del bloque de instrucciones. <File>: Nombre del archivo de datos HFSQL, vista o consulta que se va a recorrer en bucle. <WITH>: Define el tipo de bucle. <Key item>: Elemento clave del archivo de datos para realizar un bucle. <Value>: Valor comparison del elemento clave. <Minimum value>, <Maximum value>: Valor comparison del elemento clave. <WITHOUTSAVEPOSITION>: Palabra clave opcional. Desactiva las funciones de guardar y restaurar la posición en el bucle. En efecto, FOR EACH guarda automáticamente la posición al principio del bucle y restaura esta posición en caso de salida "Normal" del bucle (la posición no se restaura si el bucle es interrumpido por las palabras clave BREAK, RETURN o RESULT). Estas operaciones de guardar y restaurar posiciones pueden tener un alto impacto (principalmente en términos de tiempo), especialmente si el código que utiliza la instrucción FOR EACH en sí mismo es llamado en un bucle. <Direction>: Indicador opcional de la dirección de iteración:
| | FromBeginning (valor predeterminado) | Recorre el archivo de datos desde el primer elemento hasta el último. | FromEnd | Recorre el archivo de datos desde el último elemento hasta el primero. |
<END>: Marca el final del bloque de instrucciones.
4 - Bucle con búsqueda genérica "Empezar por", ascendente o descendente Ocultar los detalles
FOR EACH <File> WHERE <Key item> [= <Beginning of sought value> [[WITHOUTSAVEPOSITION,] [<Direction>]] ... END
<FOR EACH>: Marca el inicio del bloque de instrucciones. <File>: Nombre del archivo de datos HFSQL, vista o consulta que se va a recorrer en bucle. <WITH>: Define el tipo de bucle. <Key item>: Elemento clave del archivo de datos para realizar un bucle. <Beginning of sought value>: Valor comparison del elemento clave. <WITHOUTSAVEPOSITION>: Palabra clave opcional. Desactiva las funciones de guardar y restaurar la posición en el bucle. En efecto, FOR EACH guarda automáticamente la posición al principio del bucle y restaura esta posición en caso de salida "Normal" del bucle (la posición no se restaura si el bucle es interrumpido por las palabras clave BREAK, RETURN o RESULT). Estas operaciones de guardar y restaurar posiciones pueden tener un alto impacto (principalmente en términos de tiempo), especialmente si el código que utiliza la instrucción FOR EACH en sí mismo es llamado en un bucle. <Direction>: Indicador opcional de la dirección de iteración:
| | FromBeginning (valor predeterminado) | Recorre el archivo de datos desde el primer elemento hasta el último. | FromEnd | Recorre el archivo de datos desde el último elemento hasta el primero. |
<END>: Marca el final del bloque de instrucciones.
5 - Bucle con filtro en una tecla compuesta Ocultar los detalles
1. Exact-match search FOR EACH <File> WHERE <Composite key> = [<Value of component 1>, ..., <Value of component N>] [[WITHOUTSAVEPOSITION,] [<Direction>]] ... END 2. Generic search ("Starts with") FOR EACH <File> WHERE <Composite key> [= [<Value of component 1>, ..., <Value of component N>] [[WITHOUTSAVEPOSITION,] [<Direction>]]
... END
<FOR EACH>: Marca el inicio del bloque de instrucciones. <File>: Nombre del archivo de datos HFSQL o de la vista que se va a recorrer en bucle. <WITH>: Define el tipo de bucle. <Composite key>: Tecla compuesta del archivo de datos para realizar un bucle. <Value of component N>: Valor de la Component. <WITHOUTSAVEPOSITION>: Palabra clave opcional. Desactiva las funciones de guardar y restaurar la posición en el bucle. En efecto, FOR EACH guarda automáticamente la posición al principio del bucle y restaura esta posición en caso de salida "Normal" del bucle (la posición no se restaura si el bucle es interrumpido por las palabras clave BREAK, RETURN o RESULT). Estas operaciones de guardar y restaurar posiciones pueden tener un alto impacto (principalmente en términos de tiempo), especialmente si el código que utiliza la instrucción FOR EACH en sí mismo es llamado en un bucle. <Direction>: Indicador opcional de la dirección de iteración:
| | FromBeginning (valor predeterminado) | Recorre el archivo de datos desde el primer elemento hasta el último. | FromEnd | Recorre el archivo de datos desde el último elemento hasta el primero. |
<END>: Marca el final del bloque de instrucciones. Observaciones - La sintaxis FOR EACH WHERE
- = es idéntica a la del bucle el archivo de datos con HReadSeek. Este bucle utiliza los filtros definidos anteriormente en el archivo de datos.
observación: Los registros tachados se tienen en cuenta en el bucle. - La sintaxis FOR EACH WHERE se utiliza para definir un filtro y realizar un bucle a través de el archivo de datos. Este bucle ignora los filtros definidos anteriormente.
- Al utilizar consultas, la sintaxis "FOR EACH" puede ser más lenta que la sintaxis "WHILE NOT HOut". Cuando se utiliza FOR EACH, el contexto se guarda/restaura automáticamente (equivalente a HSavePosition/HRestorePosition).
La sintaxis general de un filtro tiene el siguiente formato: "<Item name> <Operators> <Item value>" Por ejemplo: "CustomerName > 'Doe' and ZipCode = 75 or CustomerAge >= 32"
Los operadores soportados dependen del tipo de los elementos utilizados en la condición: | | | <> | Diferente | Válido para todos los tipos | > | Mayor que | Válido para todos los tipos | >= | Mayor que o igual a | Válido para todos los tipos | < | Menor que | Válido para todos los tipos | <= | Menor que o igual a | Válido para todos los tipos | = | Estrictamente igual a | Válido para todos los tipos | ~= | Casi igual a | Válido solo para los tipos "cadena" | ] | Contiene | Válido solo para los tipos "cadena" | ]= | Comienza por | Válido solo para los tipos "cadena" |
Observaciones: - Las cuerdas constantes deben ser encerradas en comillas simples. Por ejemplo: "NombreCliente = '"+Cliente+"'"
- sólo debe contener letras, dígitos y caracteres de subrayado ("_"). Si el <Nombre de elemento> contiene otros caracteres (apóstrofo, etc.), este nombre debe estar entre comillas dobles. Por ejemplo: "correo_ecectrónico@"]'com'
- Las comparaciones entre cadenas se realizan según el valor ASCII de los caracteres y no según el valor lexicográfico ('a' > 'Z').
- Los memos binarios y las claves compuestas no pueden formar parte de un <Valor del campo>.
- Si <Valor del campo> contiene una comilla simple o doble, la comilla simple (o doble) debe ir precedida de una barra invertida.
Salir de cada bucle de FOR EACH Hay varias declaraciones disponibles: - RETURN: Salga del ciclo FOR EACH y salga del proceso actual (o Procedure ).
- RETURN: Devuelva un estado reporte al llamado Process. Salga del ciclo FOR EACH y salga del proceso actual (o Procedure ).
- BREAK: Sale del bucle FOR EACH y ejecuta el resto del Process actual.
La función Cerrar permite salir del bucle FOR EACH y cerrar la ventana actual. Atención: RETURN y RETURN no pueden utilizarse en el mismo Process. Influencia del modo de salida del bucle en la iteración automatic de los ficheros de datos - Si el ciclo termina automáticamente:
- Se restablece la posición en el archivo de datos antes del inicio del bucle.
- Se desactiva cualquier filtro necesario para el bucle.
- Si el bucle se interrumpe (BREAK, RETURN, RESULT, Close, etc.):
- La posición en el archivo de datos antes del inicio del bucle no se restablece.
- Cualquier filtro necesario para el bucle permanece activado. Debe desactivarse manualmente (HDeactivateFilter).
Si se ha utilizado la palabra clave WIHTOUTSAVEPOSITION, se desactivan las operaciones de guardado y restauración de posición realizadas en el bucle.. En efecto, FOR EACH guarda automáticamente la posición al principio del bucle y restaura esta posición en caso de salida "Normal" del bucle (la posición no se restaura si el bucle es interrumpido por las palabras clave BREAK, RETURN o RESULT). Estas operaciones de guardar y restaurar posiciones pueden tener un alto impacto (principalmente en términos de tiempo), especialmente si el código que utiliza la instrucción FOR EACH en sí mismo es llamado en un bucle. Ejecutar la siguiente iteración Para ejecutar directamente la siguiente iteración sin terminar el código de la iteración actual, utilice la instrucción Continuar: // Loop through FileName in the order of KeyItem FOR EACH FileName ON KeyItem ... IF Condition = True THEN CONTINUE // Return to the FOR EACH keyword // and go to the next record ... END Modificación de la clave utilizada para la iteración automatic de ficheros de datos o consultas Si el valor del elemento se modifica al recorrer un archivo de datos (o una consulta), es posible que algunos registros se recorran varias veces. Al cambiar el elemento de exploración, se actualiza la clave de índice del archivo. Esta modificación se tiene en cuenta durante la lectura de automatic de los siguientes registros. Esto también es válido para un bucle automatic de una consulta ordenada (ORDER BY) sin clave de búsqueda. // Loop through FileName using KeyItem FOR EACH FileName ON KeyItem ... IF Condition = True THEN // Modify the value of the search key FileName.KeyItem = "New value" HModify(FileName) END // If the new value of the search key // sets the position on the following record in the iteration order // the record will be read again during the loop. ... END
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|