Ho scritto del codice VBA in una cartella di lavoro di Excel per recuperare i dati da un database di Access nella stessa directory su un desktop. Funziona benissimo sulla mia macchina e su molti altri computer che eseguono Windows XP, ma quando abbiamo provato questo su una macchina Vista, abbiamo riscontrato il seguente errore:
Imansible trovare ISAM installabile
- Esportare immagini da file excel in jpg usando VBA
- Come trovare un valore in una colonna excel dal codice vba Cells.Find
- Rimuovi l'attività di Excel da Gestione attività dopo l'esecuzione da Access utilizzando VBA
- Funzione di Excel per creare query tipo SQL sui dati del foglio di lavoro?
- Come contare il testo di un diverso colore del carattere in Excel
Ho fatto un sacco di ricerche online ma non riesco a trovare una risposta concreta. La stringa di connessione sembra essere a posto e, come ho già detto, funziona su diverse macchine.
Qualcuno ha idea di cosa potrebbe causare questo? La mia stringa di connessione è la seguente:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\ptdb\Program Tracking Database.mdb;
Grazie
Posiziona virgolette singole attorno alle Extended Properties
:
OleDbConnection oconn = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
Provalo, funziona davvero.
Prova a mettere le virgolette sull’origine dati:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\ptdb\Program Tracking Database.mdb';
Il problema tende ad essere uno spazio bianco che ha significato per il parser.
Se avevi altri attributi (ad esempio, Proprietà estese), i loro valori potrebbero anche essere racchiusi tra virgolette singole:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\ptdb\Program Tracking Database.mdb'; Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';
Potresti ugualmente usare le virgolette doppie; tuttavia, probabilmente dovrai sfuggire a loro, e trovo più un Pain In The Algorithm che l’uso di singoli.
Hai controllato questo http://support.microsoft.com/kb/209805 ? In particolare, se si ha Msrd3x40.dll.
Potresti anche voler controllare di avere l’ultima versione di Jet: http://support.microsoft.com/kb/239114
Basta usare Jet OLEDB: nella stringa di connessione. ha risolto per me.
un esempio è qui sotto:
"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=E:\Database.mdb;Jet OLEDB:Database Password=b10w"
Ho appena incontrato un problema molto simile.
Come te, la mia stringa di connessione è apparsa corretta, e infatti, esattamente la stessa stringa di connessione funzionava in altri scenari.
Il problema si è rivelato una mancanza di risorse. 19 volte su 20, vedrei “Imansible trovare ISAM installabile”, ma una o due volte (senza alcuna modifica al codice), invece, restituirebbe “Memoria insufficiente”.
Il riavvio della macchina ha “risolto” il problema (per ora …?). Questo è accaduto usando la versione 4.0.9505.0 di Jet su Windows XP.
L’ho usato per aggiornare un file excel 12 xlsx
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();
Usa questa stringa di connessione
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strFileName + ";" + "Extended Properties=" + "\"" + "Excel 12.0;HDR=YES;" + "\"";
Questo problema è dovuto al fatto che la macchina non riesce a trovare l’ISAM corretto (metodo del driver sequenziale indicizzato) registrato necessario per Access.
Probabilmente è perché la macchina non ha installato MSACeesss? Vorrei essere sicuro di avere l’ultima versione di Jet, e se ancora non funziona, trova il file Msrd3x40.dll da una delle altre macchine, copialo da qualche parte sulla macchina Vista e chiama regsvr32 su di esso (in modalità Admin ) che dovrebbe risolverlo per te.
Usa la stringa di connessione qui sotto per leggere da un file XLSX:
string ConnectionString = “Provider = Microsoft.ACE.OLEDB.12.0; Origine dati =” + <> + “; Proprietà estese = Excel 8.0;”;