Bases de datos externas

Se trata de un conjunto de comandos de instrucción que nos permiten interactuar con bases de datos externas de forma nativa.

A continuación indicamos los plugins existentes en cada plataforma:

Windows:

  • ODBC

  • SQLite v3

  • PostgreSQL

PostgreSQL requiere la versión 18 del cliente nativo.

macOS:

  • SQLite (v3)

  • PostgreSQL

En macOS se ha de indicar como driver la propia senda del driver para ODBC.

Linux:

  • ODBC

  • PostgreSQL

  • SQLite

En Linux se han de usar DSN para ODBC.

Para que otros plugins sean operativos será necesario instalar componentes de terceros para su funcionamiento.

Es posible por tanto compilar plugins para acceder de forma más optimizada a dichas bases de datos y vDevelop detectará automáticamente dichos plugins para su selección y uso.

Para el desarrollo de la plataforma Velneo se usan librerías de QT, por lo que los plugins de acceso a base de datos deben ser construidos en base a sus instrucciones.

En la siguiente dirección podremos encontrar toda la información necesaria: SQL driver de QT.

En general, el acceso a bases de datos SQLite es el mejor soportado en todas las plataformas, Oracle vía OCI, PosgreSQL y MySQL a través de ODBC o con driver nativo están bastante soportados en Windows y Linux. En cuanto al resto de drivers y sistemas operativos, depende de la calidad de los drivers existentes en cada sistema operativo.

Velneo suministra los plugins para conectarse a las bases de datos externas, no los drivers.

Dado que Velneo es una aplicación de 64 bits solamente podremos interactuar con drivers de 64 bits.

BD: conectar

Comando de instrucción del grupo Bases de datos externas que permite realizar una conexión con una base de datos externa.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa con la que se desea establecer la conexión. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: crear manejador.

Fórmula de usuario (Opcional)

Expresión de tipo fórmula con el nombre del usuario con el que conectarse a la base de datos externa. Ese usuario, obviamente, deberá ser un usuario declarado en la base de datos externa. Para facilitar la construcción de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Fórmula de contraseña (Opcional)

Expresión de tipo fórmula con la contraseña del usuario establecido en el parámetro anterior.Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Identificador de la variable local booleana de retorno de ok (Opcional)

Variable local de tipo booleano en la que se guardará si se ha llevado a cabo la conexión (1) o no (0).

Identificador de la variable local alfabética de retorno (Opcional)

Variable local de tipo alfabético en la que se guardará el mensaje retornado por el sistema al realizar la conexión.

Funcionalidad

Este comando de instrucción de proceso permite realizar una conexión con una base de datos externa declarada previamente en el proceso con el comando de instrucción BD: Crear manejador.

Este comando de instrucción genera un subproceso y cualquier acción que desee llevarse a cabo con la base de datos conectada tendrá que ser incluida dentro del mismo.

Comentarios

La creación del manejador de la base de datos externa, la conexión y cualquier operación que desee llevarse a cabo durante la misma tendrán que ser implementadas dentro del mismo proceso; es decir, todo ha de ser ejecutado en el mismo hilo.

Una vez finalizado el subproceso que este comando de instrucción genera se procederá automáticamente a la desconexión con la base de datos externa.

Si no se establece la conexión con la base de datos externa no se ejecutará el subproceso de este comando de instrucción de proceso. Por lo tanto, si queremos conocer en el proceso si se ha establecido o no la conexión con la base de datos externa, la variable de retorno debemos comprobarla fuera de dicho subproceso. Ejemplo:

Rem ( Se crea el manejador de la base de datos externa )
BD: crear manejador ( dbext, ODBC (compatible Microsoft SQL Server), SQL_DATA_ORIGIN, , ,  )
Rem ( Se procede a efectuar la conexión )
Set ( DB_OK_CONNECT, 0 )
BD: conectar ( dbext, SQL_USR, "", DB_OK_CONNECT, DB_RETURN_CONNECT )
    Set ( DB_OK_CONNECT, 1 )
If ( DB_OK_CONNECT = 0)
     Mensaje ( "Error de conexión",Información,, )

Ejemplo

Conexión con la base de datos externa del manejador_dbext especificando el usuario y contraseña.

Se ha especificado la variable local OK para poder comprobar si la conexión se ha realizado con éxito y la variable RETORNO donde el sistema devuelve un mensaje.

BD: Conectar ( manejador_dbext, SQL_USUARIO, SQL_CONTRASEÑA, OK, RETORNO )

BD: crear manejador

Comando de instrucción del grupo Bases de datos externas en la que se declarará la base de datos externa con la que se desea establecer una conexión y que genera un manejador de la misma. El resto de los comandos de bases de datos externas han de usar este manejador como referencia para la acción que realizan.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de la base de datos externa

Etiqueta alfanumérica que servirá para referenciar la base de datos externa en el resto de los comandos de bases de datos que vayan a hacer uso de la misma.

Driver de base de datos externa

Especificación del driver que se usará para la comunicación con la base de datos externa. Los valores posibles son: ODBC, PostgreSQL y SQLite.

Fórmula de nombre de origen de datos (DSN) o cadena de conexión para ODBC o nombre de la base de datos

Expresión de tipo fórmula con la especificación del DSN, cadena de conexión ODBC o nombre de la base de datos con la que se va a establecer la conexión. Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Fórmula de opciones de conexión (opcional)

Expresión de tipo fórmula con la especificación de las opciones de conexión para la base de datos con la que se va a establecer la conexión. Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Fórmula de dominio o IP del servidor (opcional)

Expresión de tipo fórmula con la especificación del nombre de dominio o IP del servidor de la base de datos con la que se va a establecer la conexión. Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Fórmula de puerto (opcional)

Si en el parámetro anterior hemos establecido un valor, en éste indicaremos, mediante una fórmula, el número de puerto donde está a la escucha el servidor de la base de datos con la que se va a establecer la conexión. Para facilitar la especificación de dicha fórmula podremos hacer uso del asistente para edición de fórmulas.

Funcionalidad

Este comando de instrucción permite declarar la base de datos externa con la que se desea establecer una conexión y genera un manejador de la misma. El resto de los comandos de bases de datos externas han de usar este manejador como referencia para la acción que realizan.

Comentarios

Es posible instanciar distintas bases de datos externas un mismo proceso.

Para efectuar la conexión con la base de datos definida mediante este comando de instrucción de proceso usaremos el comando BD: conectar.

La creación del manejador de la base de datos externa, la conexión y cualquier operación que desee llevarse a cabo durante la misma tendrán que ser implementadas dentro del mismo proceso; es decir, todo ha de ser ejecutado en el mismo hilo.

Una vez finalizado el proceso se procederá automáticamente a la desconexión con la base de datos externa.

Ejemplo

Creación del manejador manejador_dbext que identificará a la base de datos externa usando el driver SQLite con el origen de datos DSN "SQL-ARTICULOS".

BD: Crear manejador ( manejador_dbext, SQLite versión 3, "SQL-ARTICULOS", , ,  )

BD: finalizar recorrer lista sin procesar más filas

Comando de instrucción del grupo Bases de datos externas que permite interrumpir un bucle de lectura de elementos de una base de datos externa.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa cuyos elementos estamos leyendo. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: crear manejador.

Funcionalidad

Este comando de instrucción de proceso permite interrumpir un bucle de lectura de los elementos de una base de datos externa generado mediante el comando de instrucción BD: recorrer lista.

Comentarios

Este comando de instrucción deberá ser usado en el subproceso que genera el comando de instrucción BD: recorrer lista.

Ejemplo

Interrumpimos la lectura de las filas del manejador de base de datos externas manejador_dbext.

BD: finalizar recorrer lista sin procesar más filas ( manejador_dbext )

BD: get dato de columna por nombre

Comando de instrucción del grupo Bases de datos externas que permite obtener el contenido de la columna con el nombre pasado como parámetro.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa cuyos elementos estamos leyendo. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: crear manejador.

Fórmula de nombre de la columna

Expresión de tipo fórmula con el nombre de la columna cuyo contenido se quiere obtener. Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Identificador de la variable local de retorno

Variable local donde será retornado el dato leído.

Funcionalidad

Este comando de instrucción de proceso permite obtener el contenido de la columna con el nombre pasado como parámetro.

Comentarios

Este comando de instrucción requiere conocer previamente el nombre de la columna cuyo contenido se desea leer. Existe un comando de instrucción que permite obtenerlo y es BD: get nombre de columna por número.

Este comando de instrucción estará supeditado a la ejecución previa de una consulta sobre la base de datos externa mediante el comando de instrucción de proceso BD: SQL.

Si queremos generar un bucle para leer uno a uno los registros de la lista obtenida por la consulta, usaremos el comando de instrucción BD: Recorrer lista.

Ejemplo

Obtenemos el contenido de la columna NOMBRE llevando su contenido a la variable local VARIABLE del manejador de la base de datos externas manejador_dbext.

BD: get dato de columna por nombre ( manejador_dbext, "NOMBRE", VARIABLE )

BD: get dato de columna por número

Comando de instrucción del grupo Bases de datos externas que permite obtener el contenido de la columna que se corresponda con el número pasado como parámetro.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa cuyos elementos estamos leyendo. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: crear manejador.

Fórmula de número de columna

Expresión de tipo fórmula con el número de la columna cuyo contenido se quiere obtener. Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Identificador de la variable local de retorno

Variable local donde será retornado el dato leído.

Funcionalidad

Este comando de instrucción de proceso permite obtener el contenido de la columna que se corresponda con el número pasado como parámetro.

Comentarios

El número de la primera columna puede ser 0 ó 1; dependerá de la base de datos externa a la que se está accediendo.

Este comando de instrucción requiere conocer previamente el nombre de la columna cuyo contenido se desea leer. Existe un comando de instrucción que permite obtenerlo y es BD: get nombre de columna por número.

Este comando de instrucción estará supeditado a la ejecución previa de una consulta sobre la base de datos externa mediante el comando de instrucción de proceso BD: SQL.

Si queremos generar un bucle para leer uno a uno los registros de la lista obtenida por la consulta, usaremos el comando de instrucción BD: recorrer lista.

Ejemplo

Obtenemos el contenido de la columna número tres llevando su contenido a la variable local PROVEEDOR del manejador de la base de datos externas manejador_dbext.

BD: get dato de columna por número ( manejador_dbext, 3 , PROVEEDOR )

BD: get nombre de columna por número

Comando de instrucción del grupo Bases de datos externas que permite obtener el nombre de la columna que se corresponda con el número pasado como parámetro.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa cuyos elementos estamos leyendo. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: crear manejador.

Fórmula de número de columna

Expresión de tipo fórmula con el número de la columna cuyo nombre se quiere obtener. Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Identificador de la variable local alfabética de retorno

Variable local alfabética donde será retornado el nombre de la columna.

Funcionalidad

Este comando de instrucción de proceso permite obtener el nombre de la columna que se corresponda con el número pasado como parámetro.

Comentarios

El dato leído por comando de instrucción podemos usarlo para resolver la columna en los parámetros del comando de instrucción BD: get dato de columna por nombre.

Ejemplo

Obtenemos el nombre de la columna número dos llevando su contenido a la variable local COLUMNA del manejador de la base de datos externas manejador_dbext.

 BD: get nombre de columna por número ( manejador_dbext, 2, COLUMNA )

BD: get número de columnas

Comando de instrucción del grupo Bases de datos externas que permite obtener el número de columnas que ha devuelto la ejecución de una consulta sobre una base de datos externa.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa sobre la cual se ha hecho la consulta. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: crear manejador.

Identificador de la variable local numérica de retorno

Variable local numérica donde será retornado el número de columnas obtenidas.

Funcionalidad

Este comando de instrucción de proceso permite obtener el número de columnas que ha devuelto la ejecución de una consulta previa sobre una base de datos externa mediante el uso del comando de instrucción de proceso BD: SQL.

Comentarios

Este comando de instrucción de proceso tendrá que ser usando dentro del subproceso que genera el comando BD: SQL.

Ejemplo

Obtenemos el número de columnas del manejador de bases de datos externas manejador_dbext tras la ejecución de una consulta guardando su valor en la variable local NCOLUMNAS.

BD: get número de columnas ( manejador dbext, NCOLUMNAS )

BD: recorrer lista

Comando de instrucción del grupo Bases de datos externas que permite recorrer las filas obtenidas tras la ejecución de una consulta a una base de datos externa.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa sobre la cual se ha hecho la consulta. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: crear manejador.

Funcionalidad

Este comando de instrucción de proceso permite recorrer las filas obtenidas tras la ejecución de una consulta a una base de datos externa mediante el comando de instrucción de proceso BD: SQL; es decir, se trata de un bucle que se repetirá tantas veces como líneas haya devuelto la consulta.

Comentarios

Este comando de instrucción de proceso tendrá que ser usando dentro del subproceso que genera el comando BD: SQL.

Este comando de instrucción genera un subproceso que será ejecutado por cada fila obtenida tras la consulta. Si queremos leer las columnas de cada fila, no tendremos más que usar en dicho subproceso el comando de instrucción de proceso BD: get dato de columna por número o BD: get dato de columna por nombre.

Ejemplo

Recorremos la lista del manejador de bases de datos externas creado previamente llevando el contenido de las cuatro columnas a variables locales.

 BD: recorrer lista ( manejador_dbext )
             BD: get dato de columna por número ( manejador_dbext, 1, REFERENCIA )
             BD: get dato de columna por nombre ( manejador_dbext, 2, ARTICULO )
             BD: get dato de columna por número ( manejador_dbext, 3, PROVEEDOR )
             BD: get dato de columna por número ( manejador_dbext, 4, PRECIO )

BD: SQL

Comando de instrucción del grupo Bases de datos externas que ejecuta un comando SQL y devuelve las filas afectadas por el mismo.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Manejador de base de datos externa

Manejador de la base de datos externa sobre la que queremos ejecutar el comando SQL. Dicho manejador deberá haber sido definido previamente con el comando de instrucción BD: Crear manejador.

Fórmula de comando SQL

Expresión de tipo fórmula con el comando SQL a ejecutar. Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Identificador de variable local numérica de retorno de número de filas afectadas

Variable local de tipo numérico donde retornará el número de filas afectadas por la ejecución del comando SQL

Fórmula de condición para activar el modo sólo avanzar para las filas obtenidas (opcional)

Si se desea hacer que cada fila pueda ser leída una vez y el cursor pase automáticamente a la siguiente fila (forward-only), en este parámetro estableceremos, mediante una fórmula, la condición que debe cumplirse.

Funcionalidad

Este comando de instrucción de proceso permite ejecutar un comando SQL sobre la base de datos referenciada en el primer parámetro y retorna el número de filas afectadas en una variable local de tipo numérico. Este comando de instrucción genera un subproceso. Si el comando ejecutado es una consulta, por ejemplo, en dicho subproceso se tendrá acceso a la lista obtenida tras la ejecución del comando SQL. El cómo se comporte el cursor después de ejecutar la sentencia dependerá de si se ha establecido una condición en el parámetro Fórmula de condición para activar el modo sólo avanzar para las filas obtenidas.

Comentarios

Si queremos generar un bucle para leer una a una las filas obtenidas por el comando, usaremos el comando de instrucción BD: recorrer lista y podremos leeremos el contenido de cada columna mediante los comandos de instrucción BD: get dato de columna por número o BD: get dato de columna por nombre.

En el subproceso que genera este comando de instrucción de proceso se tendrá acceso a la lista obtenida tras la ejecución del comando SQL y solamente podremos usarlo para recorrerla y obtener información, pero no para ejecutar otras sentencias SQL. Estas deben ejecutarse fuera de dicho subproceso.

Ejemplos

Ejecutamos la sentencia SQL indicada en la variable local SQL para guardar en la variable local NUM_FILAS_DEVUELTAS el número de filas que se obtienen usando el manejador manejador_dbext.

Set ( SQL, "Select * from pruebas.pruebas" )
BD: SQL ( manejador_dbext, SQL, NUM_FILAS_DEVUELTAS,  )

Establecemos conexión con la base de datos externa leyendo todos los registros dándolos de alta en la tabla RESULTADOS.

Rem ( Se crea el manejador de la base de datos externa )
BD: crear manejador ( dbext, ODBC (compatible Microsoft SQL Server), SQL_DATA_ORIGIN, , ,  )
Rem ( Se procede a efectuar la conexión )
Set ( DB_OK_CONNECT, 0 )
BD: conectar ( dbext, SQL_USR, "", DB_OK_CONNECT, DB_RETURN_CONNECT )
    Set ( DB_OK_CONNECT, 1 )
    Rem ( Se ejecuta la sentencia SQL  )
    BD: SQL ( dbext, SQL, DB_NUM_FILAS,  )
        Rem ( Se extrae el título de cada columna de la base de datos externa )
        BD: get nombre de columna por número ( dbext, 1, COL_NAME_1 )
        BD: get nombre de columna por número ( dbext, 2, COL_NAME_2 )
        BD: Get nombre de columna por número ( dbext, 3, COL_NAME_3 )
        BD: Get nombre de columna por número ( dbext, 4, COL_NAME_4 )
        Rem ( Se modifican las variables globales usadas en el título de cada columna de la rejilla de resultados )
        Modificar variable global ( COL_1_NAME@Tutor BBDD externas, COL_NAME_1,  )
        Modificar variable global ( COL_2_NAME@Tutor BBDD externas, COL_NAME_2,  )
        Modificar variable global ( COL_3_NAME@Tutor BBDD externas, COL_NAME_3,  )
        Modificar variable global ( COL_4_NAME@Tutor BBDD externas, COL_NAME_4,  )
        Rem ( Se recorre la lista obtenida y se extrae, por cada fila, el contenido de cada columna )
        Set ( DB_CONTADOR, 0 )
        BD: recorrer lista ( dbext )
            Set ( DB_CONTADOR, DB_CONTADOR + 1 )
            BD: get dato de columna por número ( dbext, 1, COL1 )
            BD: get dato de columna por nombre ( dbext, COL_NAME_2, COL2 )
            BD: get dato de columna por número ( dbext, 3, COL3 )
            BD: get dato de columna por número ( dbext, 4, COL4 )
            Rem ( Con los datos obtenidos se da de alta un registro en la tabla temporal )
            Crear nueva ficha en memoria ( fch, RESULTADOS@Tutor BBDD externas )
                Modificar campo ( COL_1, COL1 )
                Modificar campo ( COL_2, COL2 )
                Modificar campo ( COL_3, COL3 )
                Modificar campo ( COL_4, COL4 )
            Alta de ficha ( fch )
                Libre
If ( DB_OK_CONNECT = 0)
     Mensaje ( "Error de conexión",Información,, )

Notas de los drivers de acceso a bases de datos externas

Bases de datos soportadas

La tabla siguiente muestra los drivers incluidos en Qt. Debido a incompatibilidades de licencias con GPL, no todos los plugins son suministrados.

“QODBC” Open Database Connectivity (ODBC) 2.0 – Microsoft SQL Server y otros drivers ODBC compatibles “QODBC3” Open Database Connectivity (ODBC) 3.0 – Microsoft SQL Server y otros drivers ODBC compatibles “QDB2” IBM DB2 (versión 7.1 y superiores) “QIBASE” Borland InterBase y Firebird “QMYSQL” MySQL 5.X “QMYSQL3” MySQL 3.X “QOCI” Oracle Call Interface Driver (versiones 9 y superiores) “QPSQL” PostgreSQL (versiones 7.3 y superiores) “QPSQL7” PostgreSQL (versiones 6 y 7) “QSQLITE” SQLite versión 3 “QSQLITE2” SQLite versión 2

SQLite es el sistema de base de datos en proceso con la mejor cobertura en las pruebas pruebas realizadas y apoyo en todas las plataformas. Oracle, vía OCI, PostgreSQL y MySQL, ya sea a través de ODBC o un controlador nativo, están suficientemente probada en Windows y en Linux.

La integridad del soporte para otros sistemas depende de la disponibilidad y la calidad de las librerías de cliente.

Para construir un plugin de controlador necesitas la librería cliente adecuada para tu sistema de gestión de base de datos (DBMS). Aquí se proporciona el acceso al API expuesta por el DBMS. La mayoría de los programas también le permiten instalar librerías de desarrollo” y estas son las que necesitas. Estas librerías son responsables de la comunicación de bajo nivel con el DBMS.

QMYSQL para MySQL 4 y posteriores

Soporte de procedimiento almacenado de QMYSQL

MySQL 5 introduce soporte de procedimientos almacenados en el nivel de SQL, pero no de API para controlar parámetros de IN, OUT e INOUT. Por lo tanto , los parámetros se tienen que establecer y leer mediante comandos SQL.

Embedded MySQL Server

MySQL embedded server is un sustituto inmediato de la librería de cliente normal. Con embedded MySQL server y MySQL server no se requiere usar funcionalidad MySQL.

Para usar embedded MySQL server, simplemente enlaza el plugin a libmysqld en vez de a libmysqlclient. Esto puede hacerse reemplazando -lmysqlclient_r por -lmysqld en el comando in el comando qmake de la sección inferior.

Se recomienda revisar en la documentación de MySQL, capítulo chapter “libmysqld, the Embedded MySQL Server Library” para ampliar información sobre MySQL embedded server.

QOCI para Oracle Call Interface (OCI)

Información general sobre el plugin OCI

El plugin OCI d QT soporta Oracle 9i, 10g y superiores. Tras conectar al servidor Oracle, el plugin detectará automáticamente la versión de la base de datos y habilitará las características correspondientes.

Es posible conectar a una base de datos de Oracle sin el fichero tnsnames.ora file. Para ello se requiere que el SID de la base de datos sea pasado al driver como nombre de la base de datos y que se le da un nombre de host.

OCI autenticación de usuario

El plugin UCL de Qt soporta autenticación usando credenciales externas (OCI_CRED_EXT). Normalmente, esto significa que el servidor de base de datos usará la autentificación de usuario suministrada por el sistema operativo en lugar de su propio mecanismo de autenticación.

Dejar el usuario y la contraseña vacíos al establecer una conexión con QSqlDatabase para usar la autenticación con credenciales externas.

Soporte OCI BLOB/LOB

Los objetos binarios grandes (BLOBs) pueden ser leídos y escritos, pero debemos ser conscientes de que el proceso podría requerir mucha memoria. Usar únicamente una consulta sólo hacia adelante (forward only) para seleccionar campos LOB (ver QSqlQuery :: setForwardOnly ()) .

QODBC para Open Database Connectivity (ODBC)

Información general sobre el plugin ODBC

ODBC es una interfaz general que nos permite conectarnos con múltiples DBMSs usando una interfaz común. El driver QODBC driver permite conectarse a un gestor de controladores ODBC y acceder a los orígenes de datos disponibles. Hay que tener en cuenta que también se necesita instalar y configurar los drivers ODBC para el gestor de controladores ODBC instalado en el sistema. El plugin QODBC permite usar esos orígenes de datos en las aplicaciones.

Se recomienda usa drivers nativos antes que el driver ODBC, siempre y cuando estén disponibles. El soporte de ODBC puede usarse como una solución para bases de datos compatibles si no hay controladores nativos disponibles.

En Windows, un gestor de controladores ODBC debería estar instalado por defecto. Para sistemas Unix, se requiere instalar antes algunas implementaciones. Debemos tener en cuenta que cada cliente que use nuestra aplicación requiere tener un gestor de controladores ODBC instalado, de lo contrario, el plugin QODBC no funcionará.

Debemos tener en cuenta que al conectar a un origen de datos ODBC debemos especificar el nombre del origen de datos ODBC en lugar de el nombre real de la base de datos.

El plugin ODBC necesita un controlador compatible con la versión administrador de ODBC 2.0 o posterior para trabajar. Algunos drivers ODBC dicen ser compatibles con la versión 2.0, pero no ofrecen toda la funcionalidad que se necesita. Por lo tanto, el plugin comprueba si la fuente de datos se puede utilizar después de que se ha establecido una conexión y no continuará trabajando si falla la comprobación.

Por defecto, el plugin ordena al driver ODBC a comportarse como un driver ODBC 2.x. Sin embargo, para algunos gestores de drivers ODBC 3.x, combinaciones (por ejemplo, unixODBC/MaxDB ODBC), el ordenar al driver ODBC que se comporte como un driver 2.x puede provocar un comportamiento inesperado. Para evitar este problema, se debe ordenar al driver ODBC que se comporte como un driver 3.x indicando en las opciones de conexión “SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3” antes de establecer la conexión con la base de datos. Debemos tener en cuenta que esto afectará a múltiples aspectos del comportamiento del driver ODBX, por ejemplo los SQLSTATE. Antes de establecer esta opción de conexión, consultaremos la documentación de nuestro ODBC relativa a comportamientos distintos a los esperados.

Si experimentamos un acceso muy lento al origen de datos ODBC, nos aseguraremos de que el resto de llamadas ODBC esté inhabilitado en el gestor del origen de datos.

Algunos drivers no soportan cursores

Some drivers no son compatibles con los cursores desplazables. En este caso, ejecutar solamente las consultas en modo “formardOnly”.

Soporte de procedimientos almacenados

Con Microsoft SQL Server el conjunto de resultados devuelto por un procedimiento almacenado que utiliza la sentencia return o que devuelve varios conjuntos de resultados, será accesible sólo si usamos setForwardOnly ( ).

"{call STORED_PROC}"

Nota. El valor retornado por los procedimientos almacenados es descartado.

Soporte Unicode

El plugin QODBC usará el API Unicode si se define UNICODE. En sistemas operativos basados en Windows NT este es el valor por defecto. Debemos tener en cuenta que el driver ODBC y el DBMS deben soportar también Unicode.

Algunos gestores de drivers y drivers no soportan UNICODE. Para usar el plugin QODBC con dichos drivers debe ser compilado con la Q_ODBC_VERSION_2 definida.

Para el driver ODBC de Oracle 9 (Windows) se necesita activar “soporte SQL_WCHAR” en el gestor del driver ODBC, de lo contrario, Oracle convertirá todas las cadenas Unicode al formato local de 8 bits.

QPSQL para PostgreSQL (Versión 7.3 y superiores)

Información general sobre el driver

El driver soporta la versión 7.3 y superiores de PostgreSQL server. Recomendamos usar una librería cliente de la versión 7.3.15, 7.4.13, 8.0.8, 8.1.4 o más reciente ya que estas versiones contienen correcciones de seguridad y porque el driver QPSQL podría no funcionar con versiones más antiguas de la librería cliente en según qué plataformas.

Para más información sobre PostgreSQL visitar http://www.postgresql.org.

Soporte Unicode

El driver detecta automáticamente si la base de datos PostgreSQL a la que nos estamos conectando soporta o no Unicode. Unicode se usa de forma automática si el servidor lo soporta. Debemos tener en cuenta que el driver solamente soporta la codificación UTF-8. Si tu base de datos usa cualquier otra codificación, el servidor tendrá que ser compilado con soporte a conversión Unicode.

El soporte de Unicode fue introducido en la versión 7.1 de PostgreSQL y solamente funcionará si tanto en el servidor como en la librería cliente han sido compilados con soporte multibyte. Más información sobre cómo configurar un servidor PostgreSQL con multibyte habilitado se puede encontrar en la guía del administrador de PostgreSQL, capítulo 5.

Soporte BLOB

Los objetos largos binarios (BLOB) son soportados por el tipo de campo BYTEA en versiones >= 7.1 del servidor PostgreSQL.

QDB2 para IBM DB2 (Versión 7.1 and superiores)

Información general sobre QDB2

El plugin hace posible acceder a bases de datos IBM DB2. Ha sido probado con IBM DB2 v7.1 y 7.2. Se debe instalar la librería de cliente de desarrollo IBM DB2, que contiene la cabecera y los ficheros de librería necesarios para compilar el plugin QDB2.

El driver QSB2 soporta consultas preparadas, leer/escribir cadenas Unicode y leer y escribir BLOB.

Se recomienda usar una consulta “forward-only” cuando se llame a procedimientos almacenados de DB2.

QSQLITE2 para SQLite versión 2

El plugin SQLite 2 de Qt se ofrece para compatibilidad. Cuando sea posible usar la versión 3 del plugin en su lugar. Las instrucciones de construcción para la versión 3 se aplican también a la versión 2.

QSQLITE para SQLite (versión 3 y superiores)

Información general sobre QSQLITE

El plugin SQLite de Qt permite acceder a bases de datos SQLite. SQLite es una base de datos en proceso, lo que quiere decir que no necesariamente necesita tener un servidor de base de datos. SQLite opera en un fichero único, que se debe establecer como nombre de la base de datos cuando se establece la conexión. Si no existe el fichero, SQLite intentará crearlo. SQLite también soporta bases de datos temporales en memoria. Para ello, simplemente pasar respectivamente “:memory:” o una cadena vacía como nombre de la base de datos.

SQLite tiene algunas restricciones relativas a múltiples usuarios y múltiples transacciones. Si intentamos leer/escribir en un recurso desde transacciones distintas, la aplicación se quedará bloqueada hasta que una transacción finalice o se deshaga. El driver SQLite volverá a intentar escribir en un recurso bloqueado hasta que se exceda un timeout (ver QSQLITE_BUSY_TIMEOUT at QSqlDatabase::setConnectOptions()).

En SQLite cualquier columna, con la excepción de la columna de la clave primaria de tipo INTEGER, puede ser usada para almacenar cualquier tipo de valor. Por ejemplo, una columna declarada como INTEGER puede contener un integer en una fila y un texto en la siguiente. Esto se debe a que SQLite asocia el tipo de un valor con el valor en sí mismo, más que con la columna en la que se almacena. Una consecuencia de esto es que el tipo retornado por la función fieldtype() solamente indica el tipo de campo recomendado. El no asumir el tipo real implicará que se deba comprobar el tipo de dato individualmente.

El driver queda bloqueado para actualizaciones mientras se está ejecutando una select.

Podremos encontrar información sobre SQLite en http://www.sqlite.org.

Compatibilidad de formatos de archivo de QSQLITE

Los archivos de las versiones menores de SQLite en ocasiones no son compatibles con versiones posteriores. Por ejemplo, SQLite 3.3 puede leer ficheros de base de datos creados con SQLite 3.2, pero las bases de datos creadas con SQLite 3.3. no se pueden leer con SQLite 3.2. Recomendamos revisar la documentación de SQLite y logs de cambios para obtener información sobre compatibilidad de formatos de archivo entre versiones.

La versiones menores de Qt habitualmente siguen a las versiones menores de SQLite, mientras que los service packs de Qt siguen a los service packs de SQLite. Los service packs son compatibles en ambas direcciones.

Para forzar a SQLite a usar un formato de fichero específico, es necesario construir nuestro propio plugin de base de datos con nuestra propia librería SQLite. En algunas versiones de SQLite se puede forzar a que escriba en un formato de fichero específico estableciendo el valor SQLITE_DEFAULT_FILE_FORMAT al construir SQLite.

QIBASE para Borland InterBase

Información general sobre QIBASE

El plugin InterBase de Qt permite acceder a bases de datos de InterBase y Firebird. InterBase puede ser usada tanto como cliente como servidor sin un servidor, en cuyo caso operará con archivos locales. El archivo de la base de datos debe existir antes de establecerse la conexión. Firebird debe ser usado con configuración de servidor.

Debemos tener en cuenta que InterBase requiere que especifiquemos la senda completa del fichero de la base de datos, no importa que esté almacenado localmente o en otro servidor.

Se necesitan las cabeceras de desarrollo y las librerías de IntetBase/Firebird para construir estos plugins.

Soporte Unicode y codificación de texto

Por defecto, el driver se conecta a la base de datos usando UNICODE_FSS. Esto puede cambiarse estableciendo el parámetro ISC_DPB_LC_CTYPE con opciones de conexión antes de abrir la conexión.

"ISC_DPB_LC_CTYPE=Latin1"

Si el plugin no soporta la codificación de texto dada, el driver emitirá un mensaje de advertencia y se conectará a la base de datos usando UNICODE_FSS.

Debemos tener en cuenta que si el juego de codificación de texto al conectarse a la base de datos no coincide con el de la base de datos, podrán surgir problemas con la transliteración.

Procedimientos almacenados

InterBase / Firebird retornarán los valores como conjunto de resultados por lo que, al llamar a procedimiento almacenado , Los valores IN no son enlazados. Solamente se pueden recuperar los valores RETURN/OUT.

Opciones de conexión

ODBC

MySQL

PostgreSQL

SQL_ATTR_ACCESS_MODE SQL_ATTR_LOGIN_TIMEOUT SQL_ATTR_CONNECTION_TIMEOUT SQL_ATTR_CURRENT_CATALOG SQL_ATTR_METADATA_ID SQL_ATTR_PACKET_SIZE SQL_ATTR_TRACEFILE SQL_ATTR_TRACE SQL_ATTR_CONNECTION_POOLING SQL_ATTR_ODBC_VERSION

CLIENT_COMPRESS CLIENT_FOUND_ROWS CLIENT_IGNORE_SPACE CLIENT_SSL CLIENT_ODBC CLIENT_NO_SCHEMA CLIENT_INTERACTIVE UNIX_SOCKET MYSQL_OPT_RECONNECT MYSQL_OPT_CONNECT_TIMEOUT MYSQL_OPT_READ_TIMEOUT MYSQL_OPT_WRITE_TIMEOUTOCI OCI_ATTR_PREFETCH_ROWS OCI_ATTR_PREFETCH_MEMORY

connect_timeout options tty requiressl service

DB2

OCI

SQL_ATTR_ACCESS_MODE SQL_ATTR_LOGIN_TIMEOUT

OCI_ATTR_PREFETCH_ROWS OCI_ATTR_PREFETCH_MEMORY

SQLite

Interbase

QSQLITE_BUSY_TIMEOUT QSQLITE_OPEN_READONLY QSQLITE_OPEN_URI QSQLITE_ENABLE_SHARED_CACHE

ISC_DPB_LC_CTYPE ISC_DPB_SQL_ROLE_NAME

Consultar la documentación sobre la librería de cliente para más información sobre las distintas opciones.

Última actualización