mis à jour de 2 tables sous delphi - Delphi/Pascal - Programmation
Marsh Posté le 25-07-2005 à 18:47:42
Je vois pas. Mais si tu decriver l'erreur, on aurait plus de chance (Ca génère une exception? Si oui, quelle execption?)
Bon...une explication qui marche souvent : Tu est sur que la table Lieu1 ne contient pas une clé unique (ce qui entrainerais une violation de clé quand tu fait une nouvelle insertion)?
Marsh Posté le 25-07-2005 à 21:12:10
J'dis ça comme ça mais tu fera pas cela en SQL plutot? ça doit être faisable en utilisant des sous-requetes.
Marsh Posté le 26-07-2005 à 08:45:49
Zozol a écrit : Je vois pas. Mais si tu decriver l'erreur, on aurait plus de chance (Ca génère une exception? Si oui, quelle execption?) |
Merci ZOZOL
Effectivement j'ai une erreur de violation de clé quand je fais une nouvelle insertion.
Marsh Posté le 25-07-2005 à 16:25:50
bonjour ,
je suis nouveau en programmation et delphi.
voici mon problème: je travaille sur delphi 7, sur une base de donnée Interbase avec BDE.
j'ai 2 tables : 'lieu1' et 'lieu2' . Ces 2 tables contiennnent les mêmes données et même champs.
(les données sont des adresse, ville, rue etc...)
la table 'Lieu1' est en locale et subit des modifications manuelles journalières.
la table 'Lieu2' est à distance , ne subissent pas de modification sauf par mis à jour
en provenance de la table Lieu1.
Mon souci: Lors de la mis à jours de la table 'Lieu2' par la table 'Lieu1' , je dois tester d'abord la présence
des enrégistrements existants dans le table 'Lieu2'. Si les mêmes enrégistrements de la table Lieu1 existent déjà dans la table Lieu2, on ne fait rien, sinon je copie les nouvelles enrégistrements de la table1 vers la table lieu2.
( Surtout pas de copie de la table Lieu1 et le renommer en lieu2)
Voici le programme ci-dessous. Ce programme marche bien seulement s'il n'y a aucun enrégistrement dans la table 'Lieu2'
procedure TForm1.Button1Click(Sender: TObject);
begin
qrlieu.Open;
while not (qrlieu.eof) do
begin
qrInsertlieu.ParamByName('li_id').AsInteger := qrlieu.fieldbyname('li_id').AsInteger;
qrInsertlieu.ParamByName('vi_id').AsInteger := qrlieu.fieldbyname('vi_id').AsInteger;
qrInsertlieu.ParamByName('li_adr1').Asstring := qrlieu.fieldbyname('li_adr1').Asstring;
qrInsertlieu.ExecSQL;
qrcommit.ExecSQL;
qrlieu.Next;
end;
end;
Explication : qrlieu est un Query: ( select * from lieu) // ici lieu désigne la table lieu1
qrInsertionlieu est un bouton dont le query est :
insert into lieu (li_id,vi_id,li_adr1)
values(:li_id, :vi_id, :li_adr1)
Ici Lieu designe la table Lieu2
help , help