Access connessione



  • 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