IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Test d'existence d'une valeur dans une table


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut Test d'existence d'une valeur dans une table
    Bonjour et joyeux Noël.

    Je voudrais savoir comment je peux faire pour tester si une valeur contenue dans un Edit existe déjà dans ma table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (Edit1.Text=AdoQuery1.FieldByName('Table').AsString) then .....
    Ce code ne marche pas. Et je ne vois pas comment faire.

    Merci de m'aider.

  2. #2
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 594
    Points
    594
    Par défaut
    Ta syntaxe est juste le raisonnement aussi mais je ne sais pas si Table est un nom de champs.
    Explique un peu plus.

  3. #3
    Membre habitué Avatar de bidochon
    Inscrit en
    Juin 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 168
    Points : 156
    Points
    156
    Par défaut
    Salut,
    je vois deux solutions possibles :
    faire une boucle sur les enregistrements de la table (c'est long ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Var b : boolean;
     
    Matable.first;
    b:=false;
    While not Matable.Eof do
     Begin
      If Matable.fieldByName('MonChamp').asString=Edit1.Text then b:=true;
      Matable.Next;
     End;
    If b then showmessage('Valeur de MonChamp existante')
    Else showmessage('Valeur de MonChamp non trouvée');
    Sinon il faut passer par une requete SQL (c'est tres rapide)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AdoQuery.Clear;
    Adoquery.SQL.Text := 'SELECT count(MonChamp) FROM Matable WHERE MonChamp='+QuotedStr(Edit1.text);
    AdoQuery.Open;
    if AdoQuery.FieldCount>0  then showmessage('Valeur de MonChamp existante')
    Else showmessage('Valeur de MonChamp non trouvée');
    @ plus et joyeux noel

  4. #4
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Merci pour vos réponses.

    A JustMe : Ce code est placé dans l'évènement OnExit de l'Edit1. En mode Append (insert), il teste si ce qui est tapé dans l'Edit1 existe déjà dans la table. Bien évidemment, dans mon prog, Table s'appelle en réalité Titre et le code réel est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (DBEditTitre.Text=AdoQuery1.FieldByName('Titre').AsString) then ShowMessage ('Risque de doublons !!!  A vérifier. ');
    Quelque soit ce que je tape dans l'EditTitre, il me dit toujours qu'il existe déjà dans ma table. Et je ne comprends pas pourquoi.

  5. #5
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut Re: Test d'existence d'une valeur dans une table
    Citation Envoyé par dleu
    Je voudrais savoir comment je peux faire pour tester si une valeur contenue dans un Edit existe déjà dans ma table.
    quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var Resultat : Variant;
    begin
         Resultat := ADOTable1.LookUp('Titre',DBEditTitre.Text);
         if VarIsNull(Resultat) then begin //pas de résultat
            ShowMessage('Doublons!');
            DBEditTitre.SetFocus;
         end;
    end;

  6. #6
    Membre habitué Avatar de bidochon
    Inscrit en
    Juin 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 168
    Points : 156
    Points
    156
    Par défaut
    Salut,
    Citation Envoyé par dleu
    En mode Append (insert), il teste si ce qui est tapé dans l'Edit1 existe déjà dans la table.
    C'est bizarre, en mode insertion tu testes si la valeur est dans la table ou pas -> je pense qu'il serait plus judicieux de tester avant de passer en mode insertion.
    Citation Envoyé par dleu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (DBEditTitre.Text=AdoQuery1.FieldByName('Titre').AsString) then ShowMessage ('Risque de doublons !!!  A vérifier. ');
    Quelque soit ce que je tape dans l'EditTitre, il me dit toujours qu'il existe déjà dans ma table. Et je ne comprends pas pourquoi
    Est ce un TEdit ou un TDBEdit ?
    Le TDBEdit est relié à ta table et contient le champ de l'enregistrement actif, si tu executes le code ci-dessus tu compares le champ de l'enregistrement actif avec lui meme !
    Pour tester sur la totalité des enregistrements de ta table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ADOTable1.Locate('Titre',Edit1.Text,[]) then
      ShowMessage('Existe dans la table')
      Else ShowMessage('pas dans la table');
    Regarde dans l'aide les options du locate (loCaseInsensitive ou loPartialKey) selon ce que tu veux faire.
    @ plus

  7. #7
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Locate te positionne sur l'enregistrement trouvé (s'il existe) et je ne veux pas ça.

    Ce que je veux : lors de l'encodage de la fiche, le prog teste si le titre existe déjà. Puisque j'encode, je suis évidemment en mode insertion. Et ce test n'a pas pour but d'interdire les doublons (il y a d'autres moyens pour cela) mais juste de signaler qu'il y a un risque de créer un doublon. Comme je suis en mode insertion quand je tape le titre, je voudrais être toujours en mode insertion après le test.

    Et je crois que la solution de King est correcte. Je la teste actuellement.

  8. #8
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Bon, aucune de ces méthodes ne me donnent satisfaction parce que, soit elles ne fonctionnent pas, soit elles me sortent du mode d'insertion.

    Je continue donc à chercher.

    Merci encore pour votre aide.

  9. #9
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 94
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Le problème n'est-t-il pas dû au fait que tu utulises un DbEdit. Fais un essai avec un Edit.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Points : 125
    Points
    125
    Par défaut
    Dans ton onexit, tu fais une requete qui va te permmet de voir si le titre existe déja

    Select * from tatable
    where titre = :titre

    et en paramètres tu met titre := dbedit.text

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [XL-2003] Insérer la valeur d'une cellule dans une phrase d'une autre
    Par DonaldTron dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2009, 19h50
  3. quand je selectionne une valeur dans une liste, retourne une autre valeur
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2008, 14h23
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Réponses: 1
    Dernier message: 25/09/2006, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo