【发布时间】:2014-06-17 21:26:06
【问题描述】:
我有以下函数来返回结果数据集:
Function Dynamic_Connection_SQL(ByVal SQL As String)
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;Driver=SQL Server;Server=XXXX;DATABASE=XX;Trusted_Connection=Yes;"
qdf.SQL = SQL
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset
rst.Close
Set rst = Nothing
Set qdf = Nothing
End Function
在 ParentForm 中,我有一个命令按钮,其 onClick 事件的代码如下:
Private Sub Command0_Click()
Dim strSQL As String
strSQL = "SELECT ID, EmployeeID, EmployeeName " & _
"FROM XYZ " & _
"ORDER BY EmployeeName;"
Dynamic_Connection_SQL (strSQL)
Me.ChildSubForm.Form.RecordSource = Dynamic_Connection_SQL(strSQL)
End Sub
我在按钮下有一个名为 ChildForm 的子表单。
我的目标是“当用户单击命令按钮时,查询被执行,结果数据集显示在 ChildForm 中”。
我被困在这一点上,不知道如何进一步。如果我执行此代码并单击按钮,则会收到错误运行时错误 2467。您输入的表达式引用了此行上已关闭或不存在的对象:
Me.ChildSubForm.Form.RecordSource = Dynamic_Connection_SQL(strSQL)
更新:
我已将代码更新为:
Function Dynamic_Connection_SQL(ByVal SQL As String) As DAO.Recordset
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;Driver=SQL Server;Server=xxxx;DATABASE=xx;Trusted_Connection=Yes;"
qdf.SQL = SQL
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset
Set Dynamic_Connection_SQL = rst
End Function
还有
Private Sub Command0_Click()
Dim strSQL As String
Dim intCounter As Integer
Dim rstRet As DAO.Recordset
strSQL = "SELECT ID, ClientID, SDP_CategorySK, EmployeeID, RollupToEmployeeID, Allocation " & _
"FROM ShiftCurrentStaffing " & _
"ORDER BY EmployeeID;"
Set rstRet = Dynamic_Connection_SQL(strSQL)
With rstRet
Do While Not rstRet.EOF
Debug.Print ![ID] & " " & ![EmployeeID] & ", (" & ![EmployeeName] & ")"
MsgBox ![ID] & " "
.MoveNext
Loop
End With
Me.ChildSubForm.Form.Recordset = rstRet.OpenRecordset
Me.Requery
rstRet.Close
Set rstRet = Nothing
End Sub
消息框正确显示了 ID..所以上面的代码正在运行..现在问题是我仍然收到错误 运行时错误 2467。您输入的表达式指的是关闭的对象或此行不存在:
Me.ChildSubForm.Form.Recordset = rstRet.OpenRecordset
【问题讨论】:
-
在该行设置断点并尝试检查 ChildSubForm 和 ChildSubForm.Form 的值。还有你为什么叫ooenrecordse? = rstRet 不应该足够吗?
-
我同意康拉德的观点。你不能把有问题的行改成
Me.ChildSubForm.Form.Recordset = rstRet吗?您不必重新打开它即可将其绑定到表单。