【发布时间】:2017-10-25 17:04:29
【问题描述】:
我正在尝试更改子表单的记录集以显示查询结果
所以我有一个字符串查询:
sQueryCurrencyRate = "SELECT * FROM Table.Mytable WHERE As_Of_Date =" & Format(dateField.value, "M/d/yyyy")
sQueryCurrencyUsDollar = "SELECT * FROM Table.Mytable WHERE As_Of_Date =" & Format(dateField.value, "M/d/yyyy")
所以当我写这个的时候,子表单会显示一个没有错误的结果:
Me.subformName.Form.RecordsourceSourceObject = "Table.tableName"
但是当我尝试以下所有方法时,我总是收到错误:
Forms!formName.subformName.Form.RecordSource= sQueryCurrencyRate
我也试过了:
Me.subFormName.Form.RecordsourceSourceObject= sQueryCurrencyRate
还有,
Me.subFormName.RecordsourceSourceObject= sQueryCurrencyRate
无论我做什么,我总是会收到此错误消息:
您输入的表达式引用了一个关闭的对象或 不存在
我做错了什么?以及如何在子表单记录源中正确显示查询结果?
P.S: sql 查询语法很好,因为我之前用过:
Set db = CurrentDb
Set rs = db.OpenRecordset(sQueryCurrencyRate)
我没有收到错误,所以问题是如何将子表单结果绑定到查询
编辑:
我调用代码的方式如下:
Function detectSelectedQuery(sTypeDonnee As String)
sQueryCurrencyRate = "SELECT * FROM Table.Mytable WHERE As_Of_Date = ' " & Format(dateField.value, "M/d/yyyy") &"'"
Me![Child8].Form.RecordSource = sQueryCurrencyRate
end function
然后当组合框改变时,我调用函数:
Private Sub Combo_descriptionQueries_Change()
detectSelectedQuery (Combo_descriptionQueries.Value)
End Sub
【问题讨论】:
-
@ErikvonAsmuth 我也试过简单地做 'me.subformName.Form.RecordSource= sQueryCurrencyRate' 和 'me.subformName.RecordSource= sQueryCurrencyRate' 没有任何成功,这很奇怪
-
你在哪里调用这个代码?在主窗体上?
-
@ErikvonAsmuth 我已经声明了一个名为 Execute Query 的函数,在它内部,我正在调用代码
-
@Mat'sMug 整个
RecordSetObject部分是错误的,他打算设置RecordSource,这是表单使用的字符串SQL 语句(也有RecordSet属性,但是除非您想使用 ADO 记录集作为记录源,否则不应更改) -
@ErikvonAsmuth 我会用四根手指和一条腿换取正确参数化的 ADODB 记录集/查询,而不是像这样的字符串连接、乞求 SQL 注入
WHERE子句。当然,它使得到有效的东西变得“容易”,但在很多层面上都是完全错误的。例如,UserForms and their default instance 也是如此。太多东西在 VBA 中被简化了,简直太疯狂了。