que je fais ce genre de chose tout le temps! J'ai utilisé VBA pour réécrire les requêtes Access ainsi que les requêtes qui "passent" à une base de données MySQL. La réécriture d'une requête dans VBA dépend de la complexité que vous souhaitez obtenir.
J'ai toujours utilisé DAO
, qui est plus ancienne technologie (voir les commentaires ci-dessous pour clarifcation sur DAO vs ADO), mais il a travaillé pour moi dans ce cas. Vous devrez ajouter une référence à DAO dans VBA en allant dans Outils> Références, puis ajoutez "Bibliothèque d'objets Microsoft DAO 3.6".
Vous pouvez écrire une procédure qui ressemble à ceci:
Sub RewriteQuerySQL(strQueryName As String, strParameter As String)
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb()
Set qdf = db.QueryDefs(strQueryName)
qdf.SQL = "SELECT [Table].Field1, [Table].Field2 " & vbCrLf & _
"FROM [Table] " & vbCrLf & _
"WHERE ([Table].Field1 = " & chr(34) & strParameter & chr(34) & ");"
End Sub
Le code ci-dessus va changer SQL pour la requête que vous spécifiez avec la requête SQL dans le code VBA avec le strParameter
intégré dans le SQL question.
Voici une autre façon de le faire. Ceci est du code que j'utilisé dans une application de déclaration des ventes de réécrire une requête basée sur un numéro de vendeur:
Sub rewriteAccountsBySalesRepSortSQL(lngSalesRep As Long)
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
Dim strOriginal As String
Dim strReplacePart As String
Dim strSQLReplace As String
Dim lngLocSalesperson As Long
Dim lngLocMyRoundUp As Long
Dim lngLocParen As Long
Dim lngLocEndParen As Long
Set db = CurrentDb()
Set qdf = db.QueryDefs("qryS Accounts by Sales Rep Sorted by Diff DESC")
strSQL = qdf.SQL
lngLocSalesperson = InStr(strSQL, "Salesperson1)=")
lngLocEndParen = InStr(lngLocSalesperson + 14, strSQL, ")")
strOriginal = Mid(strSQL, lngLocSalesperson, lngLocEndParen - lngLocSalesperson)
'lngLocParen = InStrRev(strSQL, "(", lngLocSalesperson)
strReplacePart = "Salesperson1)=" & lngSalesRep
strSQLReplace = Replace(strSQL, strOriginal, strReplacePart)
qdf.SQL = strSQLReplace
End Sub
au lieu d'écrire toute requête, le code trouve simplement le numéro de représentant des ventes et le remplace par le nouveau nombre. En fait, je préfère la dernière méthode. La dernière méthode a été utilisée pour envoyer une requête directement à MySQL, donc la syntaxe avec une requête Access peut être légèrement différente.
Merci pour votre réponse et mes excuses pour les détails omis. Je viens de réussir à résoudre en passant par ce lien: http://bytes.com/topic/access/answers/211550-query-vba – Gaioshin
@Gaioshin, j'ai trouvé le lien que vous avez fourni ici d'une grande utilité. Cela m'a conduit à l'information dont j'avais besoin, ce qui m'a permis de trouver le reste des informations dont j'avais besoin pour utiliser une boîte de dialogue modale pour fermer une requête existante, apporter quelques améliorations, puis la rouvrir. Fantastique. – Zahhar