Recordset.CopyQueryDef, méthode (DAO)
S’applique à : Access 2013, Office 2013
Renvoie un objet QueryDef qui est une copie de l’objet QueryDef utilisé pour créer l’objet Recordset représenté par l’espace réservé recordset (espaces de travail Microsoft Access uniquement). .
Syntaxe
expression . CopyQueryDef
expression Variable représentant un objet Recordset.
Valeur renvoyée
QueryDef
Remarques
Vous pouvez utiliser la méthode CopyQueryDef pour créer un nouvel objet QueryDef qui est un doublon de l'objet QueryDef ayant servi à créer l'objet Recordset.
Si aucun objet QueryDef n'a servi à créer cet objet Recordset, une erreur se produit. Vous devez d'abord ouvrir un objet Recordset par le biais de la méthode OpenRecordset avant d'utiliser la méthode CopyQueryDef.
Cette méthode s'avère utile pour créer un objet Recordset à partir d'un objet QueryDef, et transmettre cet objet Recordset à une fonction ; la fonction doit recréer l'équivalent SQL de la requête, par exemple, pour la modifier d'une certaine manière.
Exemple
Cet exemple de code montre comment utiliser la méthode CopyQueryDef pour créer une copie d'un objet QueryDef à partir d'un objet Recordset existant et comment modifier cette copie en ajoutant une clause à la propriété SQL. Lorsque vous créez un objet QueryDef permanent, il se peut que des espaces, des points-virgules ou des sauts de ligne soient ajoutés à la propriété SQL ; ces caractères supplémentaires doivent être supprimés pour pouvoir joindre de nouvelles clauses à l'instruction SQL.
Function CopyQueryNew(rstTemp As Recordset, _
strAdd As String) As QueryDef
Dim strSQL As String
Dim strRightSQL As String
Set CopyQueryNew = rstTemp.CopyQueryDef
With CopyQueryNew
' Strip extra characters.
strSQL = .SQL
strRightSQL = Right(strSQL, 1)
Do While strRightSQL = " " Or strRightSQL = ";" Or _
strRightSQL = Chr(10) Or strRightSQL = vbCr
strSQL = Left(strSQL, Len(strSQL) - 1)
strRightSQL = Right(strSQL, 1)
Loop
.SQL = strSQL & strAdd
End With
End Function
Cet exemple montre une utilisation possible de CopyQueryNew().
Sub CopyQueryDefX()
Dim dbsNorthwind As Database
Dim qdfEmployees As QueryDef
Dim rstEmployees As Recordset
Dim intCommand As Integer
Dim strOrderBy As String
Dim qdfCopy As QueryDef
Dim rstCopy As Recordset
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Set qdfEmployees = dbsNorthwind.CreateQueryDef( _
"NewQueryDef", "SELECT FirstName, LastName, " & _
"BirthDate FROM Employees")
Set rstEmployees = qdfEmployees.OpenRecordset( _
dbOpenForwardOnly)
Do While True
intCommand = Val(InputBox( _
"Choose field on which to order a new " & _
"Recordset:" & vbCr & "1 - FirstName" & vbCr & _
"2 - LastName" & vbCr & "3 - BirthDate" & vbCr & _
"[Cancel - exit]"))
Select Case intCommand
Case 1
strOrderBy = " ORDER BY FirstName"
Case 2
strOrderBy = " ORDER BY LastName"
Case 3
strOrderBy = " ORDER BY BirthDate"
Case Else
Exit Do
End Select
Set qdfCopy = CopyQueryNew(rstEmployees, strOrderBy)
Set rstCopy = qdfCopy.OpenRecordset(dbOpenSnapshot, _
dbForwardOnly)
With rstCopy
Do While Not .EOF
Debug.Print !LastName & ", " & !FirstName & _
" - " & !BirthDate
.MoveNext
Loop
.Close
End With
Exit Do
Loop
rstEmployees.Close
' Delete new QueryDef because this is a demonstration.
dbsNorthwind.QueryDefs.Delete qdfEmployees.Name
dbsNorthwind.Close
End Sub