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 / Sintaxis WLanguage / Instrucciones estructuradas
  • 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
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
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 .
Ejemplo
// 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.
FromEndRecorre 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.
FromEndRecorre 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.
FromEndRecorre 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.
FromEndRecorre 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.
FromEndRecorre el archivo de datos desde el último elemento hasta el primero.
<END>:
Marca el final del bloque de instrucciones.
Observaciones

Equivalencia

  • 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).

Filtro (sintaxis 2)

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:
<>DiferenteVálido para todos los tipos
>Mayor queVálido para todos los tipos
>=Mayor que o igual aVálido para todos los tipos
<Menor queVálido para todos los tipos
<=Menor que o igual aVálido para todos los tipos
=Estrictamente igual aVálido para todos los tipos
~=Casi igual aVálido solo para los tipos "cadena"
]ContieneVálido solo para los tipos "cadena"
]=Comienza porVá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
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: 10/05/2023

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