我有两个非常复杂的查询,它们显示在同一个表单上,并使用该表单提供的多个参数。我想在VBA函数和/或其他表单中重用查询。因此,我有两个问题:
有没有办法编写SQL语句,以便查询动态确定从中读取参数的表单,而不必指定表单的名称?例如,某些东西沿着我!startDate,而不是Forms!myForm!startDate。
在将查询作为DAO记录集打开时,有没有办法为查询提供参数?
答案 0 :(得分:3)
在大多数情况下,Jet(Access)不会遇到与其他数据库相同的注入问题,因此它可能适合使用VBA编写SQL并使用新的sql更新查询,或者设置表单的记录源。
非常粗略:
sSQL = "SELECT f1, f2 FROM tbl WHERE f3 = '" & Me.txt3 & "'"
CurrentDB.QueryDefs("aquery").SQL = sSQL
或者,您可以使用参数:
查询:
PARAMETERS txtCompany Text(150);
SELECT <...>
WHERE Company = txtCompany
代码:
Set qdf = db.QueryDefs("QueryName")
qdf.Parameters!txtCompany = Trim(frm!txtCompany)
答案 1 :(得分:3)
我几乎从不在已保存的QueryDefs中定义参数或存储对表单/报表控件的引用。对我来说,那些应该在运行时提供,你使用保存的QueryDef。
通常,我在代码中动态编写SQL,而不是使用保存的QueryDefs。
另外,请记住,您可以在其OnOpen事件中设置表单的Recordsource,这意味着您可以使用其中的条件来决定您为特定目的所需的过滤。这可以基于外部表单或使用DoCmd.OpenForm的OpenArgs参数来确定。