ODBCConn/es

From Lazarus wiki
Jump to navigationJump to search

English (en) español (es) français (fr)

La unidad ODBCConn implementa una conexión SQLdb con fuentes de datos ODBC.


Descripción

ODBC

ODBC (Open Database Connectivity) o conectividad abierta de base de datos es una tecnología que permite conectar a una gran variedad de bases de datos utilizando una sola API, en concreto la API ODBC.

Existen implementaciones ODBC para distintas plataformas estando disponibles los drivers para la mayoría de los sistemas de gestión de bases de datos actuales. La documentación oficial sobre ODBC se puede encontrar en la siguiente dirección:

MSDN ODBC site.

TODBCConnection

FreePascal se distribuye con las cabeceras (headers) ODBC; encontrándose en las unidades odbcsql y odbcsqldyn.

TODBCConnection es un descendiente de TSQLConnection que aporta un agradable envoltorio OOP para ODBC utilizando el framework SQLdb.

En Lazarus se puede encontrar el componente TODBCConnection en la solapa SQLdb. También se puede utilizar el componente TODBCConnection añadiendo ODBCConn en la claúsula uses.

Se han implementado las siguientes características:

  • Ejecutar consultas (queries) y recabar cojuntos de resultados.
  • La mayor parte de tipos de campos, incluyendo blobs.
  • query parameters (tipos string (cadena) e integer (entero)).
  • Preparando consultas (queries).
  • UpdateIndexDefs (lo que permite utilizar ApplyUpdates); parche remitido a fpc-devel, May 2, 2007.

Otras implementaciones están pendientes y son:

  • Soporte de transacción adecuada; actualmente cada conexión corresponde a una transacción.
  • Algunos tipos de campo.
    • SQL_TYPE_UTC* (están mencionados en la documentación sobre ODBC , pero parece que no se están utilizando en la implementación).
    • SQL_INTERVAL_* (¿Que debería corresponder con TFieldType?).
    • SQL_GUID (TGUIDField no había sido implementado hasta recientemente).

¿ Porque utilizar ODBC ?

FreePascal se distribuye con componentes para conectar a varias bases de datos tales como MySQL, PostGreSQL, Firebird, Oracle, etc. Para aquellas bases de datos que no figuran en la lista, tales como MS-Access, ODBC es una buena opción. Actualmente, el componente TODBCConnection está diseñado para sortear (circumvent) la estricta licencia de MySQL para aplicaciones que no sean GPL o que no cumplan con MySQL AB's excepción FLOSS.

Installing ODBC and ODBC Drivers

Antes de poder conectar a una base de datos utilizando ODBC, es necesario instalar primero:

  • Un gestor de drivers ODBC (Driver Manager).
  • Un driver ODBC específico para la DBMS a la cual se va a conectar.

The ODBC Driver Manager

Windows

Windows contiene un gestor de drivers ODBC que podemos utilizar para realizar configuraciones con cierta facilidad y que se puede encontrar en las siguientes ubicaciones dependiendo del sistema operativo:

  • El elemento Orígenes de datos (ODBC) que se encuentra en Herramientas administrativas dentro del Panel de control (Win 2000, XP, Vista).
  • El elemento Orígenes de datos (32-bit) que se encuentra en el Panel de control (Win 9x, ME).
  • El elemento ODBC en el Control Panel (Win NT)


WinXPODBCDataSourceAdministratorDrivers.png

Unix / Linux

Dos gestores de drivers ODBC muy conocidos para plataformas de tipo UNIX son unixODBC y iODBC. TODBCConn es conocido por funcionar con unixODBC; su compatibilidad con iODBC está todavía pendiente de verificación.

Debian

Para Debian se puede instalar el paquete unixodbc mediante los siguientes mandatos:

aptitude install unixodbc
aptitude install unixodbc-bin # si necesitas algunas utilidades GUI (Interface gráfica de usuario)

La unidad odbcsqldyn , y por tanto odbcconn, buscarán un fichero llamado libodbc.so. No aceptará un fichero del estilo libodbc.so.1 o libodbc.so.1.0.0. El paquete unixodbc de debian no crea un enlace simbólico (symlink) con el nombre /usr/lib/libodbc.so; por lo que el usuario deberá:

  • Crear el enlace manualmente: ln -s libodbc.so.1 /usr/lib/libodbc.so, o bien
  • Instalar el paquete unixodbc-dev, el cual si creará el enlace.

Si se tiene instalado el paquete unixodbc-bin entonces se puede arrancar el programa ODBCConfig para configurar los drivers ODBC y los DSN.

ODBCDataSourceAdministratorAbout.PNG

Ubuntu

Para Ubuntu, seguir las instrucciones para Debian.

Nota: el paquete unixodbc-bin puede no estar disponible desde el repositorio por defecto de paquetes.

ODBC Drivers

(esta información falta por completar)

Conectando a una fuente de datos ODBC

Los parámetros para conectar a una fuente de datos ODBC se describen en una cadena de conexión. Se trata de una cadena del estilo NAME=VALUE;NAME=VALUE.

TODBCConnection aporta un envoltorio sobre esta cadena de conexión. Algunas de sus propiedades se mapean a pares de nombre/valor en la cadena de conexión, pudiéndose especificar parametros personalizados en la propiedad Params (la cual es TStrings).

Cadena de conexión ODBC

Antes de pasar a los detalles de este envoltorio, se deben tener unos conocimientos básicos acerca de como se identifica una fuente de datos ODBC. Primero de todo, un gestor de drivers ODBC ofrece dos caminos para realizar la configuración de un conjunto de parámetros:

  • DSN (DataSource Name): una fuente de datos que puede escogerse o bien para el sistema o para un usuario, identificado por un único nombre. Los DSN se pueden configurar utilizando el administrador de fuente de datos ODBC o bien editando manualmente el fichero (o registro) odbc.ini.
  • Fichero DSN: un fichero que contiene parámetros de conexión. Un administrador de fuente de datos ODBC permite habitualmente crear un fichero DSN desde el entorno gráfico de usuario (GUI).

Los parámetros en un DSN o fichero DSN se pueden combinar siempre con parámetros adicionales en la cadena de conexión, por ejemplo para especificar una contraseña.

La especificación ODBC define unos cuantos parámetros que pueden utilizarse en la cadena de conexión:

  • Dos parámetros especiales, DSN y FILEDSN, permiten seleccionar un conjunto de parámetros predefinidos, tal como se describe arriba.
  • El DRIVER especifica que driver ODBC driver utilizar. Obviamente este es un parámetro muy importante.
  • Los parámetros UID y PWD se utilizan para aportar el nombre de usuario (username) y la contraseña (password).

Todos los demás parámetros son dependientes del driver seleccionado.

Se debe revisar la documentación del driver específico para aprender más sobre los parámetros disponibles y sus nombres.

Propiedades de TODBCConnection

La siguiente tabla describe el mapeo de las propiedades de TODBCConnection a las cadenas de parámetros de conexión ODBC:

Propiedad Tipo Cadenas de parámetros de conexión
Driver string DRIVER
DatabaseName string DSN, no para cosas como DATABASENAME, el cual no es parte del ODBC standar
FileDSN string FILEDSN
Password string PWD
UserName string UID
HostName string none; no existe parámetro correspondiente en el estandar ODBC
Params TStrings Utilizarlo para especificar parámetros personalizados. Cada elemento debe tener el formato NAME=VALUE.

Hay que fijarse en que TODBCConnection tendrá cuidado con los valores del parámetro escaping en la cedena de conexión (cuando se requiere).

La propiedad booleana LoginPrompt no está implementada todavía. Esto puede requerir encontrar el manejador (handle) correcto de ventana, por lo que un driver puede mostrar un diálogo en el GUI para especificar parámetros.

Tener en cuenta que esto no se controla mediante la cadena de conexión pero si por el último parámetro de la función de la API ODBC SQLDriverConnect.

Ejemplos

En esta sección se muestran algunos ejemplos de conexión con ciertas DBMS utilizando su driver específico ODBC. La sintaxis utilizada en los ejemplo es como la de los ficheros *.lfm. Esto deberia permitir interpretarlos de una forma sencilla.

Conectando con MySQL

Para una referencia de los parámetros soportados por el driver MyODBC, ver:

[1].

El nombre del driver difiere un poco dependiendo de la plataforma y versión de MyODBC; algunos ejemplos de esto son:

Driver = 'MySQL' (Unix) 
Driver = 'MySQL ODBC 3.51 Driver'  (Windows)
Driver = 'MySQL Connector/ODBC v5' (Windows)

Otros parámetros:

UserName = 'myUsername'
Password = 'myPassword'
Params.Strings = (
  'SERVER=example.com',
  'PORT=3306',
  'DATABASE=myDatabase'
)

Conectando a MS Access

En Windows, puedes utilizar:

Driver = 'Microsoft Access Driver (*.mdb)'
Params.Strings = (
  'DBQ=C:\trayecto\a\mi\basededatos.mdb'
)

Nota: El driver ODBC de MS-ACCESS parece no soportar la función API SQLPrimaryKeys API , por lo que UpdateIndexDefs dará fallo. Actualmente debes establecert SQLQuery.ReadOnly:=true; para evitar que se genere una excepción hasta que se añada código que testee por la disponibilidad de la función en el driver.

Depurando ODBC

Existen varias facilidades en ODBC que ayudan en el depurado de una aplicación ODBC.

Mensajes de error

Cada llamada a la API ODBC retorna un ćodigo de éxito; si se produce un error esto permite recabar más información realizando llamadas a SQLGetDiagRec. (En aras a la exhaustividad los campos están también disponibles cuando una llamada a la API retorna SQL_SUCCES_WITH_INFO.)

TODBCConnection chequea el código retornado por cada llamada ODBC y construye una EODBCException. El mensaje de esta excepción consta de:

  • Un mensaje identificando que esta haciendo TODBCConnection cuando se produce el error.
  • El código retornado por la llamada a la API ODBC (e.g. SQL_ERROR).
  • Un número de campos de diagnóstico (obtenidos utilizando SQLGetDiagRec); cada campo consta de tres campos:
    • Un código de error de 5 caracteres identificando el error.
    • Un 'código nativo de error'.
    • Un mensaje descriptivo del error.

Nota: si se obtiene un error del tipo 'Function sequence error' en la sección de finalización de la unidad ODBCConn, entonces probablemente consista en que no se han limpiado apropiadamente todas las consultas (queries) y conexiones (connections).

Seguimiento o rastreo

La mayoría de los gestores de ODBC tienen una opción de seguimiento en la cual se genera un log de todas las llamadas a la API ODBC. Esto puede ser muy útil para el depurado de una aplicación ODBC. El interface gráfico de usuario (GUI) del administrador de bases de datos ODBC tanto en entornos Windows como UNIX tienen una solapa donde se puede configurar la opción de seguimiento. Por supuesto el log que genera es sobre todo útil para diseñadores que están familiarizados con la API ODBC, pero puede ayudar a identificar un problema puntual cuando es necesario también por parte de los usuarios. Además dicho log biene muy bien para enviarse como fichero anexo, como por ejemplo para dar más información al desarrollador de la aplicación cuando un usuario obtiene un error que no puede solucionar, pasando a formar parte de su listado de seguimiento de errores o bien para solicitar ayuda a terceros que de esta forma cuentan con más información para dar una posible solución más pormenorizada.