Bonjour,
Solution basique: J'ouvre la table donneuse avec un TFDQuery pour n'avoir que les lignes concernées et je boucle sur l'ensemble pour mettre les valeurs à la ligne correspondante dans la receveuse. Rien de plus classique.
Je ne comprends pas pourquoi tu n'utilises pas FDBatchMove !
Solution imaginée mais jamais testée: Une seule requête update :
update table receveuse inner join donneuse on ...
Déjà je ne suis pas sûr que cela fonctionne au sein d'une même base !
Un UPDATE OR INSERT par contre ...
genre UPDATE OR INSERT INTO TableReceveuse(colonnes) values SELECT colonnes from tablesource MATCHING(idunique)fonctionnerait peut-être au sein d'une même BDD Firebird
Seulement voilà avec un LocalSQL il s'agit de SQLite donc l'instruction serait
INSERT OR REPLACE INTO tablereceveuse(colonnes) VALUES SELECT colonnes from tablesource;
J'ai de gros doutes quant à cette possiblité
Ta principale contrainte serait de mettre dans tes tables distribuées un indicateur de modification en plus.
Exemple : ta table Firebird clients (idClient,nom ..... )
ta table SQlite clients (idClient,nom, .....,indic=0)
après modification ou autre manipulation indic<>0 (tu peux ainsi gérer des modifications =1 , insert=2 , delete=3)
le batchmove consistera en une requête (sans l'indic) sur la base SQlite récupérée select idclient,nom,... from clients where indic in (1,2)
Pour le delete par contre je ne sais pas trop. Le batchmove n'est pas possible du moins je crois, le TLocalSQL est possible (quoique j'ai toujours des difficultés avec
ce truc est interessant) une sorte de
DELETE FROM CLIENTSBASE WHERE idClient in (SELECT idclient from ClientsSQlite where indic=3)
est, peut-être possible (ClientsBase,clientsSQLite sont les noms donnés dans le TlocalSQL) j'émets moins de doutes mais quand même certains
Un utilisateur doit traiter des données importées depuis un fichier style XML (pas tout à fait mais ça y ressemble).
j'aurais choisi du JSON
plus à la mode
Partager