Visualizzazione Stampabile
-
Mysql e Access
Ciao a tutti
Ho una serie di tabelle Mysql di cui una principale e altre satellite legate da chiave esterna.
Periodicamente ho bisogno di modificare (sia inserire che aggiornare) questi dati con record provenienti da tabelle in diversi database Access. Poiché negli ultimi tempi non si riesce più a far funzionare gli odbc in Access (o non si riescono a collegare le tabelle o non si riescono a modificare una volta collegate le tabelle Mysql in Access), ho sviluppato una piccola routine in Vba che tramite iterazioni su diversi recordset riesce nell'intento.
Ogni record ha un identificativo ben preciso nei diversi database d'origine che viene riportato nella tabella principale Mysql; all'inserimento del dato in quest'ultima, viene creato un nuovo identificativo (non posso usare quello originale perché provenendo da database diversi, salta l'unicità) che fa anche da chiave per le tabelle satellite.
Il mio problema è il seguente: quando devo aggiornare i dati il recordset ottenuto dai db di origine posso individuare quale dato aggiornare solo nella tabella principale (tramite l'identificativo originale) ma non il dato nelle tabelle satellite dove manca l'aggancio.
Come faccio ad aggiungere una colonna al recordset in cui associare il nuovo identificativo della tabella mysql così da poter aggiornare le tabelle satellite?
Grazie in anticipo!
Stoney
-
Intendi dire di aggiornare le tabelle collegate con INNER JOIN? L'unica strada che conosco è tramite query separate all'interno di una transazione.
Siccome però MySQL con MyISAM non permette transazioni, è necessario che ogni tabella abbia un contatore, e ad ogni inserimento si tiene traccia dei nuovi record. Oppure, come ho fatto io, di avere uno storico, cioè un campo in ogni tabella, che indica lo stato attuale, assieme ad un altro campo che indica l'ultima data di aggiornamento.
In questo modo è possibile ricostruire il contenuto di tabelle parzialmente aggiornate in seguito a un errore da una qualsiasi parte, ed inoltre, si ha la storia completa.