El problema que tengo no es tanto la lectura del archivo, eso ya lo solucioné.
El tema es conseguir la manera de hacer algo como un "show tables" para mysql, pero para access y a través de php.
O sea, construir un script el cual me traiga los nombres de las tablas que existen en la bd contenida en el mdb y de esa manera irlas consultando cada una, para poder pasar la data a mysql.
Lo q conseguí navegando en internet fue esto:
$rs = $conn->Execute("SELECT
Table_Name = Name,
Row_Count = DCount(\"*\",[MSysObjects].[Name])
FROM
MSysObjects
WHERE
(Left([Name],1)<>\"~\")
AND (Left([Name],4) <> \"MSys\")
AND ([Type] In (1, 4, 6))
ORDER BY
Name");
que según decía en el sitio donde lo encontré, es el equivalente a "show tables" o tendría que devolverme los nombres de las tablas de la bd.
El error que me da es este:
Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> Microsoft OLE DB Provider for ODBC Drivers<br/><b>Description:</b> [Microsoft][Controlador ODBC Microsoft Access] No se puede leer ningún registro; no tiene permiso para READ en 'MSysObjects'.' in C:\xampp\htdocs\pruebas\odbc\importar.php:16 Stack trace: #0 C:\xampp\htdocs\pruebas\odbc\importar.php(16): com->Execute('SELECT???????? ...') #1 {main} thrown in C:\xampp\htdocs\pruebas\odbc\importar.php on line 16
Mi código en importar.php es este:
Código PHP:
$mdb = $_FILES['mdb'];
$conn = new COM("ADODB.Connection");
$dsn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("bd_prueba.mdb");
$conn->Open($dsn);
$rs = $conn->Execute("SELECT
Table_Name = Name,
Row_Count = DCount(\"*\",[MSysObjects].[Name])
FROM
MSysObjects
WHERE
(Left([Name],1)<>\"~\")
AND (Left([Name],4) <> \"MSys\")
AND ([Type] In (1, 4, 6))
ORDER BY
Name");
Alguien tiene idea de un "show tables" pero para access y en php o que significa y como solucionaría el error que me está dando?
Saludos!