QUERY BY SQL

4D - Documentation   Français   English   German   Español   English   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


QUERY BY SQL ({unaTabla; }formulaSQL)

ParámetroTipoDescripción
unaTablaTablaTabla en la cual devolver una selección de registros o
Tabla por defecto si este parámetro se omite
formulaSQLCadenaFórmula de búsqueda SQL válida representando
la cláusula WHERE de la búsqueda SELECT

Descripción

El comando QUERY BY SQL permite aprovechar directamente el motor SQL integrado de 4D. Este comando puede ejecutar una petición SELECT simple que puede escribirse de esta forma:

   SELECT *
      FROM tabla
      WHERE <sqlFormula>

unaTabla es el nombre de la tabla pasada en el primer parámetro y formulaSQL la cadena de búsqueda pasada en el segundo parámetro.

Por ejemplo, la siguiente instrucción:

   ([Empleados];"nombre='juan'")

es equivalente a la búsqueda SQL:

   SELECT * FROM Empleados WHERE "nombre='juan'"

El comando QUERY BY SQL es similar al comando QUERY BY FORMULA. El comando busca registros en la tabla especificada. Modifica la selección actual de unaTabla para el proceso actual y vuelve el primer registro de la nueva selección el registro actual.

Nota: el comando QUERY BY SQL no puede utilizarse en el contexto de una conexión SQL externa; él contacta el motor SQL integrado de 4D directamente.

QUERY BY SQL aplica formulaSQL a cada registro de la selección de la tabla. formulaSQL es una expresión booleana que debe devolver True o False. Como sabe, en el estándar SQL, una condición de búsqueda puede tener un resultado True, False o NULL. Todos los registros (filas) donde la condición de búsqueda devuelva True se incluyen en la nueva selección actual.

La expresión formulaSQL puede ser simple, como la comparación de un campo (columna) con un valor; o compleja, como un cálculo. Como QUERY BY FORMULA, QUERY BY SQL puede evaluar la información en las tablas relacionadas (ver el ejemplo 4). formulaSQL debe ser una instrucción SQL válida, conforme con el estándar SQL-2 y con respecto a las limitaciones actuales de implementación del SQL en 4D. Para mayor información sobre soporte SQL en 4D, consulte el manual 4D SQL.

El parámetro formulaSQL puede utilizar referencias a expresiones 4D. La sintaxis a utilizar es la misma que para los comandos SQL integrados o el código incluido entre las etiquetas Begin SQL/End SQL, es decir: <<MiVar>> o :MiVar.

Para mayor información, consulte la sección Comandos del tema Fuente de datos externos.

Nota: este comando es compatible con los comandos SET QUERY LIMIT y SET QUERY DESTINATION.

Acerca de relaciones

QUERY BY SQL no utiliza relaciones entre tablas definidas en el editor de estructura 4D. Si quiere utilizar los datos relacionados, tendrá que añadir JOIN a la búsqueda. Por ejemplo, asumiendo que tenemos la siguiente estructura, en la cual una relación Muchos a Uno está relacionado los campos [Personas]Ciudad con [Ciudades]Nombre:

   [Personas]
      Nombre
      Ciudad
   [Ciudades]
      Nombre
      Poblacion

Utilizando el comando QUERY BY FORMULA, puede escribir:

   QUERY BY FORMULA([Personas];[Ciudades]Poblacion>1000)

Utilizando QUERY BY SQL, debe escribir la siguiente instrucción, sin importar si la relación existe o no:

   QUERY BY SQL([Personas];"personas.ciudad=ciudades.nombre AND ciudades.población>1000")

Nota: QUERY BY SQL trata las relaciones Uno a Muchos y Muchos a Uno de una manera diferente a la de QUERY BY FORMULA.

Ejemplos

1. Este ejemplo muestra las oficinas con ventas superiores a 100. La búsqueda SQL es:

   SELECT *
      FROM Oficinas
      WHERE Ventas > 100

Utilizando el comando QUERY BY SQL:

   C_STRING(30;$formulabusqueda)
   $formulabusqueda:="Ventas> 100"
   QUERY BY SQL([Oficinas];$formulabusqueda)

2. Este ejemplo muestra las órdenes comprendidas entre 3 000 y 4 000. La búsqueda SQL es:

   SELECT *
      FROM Ordenes
      WHERE Cantidad BETWEEN 3000 AND 4000

Utilizando el comando QUERY BY SQL:

   C_STRING(40;$formulabusqueda)
   $formulabusqueda:="Cantidad BETWEEN 3000 AND 4000"
   QUERY BY SQL([Ordenes];$formulabusqueda)

3. Este ejemplo muestra cómo obtener el resultado de la búsqueda ordenado con un criterio específico. La búsqueda SQL es:

   SELECT *
      FROM Personas
      WHERE City ='Paris'
         ORDER BY Nombre

Utilizando el comando QUERY BY SQL:

   C_STRING(40;$formulabusqueda)
   $formulabusqueda:="City= 'Paris' ORDER BY Nombre"
   QUERY BY SQL([Personas];$formulabusqueda)

4. Este ejemplo muestra una búsqueda utilizando tablas relacionadas en 4D. En SQL debe utilizar un JOIN para simular esta relación. Consideremos las dos tablas siguientes:

   [Facturas] con los campos (columnas) siguientes:
      ID_Fact: Entero largo
      Fecha_Fact: Fecha
      Total: Real
   [Lineas_Facturas] con las siguientes columnas (campos):
      ID_Linea: Entero largo
      ID_Fact: Entero largo
      Codigo: Alfa (10)

Existe una relación Muchos a Uno de [Lineas_Facturas]ID_Fact con [Facturas]ID_Fact.

Utilizando el comando QUERY BY FORMULA, puede escribir:

   QUERY BY FORMULA([Lineas_Facturas];([Lineas_Facturas]Codigo="FX-200") & (Month of([Facturas]Fecha_Fact)=4))

La búsqueda SQL es:

   SELECT ID_Linea
      FROM Lineas_Facturas, Facturas
      WHERE Lineas_Facturas.ID_Fact=Facturas.ID_Fact
         AND Lineas_Facturas.Codigo='FX-200'
         AND MONTH(Facturas.Fecha_Fact) = 4

Cuando utiliza el comando QUERY BY SQL:

   C_STRING(40;$queryFormula)
   $formulaBusqueda:="Lineas_Facturas.ID_Fact=Facturas.ID_FactAND Lineas_Facturas.Codigo='FX-200' AND MONTH(Facturas.Fecha_Fact)=4"
   QUERY BY SQL([Lineas_Facturas];$formulaBusqueda)

Ver también

QUERY BY FORMULA.

Variables y conjuntos sistema

Si el formato de la condición de búsqueda es correcto, la variable sistema OK toma el valor 1. De lo contrario, toma el valor 0, el resultado del comando es una selección vacía y se devuelve un error. Este error puede ser interceptado por un método instalado utilizando el comando ON ERR CALL.


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