Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use el método Requery en un objeto Recordset de tipo dynaset o snapshot cuando quiera volver a ejecutar la consulta subyacente después de cambiar un parámetro. Esto resulta más adecuado que abrir un nuevo objeto Recordset, y se ejecuta más rápidamente.
En el ejemplo de código siguiente se crea un objeto Recordset y se pasa a una función que usa el método CopyQueryDef para extraer la cadena SQL equivalente. A continuación, se le solicita al usuario que agregue una cláusula de restricción adicional a la consulta. El código utiliza el método Requery para ejecutar la consulta modificada.
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
Nota:
Para usar el método Requery , la propiedad Restartable del objeto Recordset debe establecerse en True. La propiedad Restartable siempre está establecida en True cuando se crea el objeto Recordset a partir de una consulta que no sea una consulta de tabla de referencias cruzadas frente a tablas de una base de datos de Access. No es posible reiniciar las consultas SQL de paso a través. Es posible que no pueda reiniciar las consultas frente a tablas vinculadas en otro formato de base de datos. Para determinar si un objeto Recordset puede volver a ejecutar su consulta, compruebe la propiedad Restartable.
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.