versión 11.3 (Modificado)
A partir de la versión 11, 4D incluye un motor SQL integrado. El programa también incluye un servidor SQL que puede ser consultado por otras aplicaciones 4D o de terceras partes (vía el piloto OBDC de 4D).
Los diferentes modos de acceder al motor SQL de 4D, la configuración del servidor SQL como también los comandos y palabras claves que pueden utilizarse en las búsquedas SQL se detallan en un manual independiente, el manual 4D SQL.
El tema "SQL" agrupa varios comandos 4D relacionados con el uso de SQL en 4D:
Control del servidor SQL: START SQL SERVER y STOP SQL SERVER
Acceso directo al motor SQL integrado: SET FIELD VALUE NULL, Is field value Null, QUERY BY SQL, GET LAST SQL ERROR
Gestión de las conexiones a fuentes de datos externas o internas (SQL pass-through): GET DATA SOURCE LIST, Get current data source, SQL LOGIN, SQL LOGOUT Begin SQL, End SQL, USE INTERNAL DATABASE, USE EXTERNAL DATABASE.
Comandos de alto nivel para manipulación de datos en el marco de conexiones SQL directas o vía ODBC: Begin SQL, End SQL, SQL CANCEL LOAD, SQL LOAD RECORD, SQL EXECUTE, SQL EXPORT, SQL End of selection, SQL SET OPTION, SQL SET Parámetro, SQL IMPORT, SQL GET LAST ERROR, SQL GET OPTION.
Presentación
Este tema contiene los comandos que permiten a 4D acceder a los datos almacenados en otras aplicaciones a través de los protocolos estándar. En la versión actual de 4D, sólo los comandos ODBC están disponibles.
Cómo funcionan los comandos de alto nivel SQL
Los comandos SQL integrados de 4D comienzan con el prefijo "SQL" e implementan los siguientes principios:
Puede utilizar estos comandos de este tema con el motor interno 4D o en una conexión externa que se abre directamente o vía ODBC. El comando SQL LOGIN le permite especificar el tipo de conexión a abrir.
El alcance de una conexión es el proceso. Si quiere administrar simultáneamente varias conexiones, debe iniciar un proceso por SQL LOGIN.
El comando SQL CANCEL LOAD permite ejecutar varias solicitudes SELECT en la misma conexión.
Puede interceptar los errores ODBC generados durante la ejecución de uno de los comandos SQL de alto nivel utilizando el comando ON ERR CALL. El comando SQL GET LAST ERROR puede utilizarse en este caso para obtener información adicional.
Soporte de ODBC estándar
El estándar ODBC (Open DataBase Connectivity) define una librería de funciones estandarizadas. Estas funciones permiten a una aplicación como 4D acceder a través del lenguaje SQL a todos los sistemas de gestión de datos compatibles con ODBC (bases de datos, hojas de cálculo, otras aplicaciones 4D, etc.).
Nota: 4D permite igualmente importar y exportar datos de una fuente ODBC en modo Diseño. Para mayor información, consulte el Manual de Diseño 4D.
Nota: Los comandos SQL de alto nivel del tema "Fuente de datos externos" de 4D pueden utilizarse para implementar soluciones simples permitiendo la comunicación entre las aplicaciones 4D y las fuentes de datos ODBC. Si sus aplicaciones necesitan un soporte más extenso del estándar ODBC, usted necesitará el plug-in ODBC "bajo nivel" de 4D, 4D ODBC Pro.
Correspondencia de los tipos de datos
La siguiente tabla lista las correspondencias establecidas automáticamente por 4D entre los tipos de datos 4D y SQL:
4D Tipo | SQL Tipo |
C_STRING | SQL_C_CHAR |
C_TEXT | SQL_C_CHAR |
C_REAL | SQL_C_DOUBLE |
C_DATE | SQL_C_TYPE_DATE |
C_TIME | SQL_C_TYPE_TIME |
C_BOOLEAN | SQL_C_BIT |
C_INTEGER | SQL_C_SHORT |
C_LONGINT | SQL_C_SLONG |
C_BLOB | SQL_C_BINARY |
C_PICTURE | SQL_C_BINARY |
C_GRAPH | SQL_C_BINARY |
Referenciar las expresiones 4D en las solicitudes SQL
4D ofrece dos maneras de insertar expresiones 4D (variables, arrays, campos, expresiones válidas) en las solicitudes SQL: la asociación directa y la definición de parámetros utilizando SQL SET PARAMETER.
La asociación directa se puede efectuar de dos formas:
Insertando el nombre del objeto 4D a utilizar entre los caracteres << y >> en el texto de la solicitud.
Precediendo la referencia con dos puntos":".
Ejemplos:
ODBC EXECUTE("INSERT INTO emp (empnum,enombre) VALUES (<<vEmpnum>>,<<vEnombre>>)") ODBC EXECUTE("SELECT edad FROM Persona WHERE nombre= :vNombre")
En estos ejemplos, los valores actuales de las variables 4D vEmpnum, vEnombre y Vnombre reemplazarán los parámetros cuando la solicitud se ejecute. Esta solución también funciona con campos y arrays 4D.
Esta sintaxis de fácil utilización, presenta el inconveniente de no estar conforme al estándar SQL y no permitir la utilización de parámetros de salida. Para remediar esto, puede utilizar el comando SQL SET PARAMETER. Este comando puede utilizarse para definir cada objeto 4D a integrar en una solicitud así como también su modo de utilización (entrada, salida o ambos). Entonces la sintaxis producida es estándar. Para mayor información, consulte la descripción del comando SQL SET PARAMETER.
1. Este ejemplo ejecuta una solicitud SQL que utiliza directamente los arrays 4D asociados:
ARRAY TEXT(MiArrayText;10) ARRAY LONGINT(MiArrayEnteroLargo;10) For(vContador;1;Size of array(MiArrayText)) MiArrayText{vContador}:="Text"+String(vContador) MiArrayEnteroLargo{vContador}:=vContador End for SQL LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (campo_alfa, campo_enterolargo) VALUES (<<MiArrayText>>, <<MiArrayEnteroLargo>>)" SQL EXECUTE(SQLStmt)
2. Este ejemplo puede utilizarse para ejecutar una SQL que utiliza directamente los campos 4D asociados:
ALL RECORDS([Tabla 2]) SQL LOGIN("mysql";"root";"") SQLStmt:="insert into app_testTable (campo_alfa, campo_enterolargo) VALUES (<<[Tabla 2]Campo1>"+">,<<[Tabla2]Campo2>>)" SQL EXECUTE(SQLStmt)
3. Este ejemplo le permite ejecutar una búsqueda SQL pasando directamente una variable vía un puntero sin referencia:
C_LONGINT($vLong) C_POINTER($vPuntero) $vLong:=1 $vPuntero:=->$vLong SQL LOGIN("mysql";"root";"") SQLStmt:="SELECT Col1 FROM TEST WHERE Col1=:$vPuntero" SQL EXECUTE(SQLStmt)
Recuperación de valores en 4D
La recuperación de los valores en el lenguaje 4D que resulta de las de las consultas SQL se lleva a cabo de dos formas:
Utilizando los parámetros adicionales del comando SQL EXECUTE (solución recomendada).
Utilizando la cláusula INTO en la búsqueda SQL misma (solución reservada para casos especiales).