4D v16.3

QUERY BY FORMULA

Inicio

 
4D v16.3
QUERY BY FORMULA

QUERY BY FORMULA 


 

QUERY BY FORMULA ( tabla {; formula} ) 
Parámetro Tipo   Descripción
tabla  Tabla in Tabla en la cual efectuar la búsqueda
formula  Booleano in Fórmula de búsqueda

QUERY BY FORMULA busca registros en tabla. QUERY BY FORMULA modifica la selección actual de tabla para el proceso actual y hace del primer registro el nuevo registro actual.

QUERY BY FORMULA y QUERY SELECTION BY FORMULA funcionan exactamente de la misma manera, excepto que QUERY BY FORMULA busca en todos los registros de la tabla y QUERY SELECTION BY FORMULA busca únicamente en los registros de la selección actual.

Los dos comandos aplican formula a cada registro de la tabla o de la selección. formula es una expresión booleana que debe devolver TRUE o FALSE. Si formula devuelve TRUE, el registro está incluido en la nueva selección.

El parámetro formula puede ser simple, como la comparación de un campo con un valor; o compleja, como la realización de un calculo o incluso una evaluación de los valores en una tabla relacionada. formula puede ser una función 4D (comando), o una expresión que usted haya creado. Cuando trabaje con campos de tipo Alfa o Texto, puede utilizar en formula símbolos arroba (@) como también el operador "contiene" (%) para búsquedas de palabras claves. Para mayor información, por favor consulte la descripción del comando QUERY.

Si omite el parámetro formula, 4D muestra la caja de diálogo de búsqueda (el usuario puede añadir una línea de fórmula efectuando Alt+clic en el botón [+]).

Cuando termina la búsqueda, el primer registro de la nueva selección es cargado desde el disco y se convierte en el registro actual.

Estos comandos son optimizados y pueden particularmente aprovechar los índices. Cuando el tipo de búsqueda lo permite, estos comandos ejecutan búsquedas equivalentes al comando QUERY. Por ejemplo, la instrucción QUERY BY FORMULA ([mitabla]; [mitabla]micampo=valor)  se ejecutará igual que QUERY ([mitabla]; [mitabla]micampo=valor), que permite utilizar índices. 4D también puede optimizar búsquedas que contengan partes que no puedan ser optimizadas, ejecutando primero las partes optimizables y luego combinando los resultados con el resto de la búsqueda. Por ejemplo, la instrucción QUERY BY FORMULA ([mitabla]; Length(micampo)=valor1 | micampo=valor2 ) se optimizará parcialmente.

Estos comandos por defecto efectúan “uniones” como SQL cuando compara campos de diferentes tablas. Esto significa que no es necesario que exista una relación automática estructural entre las tablas. Por ejemplo, puede ejecutar una instrucción del tipo QUERY BY FORMULA([Table_A];([Table_A]field_X = [Table_B]field_Y) & ([Table_B]field_Y = "abc")) (ver ejemplo 3). La primera parte de la fórmula ([Table_A]field_X = [Table_B]field_Y) establece la unión entre dos campos y la segunda parte ([Table_B]field_Y = "abc") define el criterio de búsqueda (al menos un criterio debe definirse).
Si existen, las relaciones entre tablas, en principio no se utilizan. Sin embargo, estos comandos utilizarán relaciones automáticas en los siguientes casos:

- Si la formula no puede descomponerse en elementos de la forma { campo ; comparador ; valor}
- Si dos campos de la misma tabla son comparados.

Nota: por razones de compatibilidad, es posible desactivar el mecanismo de uniones, bien sea globalmente vía las Preferencias de la base (bases de datos convertidas únicamente) o por procesos utilizando el comando SET DATABASE PARAMETER.

4D Server: este comando se ejecuta en el servidor, lo cual optimiza su ejecución. Note que cuando las variables son llamadas directamente en formula, la ordenación se calcula con el valor de la variable en el equipo cliente. Por ejemplo, la instrucción QUERY BY FORMULA ([mitabla]; [mitabla]micampo=mivariable) se ejecutará en el servidor pero con el contenido de la variable mivariable del equipo cliente.

Compatibility note: hasta 4D Server v11, este comando se ejecutaba en el equipo cliente. Por compatibilidad, este funcionamiento se conserva en las bases de datos convertidas. Sin embargo, una propiedad de compatibilidad y un selector del comando SET DATABASE PARAMETER permiten adoptar la ejecución en el servidor en bases de datos convertidas.

Este ejemplo busca los registros para todas las facturas que se introdujeron en diciembre de cualquier año. El principio consiste en aplicar la función Month of a cada registro. Esta búsqueda no podría realizarse de otra forma sin crear un campo separado para el mes:

 QUERY BY FORMULA([Facturas];Month of([Facturas]Entrada)=12) ` Buscar las facturas entradas en diciembre

Este ejemplo busca los registros de las personas que tienen nombres con más de 10 caracteres:

 QUERY BY FORMULA([Personas];Length([Personas]Nombre)>10) ` Buscar nombres de más de diez caracteres

Este ejemplo activa las uniones SQL para una búsqueda por fórmula específica:

 $valorActual:=Get database parameter(QUERY BY FORMULA Joins)
 SET DATABASE PARAMETER(QUERY BY FORMULA Joins;2) `Activar uniones SQL
  `Buscar todas la líneas de facturas del cliente "ACME" aunque las tablas no estén relacionadas
 QUERY BY FORMULA([Linea_Facturas];([Linea_Facturas]Id_Factura=[Facturas]Id &[Facturas]Cliente="ACME"))
 SET DATABASE PARAMETER(QUERY BY FORMULA Joins;$valorActual`Se reestablece la configuración actual



Ver también 

QUERY
QUERY BY SQL
QUERY SELECTION
QUERY SELECTION BY FORMULA

 
PROPIEDADES 

Producto: 4D
Tema: Búsquedas
Número 48

El comando cambia el registro actualEl comando cambia la selección actualThis command can be run in preemptive processesComportamiento diferente en modo remoto

 
HISTORIA 

Modificado: 4D v11 SQL Release 2

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)