Метод Recordset.CopyQueryDef (DAO)
Область применения: Access 2013, Office 2013
Возвращает объект QueryDef, который является копией QueryDef и используется для создания объекта Recordset, представленного заполнителем recordset (только для рабочие области Microsoft Access). .
Синтаксис
expression . CopyQueryDef
expression: переменная, представляющая объект Recordset.
Возвращаемое значение
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 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