jueves, 7 de junio de 2007

Acceder a una BD MS Access con Delphi

Este artículo muestra paso a paso cómo conectar con bases de datos Microsoft Access desde Delphi. Para ello utilizaremos ODBC (Open Database Connectivity) .
  • En primer lugar necesitaremos disponer del Driver ODBC para acceso a Microsoft Access.
  • Crearemos la Base de Datos Microsoft Access (mdb).
  • Añadiremos el Driver ODBC para acceso a la BD creada, desde “Inicio” - “Configuración” “Panel de control” - “Herramientas administrativas” - “Orígenes de datos (ODBC)”, en la pestaña “DNS de sistema” pulsaremos en “Agregar”, seleccionaremos “Microsoft Access Driver (*.mdb), pulsaremos en “Finalizar” y rellenaremos los siguientes datos:

Nombre del origen de datos: será el nombre que utlizaremos en Delphi para enlazar el ODBC creado con el Database, en nuestro caso BDAccessInventario.

Descripción: comentario informativo.

A continuación pulsaremos en el botón “Seleccionar” para especificar la base de datos Access a la que nos conectaremos.

  1. Abrimos Delphi y pulsamos en “File” - “New” - “Application”. Añadiremos un módulo de datos (data module) para colocar los componentes necesarios para el acceso a Access, para ello pulsaremos en “File” - “New” - “Data Module”. A continuación añadiremos al módulo de datos los siguientes componentes para acceso a Bases de Datos:

    • En la paleta de componentes, en la pestaña “BDE”, seleccionaremos “Database” y lo añadiremos al módulo de datos. Este componente será el encargado de enlazar nuestra aplicación con el Driver ODBC creado anteriormente. Para ello haremos doble clic sobre el “Database”:

En “Alias name” seleccionaremos el ODBC creado anteriormente (BDprueba) y pulsaremos el botón “Defaults” para que nos añada automáticamente los parámetros necesarios para la conexión:

DATABASE NAME=
USER NAME=
ODBC DSN=BDAccessInventario
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
SQLQRYMODE=
LANGDRIVER=
SQLPASSTHRU MODE=SHARED AUTOCOMMIT
SCHEMA CACHE TIME=-1
MAX ROWS=-1
BATCH COUNT=200
ENABLE SCHEMA CACHE=FALSE
SCHEMA CACHE DIR=
ENABLE BCD=FALSE
ROWSET SIZE=20
BLOBS TO CACHE=64
PASSWORD=

Por supuesto estos parámetros pueden ser modificados por código.

Desmarcaremos la opción “Login prompt” = “False” (para que no nos aparezca la ventana de Usuario y Contraseña cada vez que nos conectemos, deberemos activar esta opción si hemos añadido usuarios a la BD Access). Luego pulsamos “OK”.

Ahora mostraremos las propiedades del Database, deberemos introducir un nombre a la Base de Datos (que será el que se utilice en Delphi), para ello lo escribiremos en la propiedad “DatabaseName”, en nuestro caso “bd.mdb”:

Para probar la conexión cambiaremos la propiedad “Connected” = “True”, si nos deja cambiarla significará que la conexión ha sido satisfactoria en caso contrario mostrará un mensaje con el error.

- En la paleta de componentes, en la pestaña “BDE”, seleccionaremos “Table” y lo añadiremos al módulo de datos. Este componente será el encargado de enlazar con el Database y será el que nos proporcione los datos que necesitemos de la tabla que especifiquemos. Las propiedades que cambiaremos para que funcione serán:

  • “DatabaseName”: nombre que hemos dado a la propiedad “DatabaseName” del Database creado anteriormente.
  • “TableName”: si no ha habido errores y la conexión se ha establecido correctamente con la BD Access, podremos pulsar en el desplegable de “TableName” y seleccionar la tabla de la BD Access a la que queramos acceder.
  • “Active”: si ponemos a “True” esta propiedad abriremos la tabla seleccionada en “TableName”.

Por último añadiremos un “DataSource”, ubicado en la pestaña “Data Access”. Este componente es sólo necesario si vamos a utlizar componentes visuales para mostrar o modificar los datos. Con lo cual se utiliza para enlazar el Table con los componentes visuales. La única propidad imprescidible de éste es:

  • “DataSet”: pulsaremos en en desplegable y seleccionaremos el Table añadido anteriormente, en nuestro caso, puesto que no hemos modificado la propiedad “Name”, se llama “Table1″.
Tras añadir estos tres componentes no visuales en el Módulo de Datos, ahora añadiremos en el formulario un par de componentes visuales para poder mostrar y manipular los datos de la Base de Datos Access. Para ello mostramos el formulario, pulsando “Mayúsculas + F12″ o el menú “View” - “Forms” y seleccionamos el formulario que se crea automáticamente al crear el proyecto:
Antes de añadir los componentes visuales, puesto que estos necesitarán estar enlazados con el componente “DataSource” del módulo de datos, deberos colocar el módulo de datos en la claúsula USES del formulario, para ello es suficiente con pulsar en “File” - “Use Unit” y seleccionar el módulo de datos (”Unit2″ si lo hemos guardado con este nombre):
Desde la paleta de componentes, pestaña “Data Controls” seleccionaremos “DBGrid”, lo añadiremos al formulario y modificaremos la propiedad “DataSource”. En el desplegable de la misma nos aparecerá “DataModule2.DataSource1″ (en nuestro caso). Trase seleccionare el “DataSource” ya tendremos enlazado el componente visual con su origen de datos (el DataSource, a su vez enlazado con el Table que a su vez está enlazado con el Database que a su vez está “enlazado” con el ODBC creado al principio).

Añadiremos un componente más que muestra automáticamente los botones de añadir, modificar, eliminar, refrescar, editar, validad, … registros. Este componente visual está en la pestaña “Data Controls” y se llama “DBNavigator” que también irá enlazado por la propiedad “DataSource” al “DataSource1″ del módulo de datos (DataModule2).

Una vez añadidos todos los componentes y comprobado que las propiedades “Connected” (del “Database”) y “Active” (del Table”) están a “True” compilaremos la aplicación pulsando en F9 o en el menú “Run” - “Run”. Si no ha habido errores nos aparecerá una ventana como la siguiente:

y utilizando el DBGrid prodemos añadir, modificar, eliminar y visualizar los registros de la tabla.

Por supuesto, debido a que no hemos añadido los campos (fields) al DBGrid no tenemos un control sobre las propiedades de los mismos para, por ejemplo, especificar el ancho de la columna o el título de la misma. Para realizar esto es suficiente con hacer doble clic sobre el DBGrid (en tiempo de diseño), pulsaremos el botón derecho del ratón sobre la ventana que aparece y seleccionaremos “Add All Fields”:

de esta forma se nos añadirán automáticamente todos los campos de la tabla enlazada con el DBGrid. Podemos ver las propiedades de cualquier campo:

Existe una forma más eficiente de tener un control exaustivo sobre las propiedades de los campos que queramos mostrar, se realiza desde el componente no visual “Table” (ubicado en el módulo de datos), haciendo doble clic sobre el mismo y pulsando en el botón derecho, a continuación en el menú que aparece seleccionaremos “Add all fields”:

De esta forma tendremos los campos de la tabla y todas sus propiedades en el Table para que cuando lo enlacemos con un DataSource a un componente visual (como un DBGrid) éste muestre los campos tal y como los hayamos configurado en el Table:

Desde aquí podremos modifcar propiedades como “DisplayLabel” (texto que describe al campo y que será el que el usuario vea), “DisplayWidth” (tamaño horizontal del campo, en un DBGrid será el ancho de la colunma), …

Existen otras formas de acceder a una Base de Datos Access, esta forma no necesitamos escribir codigo ni utilizar componentes adicionales. La desventaja de utilizar ODBC, es que los accesos serán más lentos que si accediésemos de forma nativa (directamente de Delphi a Microsoft Access sin pasar por ODBC ni por el BDE).

No hay comentarios: