Prob des doublons!! [Résolu]

smr_tjrs 25 Messages postés lundi 4 avril 2005Date d'inscription 17 juillet 2005 Dernière intervention - 4 mai 2005 à 17:59 - Dernière réponse : cs_marie_rim 18 Messages postés vendredi 1 avril 2005Date d'inscription 25 mars 2008 Dernière intervention
- 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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 6 mai 2005 à 19:29
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.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
pioonice 22 Messages postés mercredi 12 novembre 2003Date d'inscription 28 avril 2006 Dernière intervention - 4 mai 2005 à 18:20
0
Merci
Plus de précisions seraient les bienvenues...

merci

Fabien M.
Commenter la réponse de pioonice
smr_tjrs 25 Messages postés lundi 4 avril 2005Date d'inscription 17 juillet 2005 Dernière intervention - 4 mai 2005 à 18:37
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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 5 mai 2005 à 15:48
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
cs_marie_rim 18 Messages postés vendredi 1 avril 2005Date d'inscription 25 mars 2008 Dernière intervention - 5 mai 2005 à 17:37
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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 5 mai 2005 à 23:02
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
cs_marie_rim 18 Messages postés vendredi 1 avril 2005Date d'inscription 25 mars 2008 Dernière intervention - 6 mai 2005 à 17:43
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
cs_marie_rim 18 Messages postés vendredi 1 avril 2005Date d'inscription 25 mars 2008 Dernière intervention - 7 mai 2005 à 13:20
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.