将查询添加到子表单

时间:2012-08-07 10:19:19

标签: vba access-vba

我一直在寻找一段时间,但我在这里看不到问题:

Option Compare Database
Option Explicit

Private Sub cmd_Refresh_Click()

Dim sSQL_Select                     As String
Dim Qdb                             As Database
Dim Qry                             As QueryDef    

sSQL_Select = "SELECT * FROM T_TIME_SCHEDULE"

Set Qdb = CurrentDb
Set Qry = Qdb.CreateQueryDef("QTS", sSQL_Select)
DoCmd.OpenQuery "QTS", acViewNormal
Me.F_Child_Result.Form.RecordSource = "QTS"
Me.F_Child_Result.Requery

Qdb.QueryDefs.Delete ("QTS")
Set Qdb = Nothing

End Sub

这一行:

Me.F_Child_Result.Form.RecordSource = "QTS"

导致以下错误:
运行时错误'2467':您输入的表达式是指已关闭或不存在的对象。
应该正确构造语法,并仔细检查子表单的名称 Desipte,错误仍然存​​在。

1 个答案:

答案 0 :(得分:3)

不要将记录源设置为查询,只设置SQL字符串。

sSQL_Select = "SELECT * FROM T_TIME_SCHEDULE"

''Set Qdb = CurrentDb
''Set Qry = Qdb.CreateQueryDef("QTS", sSQL_Select)
''DoCmd.OpenQuery "QTS", acViewNormal
Me.F_Child_Result.Form.RecordSource = sSQL
''Me.F_Child_Result.Requery

无需重新查询,更改记录源时将重新获取表单。

请注意,即使您可以将记录源设置为查询(您不能),也不会引用它。

FROM Chat

问题似乎有两条混合线。需要的是一种将子表单控件的Source Object设置为查询的方法,而不是子表单控件包含的表单的Record Source

源对象可以像这样设置:

Me.F_Child_Result.SourceObject="Query." & sQueryName

如果源对象已设置为仅用于此表单的已保存查询的名称,则无需重置它,您只需修改查询的sql:

Set qdf = CurrentDB.QueryDefs("JunkQuery")
qdf.SQL = sSQL