Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez la méthode Requery sur un objet Recordset de type feuille de réponse dynamique ou de type instantané lorsque vous souhaitez réexécuter la requête sous-jacente après avoir modifié un paramètre. Cette procédure se révèle plus pratique et plus rapide que l'ouverture d'un nouveau jeu d'enregistrements.
L’exemple de code suivant crée un objet Recordset et le transmet à une fonction qui utilise la méthode CopyQueryDef pour extraire la chaîne SQL équivalente. Il invite ensuite l'utilisateur à ajouter une autre clause de contrainte à la requête. Le code utilise la méthode Requery pour exécuter la requête modifiée.
Sub AddQuery()
Dim dbsNorthwind As DAO.Database
Dim qdfSalesReps As DAO.QueryDef
Dim rstSalesReps As DAO.Recordset
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
Set qdfSalesReps = dbsNorthwind.CreateQueryDef("SalesRepQuery")
qdfSalesReps.SQL = "SELECT * FROM Employees WHERE Title = " & _
"'Sales Representative'"
Set rstSalesReps = qdfSalesReps.OpenRecordset()
' Call the function to add a constraint.
AddQueryFilter rstSalesReps
' Return database to original.
dbsNorthwind.QueryDefs.Delete "SalesRepQuery"
rstSalesReps.Close
qdfSalesReps.Close
dbsNorthwind.Close
Set rstSalesReps = Nothing
Set qdfSalesReps = Nothing
Set dbsNorthwind = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Sub AddQueryFilter(rstData As Recordset)
Dim qdfData As DAO.QueryDef
Dim strNewFilter As String
Dim strRightSQL As String
On Error GoTo ErrorHandler
Set qdfData = rstData.CopyQueryDef
' Try "LastName LIKE 'D*'".
strNewFilter = InputBox("Enter new criteria")
strRightSQL = Right(qdfData.SQL, 1)
' Strip characters from the end of the query,
' as needed.
Do While strRightSQL = " " Or strRightSQL = ";" Or _
strRightSQL = vbCR Or strRightSQL = vbLF
qdfData.SQL = Left(qdfData.SQL, Len(qdfData.SQL) - 1)
strRightSQL = Right(qdfData.SQL, 1)
Loop
qdfData.SQL = qdfData.SQL & " AND " & strNewFilter
rstData.Requery qdfData 'Requery the Recordset.
rstData.MoveLast 'Populate the Recordset.
' "Lastname LIKE 'D*'" should return 2 records.
MsgBox "Number of records found: " & rstData.RecordCount & "."
qdfData.Close
Set qdfData = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Remarque
Pour utiliser la méthode Requery , la propriété Restartable de l’objet Recordset doit avoir la valeur True. La propriété Restartable a toujours la valeur True lorsque le jeu d'enregistrements est créé à partir d'une requête autre qu'une requête analyse croisée dans une base de données Access. Vous ne pouvez pas redémarrer des requêtes SQL directe. Vous pouvez ou non redémarrer des requêtes sur des tables liées dans un autre format de base de données. Pour savoir si un objet Recordset peut réexécuter sa requête, vérifiez la propriété Restartable.
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.