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

 Delphi Discussion :

Comment vérifier qu'on a pas un champ qui a la même valeur dans 2 enregistrements


Sujet :

Delphi

  1. #1
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut Comment vérifier qu'on a pas un champ qui a la même valeur dans 2 enregistrements
    bonjour tout le monde ,

    voila j'ai une table employé j'aimerais récupérer le matricule d'un employé par son nom sauf que je veux vérifié si jai deux employé qui ont le mm nom la je demanderais de taper le prénom!!!

    merci bcp bcp!!

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 092
    Points : 41 067
    Points
    41 067
    Billets dans le blog
    62
    Par défaut
    en SQL par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(*) FROM LATABLE WHERE NOM='UNNOM'
    si count est supérieur a 1 alors demander le prénom .
    bien sur pour des questions de performances nom devra faire partie d'un index
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    ce code je l'ai fait dans onexit du edit ou j'écris la nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    begin
    query2.Active:=false;
    query2.SQL.Clear;
    if (edit12.Text<>' ') then begin
    query2.SQL.Add(' select matricule from employe where nom='''+edit12.Text+''' ');
    query2.Open;
    if(query2.RecordCount > 0) then showmessage(' veuillez tapez le prénom merci ')
    else
    begin
    edit11.Text:=query2.FieldValues['matricule'];
    end;
    end;
    et code c'est dans on exit du edit du prénom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    begin
    query2.Active:=false;
    query2.SQL.Clear;
    if (edit1.Text<>'') then
    begin
    query2.SQL.Add(' select matricule from mouvement where nom='''+edit12.Text+''' and prenom1='''+edit1.Text+''' ');
    query2.Open;
    edit11.Text:=query2.FieldValues['matricule'];
    end;
    end;
    c'est jsute comme ca????

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Désolé, j'ai répondu en doublon. Je suis vraiment trop long. pour la 2° question essayer de mettre des quotedStr pour securiser les nom et prénom.

    Bonjour,


    Dans une requête essayer un code SQL ressemblant un peux a ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select Nom, Prenom, Identtifant from Utilisateur where nom = '...'
    Vous pouvez tester le nombre d'enregistrement retourné (RecordCount).
    Si recordCount= 0 pas d'utilisateur avec ce nom
    si recordCount = 1 Le bon utilisateur est trouvé
    Si recordcount > 1 plusieurs utilisateurs avec le même nom

    Vous pouvez aussi essayer une requête ressemblant à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select count(Nom) as NB form utilisateur where nom = '...'
    La valeur NB retourné par la requête correspond au nombre de correspondance ave c le nom (équivalent du recordcount au dessus)

  5. #5
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    ou bien ca dans le onexit du edit du nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    begin
    query2.Active:=false;
    query2.SQL.Clear;
    query2.SQL.Add('select matricule from employe where nom='''+edit2.Text+''' ');
    query2.Open;
    if (query2.RecordCount=0) then showmessage('il n''existe pas de matricule correspondant a ce nom!!!')
    else if (query2.RecordCount=1) then edit1.Text:=query2.FieldValues['matricule']
    else if(query2.RecordCount>1) then showmessage('veuillez tapez le prénom pour avoir plus de précision merci');
    end;
    merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Je pense qu'il serait préférable d'écrire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query2.SQL.Add('select matricule from employe where nom=' + QuotedStr(edit2.Text));
    si vous ne le faite pas, toutes présence de ' dans le Nom vous causera de gros soucis (SQL incorrecte).


    Autrement, vous pouvez utiliser un code unique pour les nom et prénom. du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    procedure MyForm.OnEditExit(Sender: TObject);
      procedure NomSeul;
      begin
        query2.Active:=false;
        query2.SQL.Clear;
        query2.SQL.Add('select matricule from employe where nom=' + QuotedStr(edit2.Text));
        query2.Open;
        if (query2.RecordCount=0) then showmessage('il n''existe pas de matricule correspondant a ce nom!!!')
        else if (query2.RecordCount=1) then    edit1.Text:=query2.FieldValues['matricule']
        else if(query2.RecordCount>1) then showmessage('veuillez tapez le prénom pour avoir plus de précision merci');
      end;
    begin
      If Trim(EditPrenom.Text) = '' then 
        NomSeul  // Test le nom seul
      Else 
        NomEtPrenom;  // Test nom et prenom (a fair)
    end;
    L'adaptation aux valeurs entré sera automatiques même si le prénom est entré avant le nom.

  7. #7
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    merci a vous mais je n'ai pas saisi le test avec trim !!!
    et en parlant des erreurs du sql et du quotedstr comment faire pour pouvoir faire une insertion avec post et que je puisse entrer des caractéres spéciaux surtout le '

    merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Le trim est destiné a enlever les blanc avant et après les parties entrés.
    Par exemple 'Bonjour' est égale à trim(' Bonjour ') . Dans l'exemple cela permet de savoir si l'on a réellement saisie une valeur, ou s'il l'on n'a qu'un résidu de saisit suite à des effacement de texte.


    Pour les ' aux milieux d'un texte il faut utiliser QuotedStr.

    Par exemple si la variable TMP contient -l'élevage- (les - délimites le texte).

    QuotedStr(TMP) contient -'L''élévage'- le ' entre L et é a été remplacé par '' et un caractère ' à été placé avant et après le texte. Du coup, la formulation SQL est respecté.

  9. #9
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    merci a vous pour tous ces éclaircissements j'aimerais tant avoir autant d'expérience comme vous mais par un post il accepte les ' ou pas???

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Vous voulez dire en écrivant directement dans le champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Myquery.fieldByName('Monchamp').asString := edit1.text;
    Dans ce cas oui, vous pouvez mettre directement Edit1.text. Les conversion sont faites directement par delphi.


    Attention a ce que le champs de réception soit bien un champ texte (char, varchar etc.) Si le champs est d'un autre type (entier, flottant, date etc.) la conversion peut poser problème. Dans ce cas il est plus sur d'utiliser une conversion explicite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Try
         aValeur := StrToInt(Edit1.Text);
        MyQuery.FieldByName('MonChampEntier').AsInteger := aValeur;
      Except
        // Gestion si Edit1.Text n'est pas convertible en integer
      end;

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Citation Envoyé par lila23 Voir le message
    bonjour tout le monde ,

    voila j'ai une table employé j'aimerais récupérer le matricule d'un employé par son nom sauf que je veux vérifié si jai deux employé qui ont le mm nom la je demanderais de taper le prénom!!!

    merci bcp bcp!!
    autant utiliser l'index sue le champ matricule, il fait l'affaire sans aucun code ou du moins tu peux intercepter l'erreur Delphi et la traduire en message compréhensible.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 24/09/2010, 22h07
  2. Réponses: 3
    Dernier message: 01/08/2010, 00h52
  3. Réponses: 2
    Dernier message: 21/09/2009, 14h20
  4. Réponses: 4
    Dernier message: 16/10/2008, 18h47
  5. Réponses: 9
    Dernier message: 31/07/2007, 10h01

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