REQUETES SQL A CHOIX MULTIPLES

NICOLAS24112000 Messages postés 16 Date d'inscription dimanche 10 juin 2007 Statut Membre Dernière intervention 1 juin 2009 - 10 nov. 2007 à 10:43
NICOLAS24112000 Messages postés 16 Date d'inscription dimanche 10 juin 2007 Statut Membre Derniè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.

Nico

4 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
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 & "'"


End Sub


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
NICOLAS24112000 Messages postés 16 Date d'inscription dimanche 10 juin 2007 Statut Membre Derniè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
0
NICOLAS24112000 Messages postés 16 Date d'inscription dimanche 10 juin 2007 Statut Membre Derniè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 !!!!
0
NICOLAS24112000 Messages postés 16 Date d'inscription dimanche 10 juin 2007 Statut Membre Derniè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.

J'ai vraiment besoin d'aide....

Merci
0
Rejoignez-nous