2011-01-08 68 views
0

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

  1. 是否有写的SQL语句使得查询动态确定,从而读取其参数不必指定形式的名称形式的方法吗?例如,沿着我的一行!startDate,而不是Forms!myForm!startDate。

  2. 当打开DAO RecordSet时,有没有办法给查询提供参数?

+1

是,是............. – 2011-01-08 00:30:38

+1

哈哈!尽管我只是提出了是或不是的问题,但我确实希望得到的不仅仅是一个答案。 :) – Adam 2011-01-08 00:36:23

回答

3

在大多数情况下,李连杰(访问)是不是受到相同的注入问题,其他数据库的经验,所以它可能适合使用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) 
3

我几乎从来没有定义参数或存储对f的引用orm/report控件保存在QueryDefs中。对我而言,应该在运行时使用保存的QueryDef来提供这些内容。

通常,我在代码中编写我的SQL,而不是使用保存的QueryDefs。

另外,请记住,您可以在其OnOpen事件中设置表单的记录源,这意味着您可以使用那里的条件来决定您想要为特定目的进行的过滤。这可以根据外部窗体或使用DoCmd.OpenForm的OpenArgs参数来确定。