Freigeben über


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