Italian Trasferimento righe di tabella db

Luigi S

Active Member
Licensed User
Ciao a tutti, ogni tanto mi faccio vivo, e vi pongo il mio quesito.
Devo trasferire un record da una tabella di un db ad una identica tabella di un altro db, in cui i record sono diversi.
Ho imboccato la strada del csv per il trasferimento, ma mi sto impantanado nel problema che l'ID del record traferito deve essere adattato alla tabella che lo riceve.
Voi come fareste?
 

Star-Dust

Expert
Licensed User
Longtime User
Aggiungi un altro campo nella seconda tabella. ID_Originale dove inserire i il corrispondente id della prima tabella
 
Last edited:

Luigi S

Active Member
Licensed User
Grazie della risposta Star-dust, ma stavo pensando a qualche altra cosa.

Invece di esportare scrivendo un csv, potrei usare le proprietà di sqllite, per esempio questa
Dump data of one or more tables into a file

ed eseguire il dump senza l'ID in modo che quando lo importo l'auto increment del db lo generi.
il problema è che sono troppo niubbo e non sono certo se quello che dico è fattibile e se riuscirò a scrivere il codice...
 

giannimaione

Well-Known Member
Licensed User
Longtime User
Devo trasferire un record da una tabella di un db ad una identica tabella di un altro db, in cui i record sono diversi.
sono due DB diversi ???
db1.tabella1 = db2.tabella2 (stessi campi ???)
vuoi trasferire 1 (un) solo record ?
quindi accodare il contenuto della db1.tabella1 nella db2.tabella ?

crea le due istanze, una per db1 a l'altra per db2
esempio
B4X:
dim db1 as sql
dim db2 as sql
'poi a seconda del motore del db, inizializza le due istanze
'db1.initialize (mysql, mariadb, sqlite, ecc.) con riferimento al database1
'stessa cosa con db2, con riferimento database2
'
'e in seguito, a seconda di cosa trasferire devi creare la query
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
1701779098498.png
 

LucaMs

Expert
Licensed User
Longtime User
sono due DB diversi ???
db1.tabella1 = db2.tabella2 (stessi campi ???)
vuoi trasferire 1 (un) solo record ?
quindi accodare il contenuto della db1.tabella1 nella db2.tabella ?

crea le due istanze, una per db1 a l'altra per db2
esempio
B4X:
dim db1 as sql
dim db2 as sql
'poi a seconda del motore del db, inizializza le due istanze
'db1.initialize (mysql, mariadb, sqlite, ecc.) con riferimento al database1
'stessa cosa con db2, con riferimento database2
'
'e in seguito, a seconda di cosa trasferire devi creare la query
1701779280615.png
 

LucaMs

Expert
Licensed User
Longtime User
Si potrebbero "importare" i record della tabella "sorgente" senza il campo ID e farne generare di nuovi nella tabella di "destinazione", ma ovviamente solo se questi non siano importanti, non siano in relazione con altre tabelle.
Inoltre, se un domani dovessi ripetere questa operazione, altri grossi problemi.
 

LucaMs

Expert
Licensed User
Longtime User
Nel primo post @Luigi S , non illustra lo scenario.
A me sembra di si, perlomeno ciò che vuole ottenere. L'unica cosa che manca è se sia possibile che la tabella ricevente possa avere o no lo stesso contenuto, ID escluso (o no?).

A quanto ho capito sono tabelle con schema identico, entrambe con ID autoincrementato e ovviamente se importasse i record completi di ID, questi potrebbero essere in conflitto con quelli della tabella ricevente, ovvero essere uguali nelle due tabelle. Quando capitasse, non potresti certo "dirgli": "Non importare il record", perderesti dati.
 

Luigi S

Active Member
Licensed User
cerco di fare un po di chiarezza:
  • i due db, e le relative tabelle non sono sullo stesso device, ma i dati (un record della tabella principale ed eventualmente altri record collegati di altre tabelle) esportati vanno traferiti in modi diversi e importati sull'altro device
  • i db a livello di struttura sono identici, ma ovviamente i dati no e probabilmente non lo saranno mai, ma anche se fosse, avendo ogni record un proprio ID non credo ci siano problemi, anzi devono poter coesistere due "cose" identiche come succede già.
  • ho già fatto tutto, usando un file csv che scrivo su di un device e poi rileggo sull'altro, ma dopo averlo fatto, pensandoci ho capito che non poteva funzionare, perche se i db donante ha un ID piu grande del ricevente tutto ok, altrimenti un bel CRACK!
  • ho pensato quindi di leggere l'id max del db ricevente, e andare a modificare l'ID nel csv prima di importarlo, ma mi sto impantanando... e quindi cercando una soluzione sto studiando quella del dump su file senza scrivere il csv. Altro impantanamento.
 

LucaMs

Expert
Licensed User
Longtime User
ho pensato quindi di leggere l'id max del db ricevente, e andare a modificare l'ID nel csv prima di importarlo, ma mi sto impantanando
Credo sia la strada giusta. Trovato l'ID max della tabella ricevente, riassegnare alla tabella sorgente gli ID a partire da "max ID ricevente" + 1; ovviamente non basterebbe, dovresti andare a cambiare anche gli "ID esterni" nelle tabelle in relazione. Non facile e grossi rischi di errore.
 
Top