Prob des doublons!! [Résolu]

Messages postés
25
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
17 juillet 2005
- - Dernière réponse : 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.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
22
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
22
Date d'inscription
mercredi 12 novembre 2003
Statut
Membre
Dernière intervention
28 avril 2006
0
Merci
Plus de précisions seraient les bienvenues...

merci

Fabien M.
Commenter la réponse de pioonice
Messages postés
25
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
17 juillet 2005
0
Merci
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 :-((
Commenter la réponse de smr_tjrs
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
22
0
Merci
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.
Commenter la réponse de cs_Delphiprog
Messages postés
18
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
25 mars 2008
0
Merci
<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
Commenter la réponse de cs_marie_rim
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
22
0
Merci
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.
Commenter la réponse de cs_Delphiprog
Messages postés
18
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
25 mars 2008
0
Merci
<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
Commenter la réponse de cs_marie_rim
Messages postés
18
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
25 mars 2008
0
Merci
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>
Commenter la réponse de cs_marie_rim