Recordset2.CopyQueryDef-Methode (DAO)
Gilt für: Access 2013, Office 2013
Gibt ein QueryDef-Objekt zurück, das eine Kopie des QueryDef-Objekts ist, welches zum Erstellen des Recordset-Objekts verwendet wurde, das durch den recordset-Platzhalter dargestellt wird (gilt nur für Microsoft Access-Arbeitsbereiche). .
Syntax
Ausdruck . CopyQueryDef
Ausdruck Eine Variable, die ein Recordset2-Objekt darstellt.
Rückgabewert
QueryDef
Bemerkungen
Mithilfe der CopyQueryDef-Methode können Sie ein neues QueryDef-Objekt erstellen, welches ein Duplikat des QueryDef-Objekts darstellt, das zum Erstellen des Recordset-Objekts dient.
Wurde zum Erstellen dieses Recordset-Objekts kein QueryDef-Objekt verwendet, tritt ein Fehler auf. Sie müssen zuerst ein Recordset-Objekt mithilfe der OpenRecordset-Methode öffnen, bevor Sie die CopyQueryDef-Methode verwenden.
Diese Methode ist hilfreich, wenn Sie ein Recordset-Objekt aus einem QueryDef-Objekt erstellen und das Recordset-Objekt an eine Funktion übergeben, die die SQL-Entsprechung der Abfrage erneut erstellen muss, beispielsweise um sie zu ändern.
Beispiel
In diesem Beispiel wird die CopyQueryDef-Methode verwendet, um eine Kopie eines QueryDef-Objekts aus einem vorhandenen Recordset zu erstellen, und die Kopie wird geändert, indem der SQL-Eigenschaft eine -Klausel hinzugefügt wird. Wenn Sie eine permanente QueryDef erstellen, können Leerzeichen, Semikolons oder Zeilenvorschubs zur SQL-Eigenschaft hinzugefügt werden. Diese zusätzlichen Zeichen müssen entfernt werden, bevor neue Klauseln an die SQL-Anweisung angefügt werden können.
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
Dieses Beispiel zeigt eine mögliche Verwendung von CopyQueryNew().
Sub CopyQueryDefX()
Dim dbsNorthwind As Database
Dim qdfEmployees As QueryDef
Dim rstEmployees As Recordset2
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