Access connessione
Hai un problema con Excel?
Access connessione
di Claudio (utente non iscritto) data: 29/07/2015 10:15:32
Salve !!!
In un foglio di lavoro ho inserito un collegamento ad una tabella di Access che si aggiorna ad ogni apertura del file...La stringa di connessione utilizzata è "OLEDB" per intenderci quella che viene creata attraverso il comando "Importa dati Access" dal menù "Dati".
Nel file utilizzo anche questa connessione
db_matrix.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & ActiveWorkbook.Path & "file.accdb;Uid=Admin;Pwd=;"
che mi occorre per memorizzare dei dati sempre nel file di access.
Il problema nasce nel momento in cui aggiorno il primo intervallo se successivamente tendo di salvare i dati mi va in errore se invece non aggiorno i dati all'apertura l'errore non avviene...
Spero di essere stato chiaro... Grazie
di Vecchio Frac data: 29/07/2015 11:27:32
Sii più specifico nel dire che tipo di errore (numero e descrizione).
Magari sarebbe bene anche vedere un pezzo di codice, quello su cui si ferma il programma.
di claudio (utente non iscritto) data: 30/07/2015 22:42:14
La prima parte penso che sia chiara cioè (per fare questo non utilizzo nessun script vba):
In un foglio di lavoro ho inserito un collegamento ad una tabella di Access che si aggiorna ad ogni apertura del file...La stringa di connessione utilizzata è "OLEDB" per intenderci quella che viene creata attraverso il comando "Importa dati Access" dal menù "Dati".
La seconda parte ho inserito nell'evento Workbook_Open.:
db.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & ThisWorkbook.Path & "file.accdb;Uid=Admin;Pwd=;"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "select * from Aggiornamenti", db, 1, 3
rs(0).Value = Now
rs(1).Value = True
rs.Update
rs.Close
'rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
Nel momento che in cui arriva a "rs.update" l'errore che visualizza è questo:
Errore di run-time -2147467259
Errore di automazione.
Errore non specificato.
Se invece disabilito la funzione "Aggiorna dati all'apertura del file" per quanto riguarda la prima connessione quella "OLEDB" tutto funziona perfettamente.
Grazie
di Vecchio Frac data: 31/07/2015 10:59:48
A naso mi pare che stai cercando di updatare un set di record che non è aggiornabile.
Hai aperto con rs.Open una query che restituisce un set di righe ("SELECT * FROM") ma poi modifichi il valore dei primi due campi e tenti l'aggiornamento.
Non ho fatto un test quindi posso anche sbagliare, ma che l'errore si verifichi sull'update mi pare significativo.
di Claudio (utente non iscritto) data: 01/08/2015 12:19:15
La query restituisce un solo recordset in quanto la tabella contiene un campo data e un campo boolean nel quale viene inserito la data dell'aggiornamento... la cosa più significative è che se disabilito la funzione "Aggiorna dati all'apertura del file" per quanto riguarda la prima connessione quella "OLEDB" tutto funziona perfettamente.
di Claudio (utente non iscritto) data: 01/08/2015 12:33:52
Ho fatto un'ulteriore prova...
Se cambio la tabella in cui si connette all'apertura del file (La stringa di connessione utilizzata è "OLEDB" per intenderci quella che viene creata attraverso il comando "Importa dati Access" dal menù "Dati") va in errore lo stesso... pertanto sembra che se aggiorniamo i dati (quella con connessione OLEDB) non possiamo più lavorare più in scrittura...
Chissà perché !!!
di Vecchio Frac data: 01/08/2015 14:16:26
Ripeto, non sono in grado di fare test adeguati.
Ma la scrittura *deve* fallire se cerchi di scrivere su un recordset aperto con SELECT perchè SELECT serve a recuperare un set di righe, non ad aggiornarne il contenuto.
di Claudio (utente non iscritto) data: 01/08/2015 17:02:39
Per aggiornare il contenuto di una tabella che script sql devo utilizzare ???
grazie
di Vecchio Frac data: 01/08/2015 17:18:21
Normalmente si utilizza il comando Execute che è un metodo dell'oggetto Connection.
Qualcosa tipo:
cn.Execute "UPDATE table SET campo1 = valore1, campo2 = valore2"
ecc.
Come hai avviato la connessione ADODB?
Che variabile è "db" e come l'hai settata?
Puoi postare un file di esempio?
di Claudio (utente non iscritto) data: 01/08/2015 18:35:28
Public db As New ADODB.Connection
Public rs As New ADODB.Recordset
db.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & ThisWorkbook.Path & "file.accdb;Uid=Admin;Pwd=;"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "select * from Aggiornamenti", db, 1, 3
Intendi questo ???
di Vecchio Frac data: 01/08/2015 18:51:21
Sì ok allora db è la tua Connection.
Quindi puoi scrivere qualcosa come db.Execute ...
di Claudio (utente non iscritto) data: 02/08/2015 18:49:44
Non funziona lo stesso... L'errore che visualizza è:
Microsoft Driver ODBC Microsoft Access.. Per l'operazione è necessaria una query aggiornabile...
Questo è quello che ho scritto:
db.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & ThisWorkbook.Path & "file.accdb;Uid=Admin;Pwd=;"
db.Execute "Update Aggiornamenti set data_aggiornamento='" & Now & "', aggiornato=true"
db.Close
Set db = Nothing
Ugualmente se non si aggiorna la prima connessione quella "OLEDB" il tutto funziona perfettamente
Vuoi Approfondire?