Comment effectuer une recherche dans une base

Résolu
cs_PHILOUVB Messages postés 141 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 3 octobre 2010 - 2 févr. 2009 à 20:37
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 9 févr. 2009 à 22:28
Bonsoir

J'aimerais savoir comment effecuter une recherche dans une base de données avec VB2008.

J'ai une base de données qui s'appelle Prénom.mdb
la table s'appelle TablePrénom et je veux vérifier qu'un prénom existe ou non dans ma zone "Prenom"

Comme je n'y connais absolument rien, j'aimerais savoir quelles instructions vont me permettre d'effectuer cette recherche.

Merci

PhilouVB

10 réponses

GarnierFlorian Messages postés 129 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 26 juillet 2011
3 févr. 2009 à 16:57
Salut,
Et bien je ne sais pas si j'ai tout à fait saisi ce que tu veux, mais je peux peut-être t'aider:
si tu souhaite consulter ta base de données à partir de ton programme, il te faut faire une requète SQL que tu insère avec le code suivant :

'Déclarations des variables
Public g_connexion As System.Data.OleDb.OleDbConnection
Public g_cmd_requete As OleDbCommand
'Dabord il faut que tu te connectes à la base de données

g_connexion = New
OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;datasource=..\Prénom.mdb;")
'Si la connexion à la base de données n'est pas ouverte :
            If g_connexion.State <> ConnectionState.Open Then g_connexion.Open()
'Recherche si le prénom existe            g_cmd_requete New OleDb.OleDbCommand("SELECT prenom FROM TablePrenom Where prenom '" & tonTextBox.Text & "' ", g_connexion)
'Pour récupérer le résultat
Dim str_prenom As String = CStr(g_cmd_requete.ExecuteScalar)
'Ensuite tu fais ton petit test pour renvoyer un message
If str_prenom = tonTextBox.Text then
       MessageBox.Show("Le prénom existe déjà.", "Mot de Passe existant.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Else
       MessageBox.Show("Le prénom n'existe pas.", "Mot de Passe inexistant.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

Bien évidemment, tu peux renommer à ta guise les variables g_connexion, g_cmd_requete et str_prenom.
De plus, "tonTextBox" correspond au textbox de ton application, celui où se trouve le prénom que tu souhaites vérifier dans la base de données.

J'espère t'être utile, et si jamais je ne réponds pas à ta question, reformule bien ce que tu veux et je verrais ce que je peux faire !
Peace
 
3
cs_PHILOUVB Messages postés 141 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 3 octobre 2010
3 févr. 2009 à 17:39
Bonjour et tout d'abord merci

Je teste cela dans la semaine, et je te tiens au courant, mais je pense effectivement que cela va m'aider fortement

PhilouVB
3
cs_PHILOUVB Messages postés 141 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 3 octobre 2010
3 févr. 2009 à 20:09
J'ai pas pu attendre, je viens de tester, à ça marche à la perfection.

J'ai ainsi découvert une instruction (ExecuteScalar) et grace à ton exemple très clair, j'ai pu comprendre le mecanisme.

Je te remercie beaucoup.
Si tu repasses sur ce thème, on risque de se retrouver car je pense que j'aurais encore des questions sur le sujet

A très bientot
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 févr. 2009 à 20:28
Vive l'injection !!
N'oublie pas de te faire une petite fonction pour "purifier" les chaines passées en SQL :

Function Pure(S as String) As String
  Pure = Replace(S,"'","''")
End Function
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PHILOUVB Messages postés 141 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 3 octobre 2010
3 févr. 2009 à 21:31
A quoi cela sert-il ?

A vider des zones, des valeurs ?
3
GarnierFlorian Messages postés 129 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 26 juillet 2011
4 févr. 2009 à 10:06
De rien PHILOUVB, tant mieux que tu  t'en sois sorti et que çà est pu t'aider !! Si tu a d'autres questions n'hésitent pas, mais par contre je ne peux t'aider pour l'injection, car j'ai a peut prêt compris mais ghuysmans99 te l'expliqueras surement bien mieux ! A plus tard.
Peace

 
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
4 févr. 2009 à 22:40
Non, à éviter qu'un (pas gentil) hacker 'forge' le query.
Par exemple, transformeSELECT * FROM Users WHERE UserName= 'admin' AND PassWord='
bonjour';

En SELECT * FROM Users WHERE UserName ='admin' AND PassWord='
' or 'a'='a';
3
cs_PHILOUVB Messages postés 141 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 3 octobre 2010
9 févr. 2009 à 12:24
Bonjour
Concernant ta dernière réponse, peux-tu m'en dire un peu plus sur

Password='' or 'a' = 'a';

En quoi cela protègera mieux ma base ?

Merci

PS : grace à toute votre aide, j'ai réussi à modifier, supprimer les élements dans une base.
J'ai un peu tatonné, mais j'y suis arrivé !!
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 févr. 2009 à 22:24
Attends, je change la couleur.SELECT * FROM Users WHERE UserName' admin ' AND PassWord''or 'a'= 'a';

Le texte en rose c'est le contenu d'un champ.
Le texte en noir c'est ta requête SQL.

Ici, si tu relis le SQL modifié, tu vois clairement que la condition est changée : il va filtrer sur
UserName = 'admin' et [ PassWord='' OU 'a'='a'].
Evidemment, vu que 'a'='a' il va annuler la 2e condition. Ce qui fait qu'il va prendre l'utilisateur nommé 'admin'
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 févr. 2009 à 22:28
(j'ai oublié un morceau !)
Donc si tu ne te protèges pas via ma fonction (ou une autre, du moment qu'elle double les guillemets), n'importe qui peut rentrer dans ta base et se logger en admin (ou tout autre compte !!).
3