:: El Monstruillo wARfeando ::

Clase acceso a bases de datos *.mdb (MS Access)

Hace poco me ví en la necesidad de acceder a unas tablas en unas bases de datos access (*.mdb) y acabé escribiendo esta entrada.

Es sencillo y funciona, como digo al final de la entrada, pero es engorroso a más no poder de modo que acabé escribiendo una pequeña clase para conectar con una base de datos access, hacer consultas (SELECTS, INSERTS, UPDATES … vamos cositas básicas).

Aquí hay un zip con la cabecera y el cuerpo de la clase.

Para comenzar a utilizarla, como ya dije en la entrada anterior hay que enlazar el programa con la biblioteca odbc32.lib. Además de eso es probalbe que debais cambiar algún #include <> para amoldarlo a donde pongais los archivos. Yo siempre uso una estructura de directorios del tipo de src\headers y src\fonts de modo que el #include en el cuerpo de la clase aparece #include “..\headers\accessdb.h”.

Una breve explicación de uso de la biblioteca.

Lo primero que se debe hacer es crear el objeto AccessDB para establecer la conexión y lanzar las consultas:

AccessDB conn;

Una vez tenemos el objeto conn creado ya podemos establecer la conexión (capturando errores):

if (conn.fileConnect(pathToMDBFile) < 0) {

char errstr[1024];

conn.getStrError(errstr);

// se hace lo que sea con este errstr

return -1; // por ejemplo

}

Ahora ya estamos conectados y podemos lanzar consultas SQL a diestro y siniestro

conn.sendQuery(”SELECT * FROM tablilla_molona”); // si devuelve < 0 se ha producido un error

En este caso es conveniente recoger los datos para hacer luego con ellos lo que quieras. sendQuery, cuando se usa con un SELECT genera una tabla de resultados de f filas por c columnas (una tabla FxC) y para obtener los datos de ella se hace del siguiente modo:

// vamos a rellenar una listview (por ejemplo) con todos los datos encontrados:

int filas = conn.getRows();

int cols = conn.getCols();

for (int f=0; f < filas; f++) {

for (int c=0; c < cols; c++) {

char valor[1024];

conn.getData(f, c, valor);

// aquí haríamos algo con valor

}

}

Una vez hecho todo solo queda desconectar la conexión:

conn.Disconnect();

Y con esto y un bizcocho… espero que os sea de utilidad a alguno. Y si lo ampliáis o mejoráis de algún modo no dejéis de notificármelo y pasarme el nuevo código que estaré encantado de colgarlo.

This entry (Permalink) was posted on Tuesday, August 7th, 2007 at 21:09 and is filed under WinAPI. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response , or trackback from your own site.

Leave a Reply

You must be logged in to post a comment.