Поделиться через


Метод Recordset2.CopyQueryDef (DAO)

Область применения: Access 2013, Office 2013

Возвращает объект QueryDef, который является копией QueryDef и используется для создания объекта Recordset, представленного заполнителем recordset (только для рабочие области Microsoft Access). .

Синтаксис

expression . CopyQueryDef

Выражение Переменная, представляющая объект Recordset2 .

Возвращаемое значение

QueryDef

Примечания

Метод CopyQueryDef можно использовать для создания нового объекта QueryDef , который является дубликатом объекта QueryDef , используемого для создания набора записей.

Если параметр QueryDef не использовался для создания этого набора записей, возникает ошибка. Сначала необходимо открыть набор записей с помощью метода OpenRecordset , прежде чем использовать метод CopyQueryDef .

Этот метод удобен, когда вы создаете объект Recordset из QueryDef и передаете набор записей в функцию, и функция должна повторно создать эквивалент SQL запроса, например, чтобы каким-то образом изменить его.

Пример

В этом примере используется метод CopyQueryDef, чтобы создать копию объекта QueryDef из имеющегося объекта Recordset, а затем эта копия меняется путем добавления предложения к свойству SQL. При создании постоянного объекта QueryDef к свойству SQL можно добавлять пробелы, точки с запятой и символы перевода строки. Эти дополнительные символы необходимо удалить, прежде чем добавлять к инструкции 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 

В этом примере показаны возможные применения метода 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