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!!
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!!
en SQL par
si count est supérieur a 1 alors demander le prénom .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2SELECT COUNT(*) FROM LATABLE WHERE NOM='UNNOM'
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
ce code je l'ai fait dans onexit du edit ou j'écris la nom
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
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;
c'est jsute comme ca????
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;
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
Vous pouvez tester le nombre d'enregistrement retourné (RecordCount).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Select Nom, Prenom, Identtifant from Utilisateur where nom = '...'
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 à :
La valeur NB retourné par la requête correspond au nombre de correspondance ave c le nom (équivalent du recordcount au dessus)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Select count(Nom) as NB form utilisateur where nom = '...'
ou bien ca dans le onexit du edit du nom :
merci
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;
Je pense qu'il serait préférable d'écrire.
si vous ne le faite pas, toutes présence de ' dans le Nom vous causera de gros soucis (SQL incorrecte).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 query2.SQL.Add('select matricule from employe where nom=' + QuotedStr(edit2.Text));
Autrement, vous pouvez utiliser un code unique pour les nom et prénom. du genre
L'adaptation aux valeurs entré sera automatiques même si le prénom est entré avant le nom.
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;
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
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é.
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???
Vous voulez dire en écrivant directement dans le champs.
Dans ce cas oui, vous pouvez mettre directement Edit1.text. Les conversion sont faites directement par delphi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Myquery.fieldByName('Monchamp').asString := edit1.text;
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;
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager