Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/08/2010, 09:52
loqtor
 
Fecha de Ingreso: julio-2010
Mensajes: 50
Antigüedad: 14 años, 5 meses
Puntos: 1
Leer .mdb con PHP

Buenas,

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"
); 
El error que me da no termino de entenderlo, dado que mi conocimiento es bastante limitado en lo que se refiere a access...

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!