NICOLAS24112000
Messages postés16Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention 1 juin 2009
-
10 nov. 2007 à 10:43
NICOLAS24112000
Messages postés16Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention 1 juin 2009
-
11 nov. 2007 à 17:13
Bonjour à tous, je suis bloqué depuis pas mal de temps malgré de nombreuses recherches sur : comment "auto-écrire" des requêtes sql en fonction des choix de l'utilisateur.
En fait, dans un formulaire, je souhaiterais que l'utilisateur puisse faire des extractions en fonction des champs(ou critères) qu'il choisit. Et en fonction des champs choisis, la requête sql s'auto-écrit pour ensuite remplir le datagridview en cliquant sur le bouton recherche.J'ai définit la requête de base : requete "SELECT * FROM Affaire " ; ensuite si l'utilisateur choisit le champ "Nom" pour extraire les noms des clients et les afficher ds le datagridview en fonction du critère qu'il rentrera dans le textbox (nom), j'aimerais que la requête s'auto-écrit de la façon suivante : requete "SELECT * FROM Affaire WHERE AND Nom like" & "'" & nom & "'".
Merci pour votre aide, j'espère que j'ai été clair; sinon j'expliquerais plus en détails.
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 10 nov. 2007 à 12:10
Salut,
Moi je ferais comme cela(à essayer) :
Option Explicit
Dim MyTypeSql1 As String
Dim MyTypeSql2 As String
Dim MyTypeSql3 As String
Dim Msg As String
Dim Requete As String
Private Sub Valider_Click()
If StrConv(Text1.Text, vbProperCase) = "Nom" Then
Requete = MyTypeSql1ElseIf StrConv(Text1.Text, vbProperCase) "Prenom" Or StrConv(Text1.Text, vbProperCase) "Prénom" Then
Requete = MyTypeSql2
ElseIf StrConv(Text1.Text, vbProperCase) = "Age" Then
Requete = MyTypeSql3
Else
Msg = "Choix incorrect ! " & vbCrLf & _
"Choix possible : " & vbCrLf & _
" - Nom " & vbCrLf & _
" - Prenom " & vbCrLf & _
" - Age " & vbCrLf & vbCrLf
MsgBox Msg
Text1.Text = vbNullString
Text1.SetFocus
Exit Sub
End If
End Sub
Private Sub Form_Load()
MyTypeSql1 = "SELECT * FROM Affaire WHERE AND Nom like" & "'" & Text1.Text & "'"
MyTypeSql2 = "SELECT * FROM Affaire WHERE AND Prenom like" & "'" & Text1.Text & "'"
MyTypeSql3 = "SELECT * FROM Affaire WHERE AND Age like" & "'" & Text1.Text & "'"
NICOLAS24112000
Messages postés16Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention 1 juin 2009 10 nov. 2007 à 13:18
Merci pour ta réponse rapide, mais en fait j'ai du mal m'expliquer.
Les critères de choix pour filtrer la base de données sont écris par l'utilisateur dans un des champs du datagridview1 suivant :
Me.DataGridView2.Columns.AddRange(
New System.Windows.Forms.DataGridViewColumn() {
Me.Nom,
Me.Prenom,
Me.Ville})
Me
.DataGridView2.Rows.Add() 'j'ajoute une ligne pour pouvoir saisir les critères de choix
Ensuite l'utilisateur rempli, soit le champ nom, prenom et/ou ville. Il clique sur bouton "Recherche" et dessous un datagridview2 se remplit suivant la requête. Pour savoir quels champs ont été rempli je fais :
Private
Sub Recherche_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Recherche.Click
Dim requete, table
As
String
Dim nom, prenom, ville As String
'attribution des variables string en fonction de champs du datagridview1
nom =
Me.DataGridView1.Item(
"Nom", 0).Value
prenom =
Me.DataGridView1.Item(
"Prenom", 0).Value
ville =
Me.DataGridView1.Item(
"Ville", 0).Value'si aucun champ n'est rempli, on affiche toutes les données de la base dans datagridview2
If nom
Is
Nothing
And prenom
Is
Nothing
And ville
Is
Nothing
Then
requete =
"SELECT * FROM Affaire"
table =
"Affaire"
se_connecter(requete, table)
Else
If nom
IsNot
Nothing
Then
If prenom
IsNot
Nothing
Then
requete =
"SELECT * FROM Affaire WHERE Nom like" &
"'" & nom &
"' AND ""WHERE Prenom like" &
"'" & prenom &
"'"
End
If
requete =
"SELECT * FROM Affaire WHERE Nom like" &
"'" & nom &
"'"
End
If
If prenom
IsNot
Nothing
Then
If nom
IsNot
Nothing
Then
requete =
"SELECT * FROM Affaire WHERE Nom like" &
"'" & nom &
"' AND ""WHERE Prenom like" &
"'" & prenom &
"'"
End
If
requete =
"SELECT * FROM Affaire WHERE Prenom like" &
"'" & prenom &
"'"
End
If
table =
"Affaire"
se_connecter(requete.ToString, table)
End
If
End Sub
Private
Sub se_connecter(
ByVal requete
As
String,
ByVal table
As
String)
Dimbase, chemin
As
String
'Chemin d'accès à la b.d. située dans le dossier bin
'chemin = Application.StartupPath & "\proprietaires.mdb"
chemin =
"K:\CltAccess.mdb"
base =
"provider=microsoft.jet.oledb.4.0;data source=" + chemin
Dimconnexion
AsOleDbConnection =
NewOleDbConnection(base)
connexion.Open()
'Lien entre la base et la requête
DimLiaison
As
New OleDbDataAdapter(requete, base)
DimMemoire
As
New DataSet()
'Charge la table en mémoire
Liaison.Fill(Memoire, table)
DimVue
As
NewDataView(Memoire.Tables(table))
DataGridView2.DataSource = Vue
connexion.Close()
End
Sub
Il s'agit juste d'un exemple pour 2 champs, mais le pb c'est que j'en ai au moins 25. Donc les possibilités sont énormes. Y-a-t-il un moyen pour faire + simple et prendre en compte les champs null ?
Merci
Nico
NICOLAS24112000
Messages postés16Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention 1 juin 2009 10 nov. 2007 à 16:09
Bon ben je m'en sors pas, voilà un aperçu pour essayer d'avoir toutes les possibilités (j'aimerais trouver comment faire pour automatiser les requêtes) : (j'ai remplacé le nom des champs par les numéro 1,2,3,4..... pour mettre dans le forum)
' tous les champs vides
If 1 =
Nothing
And 2 =
Nothing
And 3 =
Nothing
And 4 =
Nothing
And 5 =
Nothing
And _
6 =
Nothing
And 7 =
Nothing
And 8 =
Nothing
And 9 =
Nothing
And 10
Is
Nothing
And _
11
Is
Nothing
And 12
Is
Nothing
And 13
Is
Nothing
And 14
Is
Nothing
And 15
Is
Nothing
And _
16
Is
Nothing
And 17
Is
Nothing
And 18
Is
Nothing
And 19
Is
Nothing
And 20
Is
Nothing
And _
21
Is
Nothing
And 22
Is
Nothing
And 23
Is
Nothing
And 24
Is
Nothing
And 25
Is
Nothing
Then
requete =
"SELECT * FROM Client"
table =
"Client"
se_connecter(requete, table)
End
If
' champ 1 rempli et les autres vides
If
Not 1.ToString =
Nothing
Then
If 2 =
Nothing
And 3 =
Nothing
And 4 =
Nothing
And 5 =
Nothing
And _
6 =
Nothing
And 7 =
Nothing
And 8 =
Nothing
And 9 =
Nothing
And 10
Is
Nothing
And _
11
Is
Nothing
And 12
Is
Nothing
And 13
Is
Nothing
And 14
Is
Nothing
And 15
Is
Nothing
And _
16
Is
Nothing
And 17
Is
Nothing
And 18
Is
Nothing
And 19
Is
Nothing
And 20
Is
Nothing
And _
21
Is
Nothing
And 22
Is
Nothing
And 23
Is
Nothing
And 24
Is
Nothing
And 25
Is
Nothing
Then
requete =
"SELECT * FROM Client WHERE 1 IN (" & 1 &
") "
End
If
End
If
' champ 2 rempli et les autres vides
If
Not 2.ToString =
Nothing
Then
If 1 =
Nothing
And 3 =
Nothing
And 4 =
Nothing
And 5 =
Nothing
And _
6 =
Nothing
And 7 =
Nothing
And 8 =
Nothing
And 9 =
Nothing
And 10
Is
Nothing
And _
11
Is
Nothing
And 12
Is
Nothing
And 13
Is
Nothing
And 14
Is
Nothing
And 15
Is
Nothing
And _
16
Is
Nothing
And 17
Is
Nothing
And 18
Is
Nothing
And 19
Is
Nothing
And 20
Is
Nothing
And _
21
Is
Nothing
And 22
Is
Nothing
And 23
Is
Nothing
And 24
Is
Nothing
And 25
Is
Nothing
Then
requete =
"SELECT * FROM Client WHERE 2 IN (" & 2 &
") "
End
If
End
If
table =
"Client"
se_connecter(requete, table)
Vous voyez, c'est indigeste et vraiment pas pro !!
Au secours !!!!
NICOLAS24112000
Messages postés16Date d'inscriptiondimanche 10 juin 2007StatutMembreDernière intervention 1 juin 2009 11 nov. 2007 à 17:13
Toujours pas d'infos complémentaires ?
Je pense qu'il me faudrait en fait une "requête dynamique" dont le sql texte s'auto rempli en fonction des "champs critères" qui sont différents de Nothing.