我一直在寻找一段时间,但我在这里看不到问题:
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,错误仍然存在。
答案 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