Recordset2.CopyQueryDef 方法 (DAO)

适用于:Access 2013、Office 2013

返回一个 QueryDef 对象,该对象是 QueryDef 的副本,用于创建由记录集占位符表示的 Recordset 对象(仅适用于 Microsoft Access 工作区)。 .

语法

表达式 。CopyQueryDef

表达 一个代表 Recordset2 对象的变量。

返回值

QueryDef

说明

可以使用 CopyQueryDef 方法创建一个新的 QueryDef,该对象是用于创建 RecordsetQueryDef 的副本。

如果没有使用 QueryDef 创建此 Recordset,将会发生错误。 使用 CopyQueryDef 方法之前,必须首先使用 OpenRecordset 方法打开 Recordset

如果从 QueryDef 创建了一个 Recordset 对象,然后将 Recordset 传递给了一个函数,则使用此方法十分有用,函数必须重新创建查询的 SQL 等效项,例如,以某种方式对它进行修改。

示例

以下示例使用 CopyQueryDef 方法从现有的 Recordset 创建 QueryDef 的副本,然后通过向 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