1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Private Sub btRun_Click()
Dim sSql As String
Dim q As QueryDef
Dim whr As String
Dim Arr() As String
Dim i As Integer
Set q = CurrentDb.QueryDefs("Query1")
'Sql de base (on sélectionne tout)
sSql = "SELECT articles.Ref, articles.nom, articles.rotation, articles.morphologie, " _
& "prélèvement.[Qte jour], prélèvement.[Qte mois], " _
& "dimensions.Poids, dimensions.Hauteur, dimensions.largeur, dimensions.longueur " _
& "FROM (articles INNER JOIN prélèvement ON articles.ID = prélèvement.ID) " _
& "INNER JOIN dimensions ON articles.ID = dimensions.ID;"
'Si le champ txtRef est resté vide, le sql est OK, on ouvre la requête et on sort
If Me.txtRef = "*" Or IsNull(Me.txtRef) Then
q.SQL = sSql
GoTo Sortir
End If
'Sinon, on va construire une clause Where pour limiter aux Ref énumérées
'on isole les Ref dans les cellules du tableau
Arr = Split(Me.txtRef, ";")
'on construit la clause Where
whr = " Where "
For i = 0 To UBound(Arr)
'N.B. If Len(Arr(i)) <> 0 pour éviter le dernier (blanc)
' si l'utilisateur a terminé la sélection par un point-virgule
If Len(Arr(i)) <> 0 Then whr = whr & " articles.Ref=" & Arr(i) & " or "
Next i
'on supprime le dernier " or "
whr = Left(whr, Len(whr) - 4)
'on ajuste le sql : on supprime le point-virgule original et on en place un autre à la fin
sSql = Left(sSql, Len(sSql) - 1) & whr & ";"
'on modifie la requête Query1 avant de l'ouvrir
q.SQL = sSql
Sortir:
DoCmd.OpenQuery "Query1"
Set q = Nothing
End Sub |
Partager