Comment effectuer une recherche dans une base [Résolu]

Signaler
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
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

Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

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
 
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010

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
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010

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
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
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
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010

A quoi cela sert-il ?

A vider des zones, des valeurs ?
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

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

 
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
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';
Messages postés
141
Date d'inscription
mardi 18 mars 2003
Statut
Membre
Dernière intervention
3 octobre 2010

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é !!
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
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'
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
(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 !!).