Configurar ODBC Linux

Franco Catrin L. fcatrin en tuxpan.com
Mar Sep 1 17:18:59 CLT 2009


El mar, 25-08-2009 a las 11:15 -0400, Alvaro Herrera escribió:
> Juan Manuel Doren escribió:
> > >
> > > tal como te indicaron en otros correos necesitas tener acceso a los archivos
> > > .mdb (de Access) para poder leer y manipular los datos que estan ahi.
> > > entonces, para que una aplicacion ejecutada en Linux tenga acceso a esos
> > > datos necesitas
> > 
> > Noooo
> > 
> >   la base de datos ( un programa llamado access que corre en el
> > windows ) accesa esos archivos y en teoria nadie mas deberia leer los
> > .mdb
> 
> Estoy de acuerdo ... esta idea es mala.  Si dos usuarios llegan a
> escribir en los datos concurrentemente es posible que se corrompan.
> (En otras palabras, si vas a intentar esta estrategia, asegúrate de que
> tienes respaldos muy frecuentes).

Aqui viene la parte curiosa/interesante/whatever.

Segun recuerdo, efectivamente el acceso a la base de datos es sólo a
nivel de archivos.

Es probable que ya no sea de esta forma, pero así lo era en 1999 ;-)

Una base de datos Access es un archivo .mdb que es abierto por una
aplicación que entienda la estructura de ese archivo.  Microsoft provee
un set de API's para manejar ese archivo y sobre ésta había otro
conjunto de API's para usarlo fácilmente en las aplicaciones.  Sobre
esta API estaban las API's que abstraían la base de datos subyacente
(como ADO, RDO y otros nombres que no recuerdo).

ODBC es sólamente una API para acceder a bases de datos, pero no dice
nada acerca de cómo está implementada esa base de datos, tampoco queda
escuchando por puertos ni nada de eso.  En otras palabras : ODBC no es
un servidor al que te conectas, es sólo una API que las aplicaciones
pueden usar para abstraerse de la base de datos.  Además de las API's
para usar bases de datos, tiene API's para manejar la configuración de
las conexiones y una aplicación para dejar esto visible al usuario.

En un "entorno de red", varias aplicaciones pueden acceder a una misma
base de datos access, esto es, al archivo .MDB.  Para que evitar la
corrupción, el archivo se bloqueaba por segmentos, y eso se manejaba con
un archivo adicional que coordinaba los bloqueos al archivo .mdb.

Por lo tanto tenemos :

* Un archivo .mdb compartido como recurso de red mediante Samba/CIFS
* Una API que entiende .mdb
* API's de abstracciones superiores
* API ODBC

No hay servidor como un proceso.  El servidor es simplemente la máquina
que comparte el directorio en donde está el MDB.

El unixODBC es simplemente una implementación de ODBC para Unix, que
también tiene un configurador y se puede acceder desde clientes ODBC.

Usar Access desde Linux por lo tanto no requiere unixODBC, ya que son
cosas independientes.  Lo que se necesita es una implementacion de la
API que manipula el archivo mdb (mdbtools?)

Si mdbtools es compatible con unixODBC y ahi podrias usar el soporte de
ODBC de PHP para ocultar los detalles de mdbtools.

Otra solución, es hacer una capa de servicios en el Windows y desde PHP
invocar a esa capa de servicios, en forma independiente de la base de
datos.

Servidor Linux/PHP -> Servicios en Windows -> ODBC+Access

Saludos
-- 
Franco Catrin Leiva - TUXPAN Software S.A.
http://www.tuxpan.com/fcatrin



Más información sobre la lista de distribución Linux