maxell_64
Messages postés9Date d'inscriptionvendredi 3 mars 2006StatutMembreDernière intervention17 février 2007
-
22 mai 2006 à 23:32
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 2013
-
23 mai 2006 à 19:32
salut a tous,
Dans un projet , j'ai une table paradox qui reçoit divers information concernant des personnes
Dans la table sont declarer comme index
- Nom
-Prenom
-Service
-Site
Sur 2 form differente j'ai 2 table contenant ces 4 meme index
une est dedier pour la gestion des personnes, l'autres pour les informations les concernants.
Afin de ne pas creer de doublon j'ai ce code
procedure TagentsEnregistrer.ValiderClick(Sender: TObject);
begin
Agent.active:=true;
if not Agent.FindKey( [ Agent.FieldByName('Nom').AsString,
Agent.FieldByName( 'Prénom' ).AsString,
Agent.FieldByName( 'Service' ).AsString,
Agent.FieldByName( 'Site' ).AsString ] ) then
showmessage('Agent déjà enregistrer dans la base de donnée')
else
begin
Agent.Append;
agent.FieldByName('Nom').Value := NomEdit.Text;
agent.FieldByName('Prénom').Value := PrenomEdit.Text ;
agent.FieldByName('Service').Value := ServiceEdit.Text ;
agent.FieldByName('Site').Value := SiteEdit.Text;
agent.Post;
Jusque la tout fonctionne bien, une personne correspond a un enregistrement
Sur la 2eme table j'ai taper ceci
begin
Prestasoc.Active:=true;
if not Prestasoc.FindKey(
[Prestasoc.FieldByName( 'Nom' ).AsString,
Prestasoc.FieldByName( 'Prénom' ).AsString,
Prestasoc.FieldByName( 'Service' ).AsString,
Prestasoc.FieldByName( 'Site' ).AsString ] ) then
begin
Prestasoc.Append;
Prestasoc.FieldByName('Nom').AsString := Nomlabel.Caption;
Prestasoc.FieldByName('Prénom').AsString := PrenomLabel.Caption;
Prestasoc.FieldByName('Service').AsString := ServiceLabel.Caption;
Prestasoc.FieldByName( 'Site' ).AsString :=SiteLabel.Caption ;
end
else
Prestasoc.Edit;
if Prestasoc.State in [ dsEdit, dsInsert ] then
begin
Hors sur cette 2eme table , j'ai le nom de la 2eme personne qui viens ecrasser celle de la premiere, tout en conservant le reste de la premiere et sans insertion.
comment palier a ce probleme d'ecrassement et d'absence d'insertion ??
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 23 mai 2006 à 17:18
Salut Maxell,
Ton problème vient ,d'après ce que je vois de ton code, du mauvais emploi de la fonction FindKey.
Tu passes en paramètres de valeurs à rechercher : Prestasoc.FieldByName( 'Nom' ).AsString...
c'est à dire que la valeur à rechercher est la valeur de l'enregistrement actif !!!
Donc forcément FindKey renvoie true. Et donc ton Edit écrase le nom...
La preuve :
if not Agent.FindKey( [ Agent.FieldByName('Nom').AsString,
Agent.FieldByName( 'Prénom' ).AsString,
Agent.FieldByName( 'Service' ).AsString,
Agent.FieldByName( 'Site' ).AsString ] ) then
showmessage('Agent déjà enregistrer dans la base de donnée')
else
begin
Agent.Append;
Or c'est exactement le contraire qui devrait se produire : il ne faut faire un append que si FindKey renvoie false.
Je ne sais pas si j'ai été très clair...
N'hésite donc pas à mettre ici un nouveau message.