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