Probleme d'enregistrement dans un table

maxell_64 Messages postés 9 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 17 février 2007 - 22 mai 2006 à 23:32
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 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 ??

Merci pour votre aide

3 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
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.

Thierry  
0
maxell_64 Messages postés 9 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 17 février 2007
23 mai 2006 à 19:01
Salut et meerci pour ta reponse

Donc d'apres ce que je comprend il ne faut pas que je fasse un if not mais plutot un if  C'est bien ça  ??

Je vais tester ça et je te dit si ça resous ou pas mon  probleme

merci pour ton aide
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
23 mai 2006 à 19:32
if Agent.FindKey(...) then // existe déjà
else ....  // append

Mais tu dois surtout appeler FindKey avec les valeurs que tu cherches !
      exemple:    FindKey(['DUPOND', 'Jean'....]) 
 
0
Rejoignez-nous