2009-02-04 44 views
29

He escrito un código VBA en un libro de Excel para recuperar datos de una base de datos de Access en el mismo directorio en un escritorio. Funciona bien en mi máquina y varias otras máquinas con Windows XP, pero cuando probamos esto en una máquina Vista, nos encontramos con el siguiente error:Error: "No se pudo encontrar el ISAM instalable"

Could not find installable ISAM

He hecho un montón de búsqueda en línea, pero no puede parece encontrar una respuesta concreta. La cadena de conexión parece estar bien, y, como mencioné, funciona en varias máquinas.

¿Alguien tiene alguna idea de lo que podría estar causando esto? Mi cadena de conexión es el siguiente:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\ptdb\Program Tracking Database.mdb; 

Gracias

Respuesta

16

trate de poner comillas simples alrededor de la fuente de datos:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\ptdb\Program Tracking Database.mdb'; 

El problema tiende a ser el espacio de color blanco que tiene sentido al analizador.

Si tuviera otros atributos (por ejemplo, las propiedades extendidas), sus valores también pueden tener que estar encerrado entre comillas simples:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\ptdb\Program Tracking Database.mdb'; Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'; 

Se podría igualmente bien utilizar comillas dobles; sin embargo, probablemente tendrá que escapar de ellos, y me parece más un Pain In The Algorithm que usando singles.

+1

Esto lo fijó para mí. – Charlino

+0

en lugar de comillas simples, usé \ "... \" para encapsular la ruta de la fuente de datos y eso funcionó para mí – Dave

+0

No me ayudó en absoluto – Ortund

-2

Este problema se debe a que la máquina no puede encontrar el (método controlador secuencial indexado) el ISAM correcta registrada que Access necesita.

¿Probablemente es porque la máquina no tiene MSACeesss instalado? Me aseguraría de tener la versión más reciente de Jet, y si aún no funciona, busque el archivo Msrd3x40.dll de una de las otras máquinas, cópielo en algún lugar de la máquina de Vista y llame a regsvr32 (en modo Admin)) que debería solucionarlo por ti.

+0

OLE DB (tenga en cuenta el espacio) tiene proveedores no 'controladores', y ninguno tiene el nombre de "Acceso MS". El proveedor de ACE se llama Microsoft.ACE.OLEDB. y los proveedores de Jet en desuso se llamaron Microsoft.Jet.OLEDB. . – onedaywhen

0

Acabo de encontrar un problema muy similar.

Al igual que usted, mi cadena de conexión parecía correcta, y de hecho, exactamente la misma cadena de conexión funcionaba en otros escenarios.

El problema resultó ser la falta de recursos. 19 veces de cada 20, vería el "No se pudo encontrar el ISAM instalable", pero una o dos veces (sin ningún cambio de código) arrojaría "Sin memoria".

Reiniciando la máquina "resolvió" el problema (¿por ahora ...?). Esto sucedió utilizando Jet versión 4.0.9505.0 en Windows XP.

-1

Utilice esta cadena de conexión

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
     "Data Source=" + strFileName + ";" + "Extended Properties=" + "\"" + "Excel 12.0;HDR=YES;" + "\""; 
+0

El OP no obtiene datos de Excel, sino de MS Access, por lo que una cadena de conexión de Excel no es una buena idea. Además, la etiqueta dice VBA, por lo que la sintaxis que muestra no es adecuada. – Fionnuala

50

Colocar comillas simples alrededor del Extended Properties:

OleDbConnection oconn = 
    new OleDbConnection(
     @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';"); 

probarlo, realmente funciona.

+0

Gracias por este – Sev

+2

Cool. También funciona con el proveedor 'Microsoft.ACE.OLEDB.12.0' y las propiedades extendidas' Excel 12.0 xml'. ¡Gracias! – juanreyesv

+0

¡Dios mío, eso funciona! – Nanu

-2

Utilice la cadena de conexión de abajo para leer desde un archivo XLSX:

string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + <> + ";Extended Properties=Excel 8.0;";

1

sólo tiene que utilizar de Jet en la cadena de conexión. lo resolvió para mí.

es un ejemplo a continuación:

"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=E:\Database.mdb;Jet OLEDB:Database Password=b10w" 
0

He utilizado este para actualizar un archivo xlsx Excel 12

 System.Data.OleDb.OleDbConnection MyConnection; 
     System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(); 
     MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='D:\\Programming\\Spreadsheet-Current.xlsx';Extended Properties='Excel 12.0;HDR=YES;';"); 
     MyConnection.Open(); 
     myCommand.Connection = MyConnection; 
     string sql = "Update [ArticlesV2$] set [ID]='Test' where [ActualPageId]=114";// 
     myCommand.CommandText = sql; 
     myCommand.ExecuteNonQuery(); 
     MyConnection.Close(); 
Cuestiones relacionadas