Newsgroup: it.comp.appl.access
Titolo: migrazione tabelle correlate da access a mysql

ho una tabella "fatture" (id, numFat, data, cliente, pagamento)
 
in relazione uno a molti alla tabelle "fatturerighe"
(id, idfattura, descrizione, um, qta, prezzouni, prezzotot)
 
id (fatture) uno a molto con (idfattura) di fatturevoci
 
come fareste a importare tutto in mysql?
 
ho pensato:
credo delle copie identiche delle tabelle anche in mysql
con il campo id di entrambe le tabelle di tipo int
esporto due csv da access e li importo in mysql 
successivamente metto i due campi ID a primarykey autoincrement
 
metodi migliori?
 
 
 
 


Non credo nelle scorciatoie
Dovessi farlo io preparerei una procedura ad hoc per la lettura da una 
parte (archivi Access) e la scrittura dall'altra (MySql o altro)
Dopo la connessione ad entrambi gli archivi si tratta sostanzialmente di 
ciclare dal primo all'ultimo record del db sorgente
Per ogni record, si dovra' ciclare dal primo all'ultimo campo del db 
sorgente, e copiarlo sul campo corrispondente del db destinazione
Avrei il pieno controllo soprattutto della scrittura su MySql perche' e' 
probabile che qualche formato di dato non sia conforme a quanto letto su 
Access e si pianti la conversione
Volendo si potrebbe usare lo stesso metodo pure per creare la tabella 
destinazione sul db destinazione, evitando la fatica di dover creare la 
struttura db destinazione


mi sembra una buona idea, quindi creo le copie delle tabelle già con i campi ID autoincrement ed eventualmente aggiorno IDFattura di fatturevoci con l'id nuovo di mysql
il tutto da client access con tabelle collegate al backend access e a mysql
 


Ocio che il campo autoincrement e' una particolarita' di Access, non 
tutti i db server ce l'hanno o hanno qualcosa di simile
Visto che ci stai mettendo mano, ti consiglio di studiare un meccanismo 
che sia sfruttabile poi paro paro su tutti gli altri db server
Un qualcosa basato su trigger e stored procedure che tutti usano
Poi, la coppia trigger+stored sara' diversa da db server a db server 
ognuno usa le proprie peculiari istruzioni, ma il meccanismo col quale 
lavori lato Access restera' sempre uguale


il campo autoincrementale esiste da sempre in mysql non andrei a creare 
complicazioni con trigger e sp per un banale IDFattura
 
 
CREATE TABLE `companies` (
   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
   `idCliente` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
bla bla bla
 
http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/sql/sql_autoincrement.asp.html
 
 
BFS

 come fareste a importare tutto in mysql? 
 
La prima volta usa il tool specifico della migrazione di MySQL , ti assiste nell'importazione sia della struttura del database sia dei dati.
Ad un certo punto della procedura di migrazione ti chiede se vuoi definire una chiave che non sia il numero fattura e numerofatt+numriga, rispondi affermativamente e impostala come automatica incrementale.
Attenzione al tipo del campo autoincrement di MySQL, deve essere del tipo numerico adeguato ad enumerare il numero di testate e righe fattura.
Essendo incrementale, se lo vuoi azzerare dopo un po' di tempo, devi lanciare anche da Access un comando di ALTER TABLE aggiungendo un nuovo campo chiave autoincrementale e quindi distruggere il precedente.
Infine via connettore ODBC ufficiale MySQL colleghi le tabelle ad Access e le gestisci come tu fossi in Access.
Ho usato questo tool decine di volte e funziona molto bene, è l'analogo del Microsoft SQL Server Migration Assistant for Access.
Forse ora è integrato in Workbench ma trovi anche le vecchie versioni che sono piu semplici (cerca Migration Toolkit se ricordo bene).
 


proverò i vostri consigli grazie,.

Il giorno venerdì 27 maggio 2022 alle 15:54:20 UTC+2 caezan ha scritto:

qual'è il tool specifico?


il tool è mySQL migration toolkit se dovesse servire a qualcuno
l'ho provato e facendo dei passaggi opportuni sul db access prima di darlo in pasto al tool
l'importazione viene eseguita senza problemi
 
unica pecca che ho notato è che 
i campi ID li importa come int quindi vanno impostati in phpmyadmin come autoincrement
le relazioni fra tabelle padre figlio in relazione tra di loro vanno ricreate in mysql ma è abbastanza semplice farlo.