Prob des doublons!!

Résolu
smr_tjrs Messages postés 25 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 17 juillet 2005 - 4 mai 2005 à 17:59
cs_marie_rim Messages postés 18 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 25 mars 2008 - 7 mai 2005 à 13:20
Salut,
Je veux savoir cmt je peux éviter de saisir un enregistrement qui existe déjà.J'ai essayé de faire un fonction de recherche mais elle n'a pas marché.Est que vous pouvez m'aider SVP?
Merci d'avance.

8 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
6 mai 2005 à 19:29
Tout déplacement dans un ensemble de données provoque un post implicite.
Si l'enregistrement courant est en cours de modification au moment où tu lances la recherche, alors Delphi tente de le valider. Voici la fonction revue et corrigée pour régler ce problème :

function Trouver(AText: string): boolean;
begin
//Initialiser le résultat
Result := False;

with DM.DSRuche.Dataset do
begin
//annuler les modifications en cours
if State in dsEditModes then
Cancel;
First;
while not EOF do
begin
if Fields[0].AsString = AText then
begin
Result := True;
//Là, il faut sortir de la boucle While
Break;
end ;
Next;
end;
end;
end;


<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
pioonice Messages postés 22 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 28 avril 2006
4 mai 2005 à 18:20
Plus de précisions seraient les bienvenues...

merci

Fabien M.
0
smr_tjrs Messages postés 25 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 17 juillet 2005
4 mai 2005 à 18:37
voici la fonction que j'ai utilisé:

Function Trouver ():boolean;
DM.DSRuche.Dataset.First;
while Not DM.DSRuche.Dataset.EOF do
Begin
If Dm.DSRuche.Dataset.Fields[0].Value=DBEdit.Text then
Begin
Trouver:=True;
End
Else
Begin
DM.DSRuche.Dataset.Next;
End;
End;
Et dans la partie Enregistrement avant de faire le Poste je verifie d'abord la valeur de TROVER si elle est False j'effectue l'enregistrement si non j'annule mais malheureusement ça passe tjrs sans vérifier :-((
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
5 mai 2005 à 15:48
Regarde bien ton code de près :
Function Trouver ():boolean;
DM.DSRuche.Dataset.First;
while Not DM.DSRuche.Dataset.EOF do
Begin
If Dm.DSRuche.Dataset.Fields[0].Value= DBEdit.Text then
Begin
Trouver:=True;
End
Else
Begin
DM.DSRuche.Dataset.Next;
End;
End;
Même quand la valeur est trouvée, tu passes à l'enregistrement suivant !

Sauf coup de chance où le dernier enregistrement serait celui qui correspond à ce que tu cherches, ta fonction renverra pratiquement toujours faux.

Voici le code remanié et allégé :
<!--StartFragment-->
 function  Trouver(AText: string): boolean;
begin
  //Initialiser le r&#233;sultat
  Result : = False;

  with DM.DSRuche.Dataset do
  begin
    First;
    while not EOF do
    begin
      if Fields[0].AsString =  AText then
      begin
        Result := True;
        //L&#224;, il faut sortir de la boucle While
        Break;
       end ;
      Next;
    end;
  end;
end;

Mais pourquoi n'utilises-tu pas la m&#233;thode Lookup des TDataSet ?



<HR color =#008000>Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_marie_rim Messages postés 18 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 25 mars 2008
5 mai 2005 à 17:37
<TD id=HB_Focus_Element vAlign=top width=\"100%\" background=\"\" height=250 body UNSELECTAB<>Bon merci pour votre aide mais même avec la nouvelle fonction que vous m'avez donné j'ai tjrs le même problème il reconnaît le doublons juste quand on insert une valeur qui est égale à l'ID du premier enregistrement et dès qu'on insert une autre différente il débugue .
Merci
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
5 mai 2005 à 23:02
Alors, c'est que le problème est ailleurs dans ton code servant à insérer un nouvel enregistrement.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
cs_marie_rim Messages postés 18 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 25 mars 2008
6 mai 2005 à 17:43
<TD id=HB_Focus_Element vAlign=top width=\"100%\" background=\"\" height=250 UNSELECTAB< body> Merci bien mais je crois avoir trouver le problème:
au cour de l'execution de la fonction quand il passe à l'instruction First il mis à jour automatiquement la table donc il faut faire un cancel avant
Mais je travaille mnt avec des requettes je vois que c'est beaucoup mieux.
Merci beaucoup pour votre aide
0
cs_marie_rim Messages postés 18 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 25 mars 2008
7 mai 2005 à 13:20
Merci bien pour votre aide precieuse avnt je faisais le cancel sans conditions (State in dsEditModes ) Mais Mnt ça marche

Merci mille fois.

<TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB< body>
0
Rejoignez-nous