4D v16.3

QUERY BY SQL

Inicio

 
4D v16.3
SQL
QUERY BY SQL

QUERY BY SQL 


 

QUERY BY SQL ( {tabla ;} formulaSQL ) 
Parámetro Tipo   Descripción
tabla  Tabla in Tabla en la cual devolver una selección de registros o Tabla por defecto si este parámetro se omite
formulaSQL  Cadena in Fórmula de búsqueda SQL válida representando la cláusula WHERE de la búsqueda SELECT

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 .

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

Recordatorio: las referencias a las variables locales no son posibles en modo compilado. Para mayor información sobre la programación SQL en 4D, consulte la sección Presentación de los comandos del tema SQL

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.

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)

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)

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)

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)

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.



Ver también 

QUERY BY FORMULA

 
PROPIEDADES 

Producto: 4D
Tema: SQL
Número 942

Este comando modifica la variable sistema OKEste comando modifica la variable sistema ErrorEl comando cambia el registro actualEl comando cambia la selección actualCommande provoquant un échange entre le client et le serveur

 
HISTORIA 

Creado por: 4D v11 SQL

 
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)