QUERY BY FORMULA

4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 11.2 (Modificado)


QUERY BY FORMULA ({tabla}{; }{formula})

ParámetroTipoDescripción
tablaTablaTabla en la cual efectuar la búsqueda
formulaBooleanoFórmula de búsqueda

Descripción

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 estándar de búsqueda.

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) será ejecutada 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 ) será optimizada parcialmente.

Estos comandos por defecto efectúan "uniones" como SQL. Esto significa que no es necesario que exista una relación automática estructural entre la tabla A y la tabla B para poder ejecutar una instrucción del tipo QUERY BY FORMULA([Tabla_A];[Tabla_A]campo_X = [Tabla_B]campo_Y) (ver ejemplo 3).

Las relaciones definidas en el editor de estructura, si existen, 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: A partir de la versión 11 de 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 sentencia QUERY BY FORMULA ([mitabla]; [mitabla]micampo=mivariable) ese ejecutará sobre el servidor pero con el contenido de la variable mivarible del equipo cliente.

Por otra parte, este principio no aplica a las fórmulas utilizando métodos que, en sí mismos, llamen variables (los valores de las variables se evalúan en el servidor). En este contexto, puede ser recomendable utilizar el atributo del método "Execute on server" que permite ejecutar un método en el servidor mientras pasa los parámetros (variables) (ver el Manual de Diseño).

En las versiones anteriores de 4D Server, este comando se ejecutaba en los equipos clientes. Por compatibilidad, este funcionamiento se conserva en las bases de datos convertidas a versión 11. Una preferencia de compatibilidad y un selector del comando SET DATABASE PARAMETER permiten adoptar el funcionamiento de la versión 11 (ejecución en el servidor) en estas bases de datos.

Ejemplos

1. 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

2. 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

3. 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.


4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente