MS Access:使用VBA查询重用/提供查询参数

时间:2011-01-08 00:29:14

标签: ms-access access-vba

我有两个非常复杂的查询,它们显示在同一个表单上,并使用该表单提供的多个参数。我想在VBA函数和/或其他表单中重用查询。因此,我有两个问题:

  1. 有没有办法编写SQL语句,以便查询动态确定从中读取参数的表单,而不必指定表单的名称?例如,某些东西沿着我!startDate,而不是Forms!myForm!startDate。

  2. 在将查询作为DAO记录集打开时,有没有办法为查询提供参数?

2 个答案:

答案 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参数来确定。