2012-04-04 53 views
2

我有一个绑定的窗体。表单的数据源是一个带参数的查询。 可以在表单加载之前在vba中设置参数吗? 为参数的弹出式连form_open事件之前弹出:/可能在表单加载之前设置vba中绑定查询的参数?

我所知道的替代品..建立自己的查询字符串带有参数,或操纵querydefs的SQL。但我不喜欢他们。

此刻我在设计时使用未绑定的形式,并在运行时将它们绑定到parameterqueries。但是在设计时使用未绑定的表单并不方便。

任何想法?

问候

EGI

+0

您可以将参数设置为隐藏窗体上控件的值吗? – Fionnuala 2012-04-04 14:58:41

+0

我不喜欢隐藏的形式; D ..我喜欢与代码工作。 – Egi 2012-04-04 14:59:57

+0

所以..你不想构建一个sql字符串,你不想改变查询def,并且你不想要一个隐藏的表单。它没有留下很多空间,是吗?我想你可以使用ADO,但这会让你的生活更加复杂。 – Fionnuala 2012-04-04 15:01:58

回答

4

你说:

此刻我在设计时使用未绑定的形式,并在运行时将它们绑定到parameterqueries。 ,但在设计时间有未绑定的表单不太方便。

一个替代方案是使用参数查询在运行时使用一个“虚拟”记录源,让你在设计时绑定的形式,但还是更新记录源。

伪查询的一个例子是这样的:

SELECT 1 AS EmployeeID, 'John' AS FirstName, 'Doe' AS LastName, #1/1/1980# AS DoB 

这将填充字段列表框领域EmployeeIDFirstNameLastNameDoB。显然你会希望你的虚拟查询字段名称反映字段名称在运行时的内容。

这也将避免参数弹出窗口显示在加载时的问题。

+0

我以前做过这件事,它运作良好。只需更改数据源,然后形成负载 – 2012-04-04 23:19:20

+0

mmmh不坏..也许有人想出另一个想法。如果不是,我会接受这个答案。 我的希望是有一个解决方案没有额外的开销,像更多的querydefs,sqlstrings或其他额外的。只有一个表单,一个querydef和一个小vba覆盖每个条件:) – Egi 2012-04-05 00:00:24

0

其实,这里的基本解决方案是简单地删除了参数,不改变使用的SQL。访问表单有一个where子句。他们旨在解决这个问题。这意味着你不需要带参数的查询,也不需要修改表单或报表sql。

只需在打开表单时传递where子句即可。

所以建立一个查询字符串的替代品不是必需的,也不需要有操纵一个QueryDef的SQL的替代品。而且不需要修改表单数据源的替代方案。

,并使用从查询中删除参数,那么你可以自由地使用查询的窗体,报表,出口程序和各种用途。

+0

正如我在上面的评论中提到的,我不能使用DoCmd.OpenForm,因为我使用自己的事件。我想自定义事件不是基本解决方案的一部分。 – Egi 2012-04-05 09:34:53

+0

够公平的。您可以简单地启动表单并在窗体的属性中自定义。 myForm.MyWhere =“InvoiceNumber =”&lngIngInvoiceNum 因此,上面将设置窗体datasource + where子句。因此,您将表单的数据源设置为ID为0的SQL – 2012-04-05 15:00:43