使用动态SQL作为记录源设计Access窗体

时间:2014-01-08 07:20:03

标签: vba ms-access access-vba ms-access-2010 ms-access-2003

我是Access VBA编程的新手。这是在Access中创建表单时遇到的一个问题。我需要将表单的记录源链接到我已经定义的查询对象。假设我的查询中有field1,field2,field3等。我想介绍的最终产品是

  1. 在表单顶部,有几个文本框供用户输入field1,field2,field3 ...和
  2. 的过滤条件
  3. 单击按钮,数据表显示在表单底部并应用了过滤条件
  4. 除了查询中的现有字段外,我还需要在数据表的末尾添加一个基于field1和field2的某些计算结果的自定义列。可以显示一些文本,例如“Late”,“Early”或“On Time”
  5. 我提出了两种设计方法,但由于缺乏VBA编程经验,我现在无法完成其中任何一项......

    设计1:

    我有一个带有标准输入文本框的主窗体。此主窗体未链接到任何数据源。然后我在底部有一个子表单,通过读取主表单中的文本框值来动态设置数据源。

    设计2:

    我有一个表单,但我将所有条件框都移到了表单标题部分。此表单具有来自查询对象的记录源。详细信息部分用于显示数据表,其中表单的过滤器属性设置为用户条件。

    我无法进行设计1,因为我不知道如何动态设置子表单的数据源。我也无法进行设计2,因为即使我在设计视图中检查了表单页眉/页脚已启用,我的表单标题部分也没有出现。

    我可以做些什么来实现我的表单设计?任何替代设计建议?

    我正在使用Access 2003进行此开发,但我希望将来我的代码可以升级到Access 2010.

    提前感谢您的建议。

1 个答案:

答案 0 :(得分:2)

对于这两种设计,您应该动态构建数据源,如下所示:

sql = "SELECT * FROM MyTableOrQuery WHERE 1=1"
If Not IsNull(textBox1) Then
  sql = sql & " And Field1 = '" & textBox1 & "'"
End If
If Not IsNull(textBox2) Then
  sql = sql & " And Field2 = '" & textBox2 & "'"
End If

最后,将sql分配给表单数据源。

<强>设计1

以下代码采用主要形式,紧挨着上述代码:

SubFormControlName.Form.RecordSource = sql

<强>设计2

要显示标题部分中的控件,您需要将属性DefaultView设置为运行表单(我不知道extact翻译,我使用西班牙语访问Access) 在这种情况下,数据源将分配给主窗体

Me.recourdsource = sql

第三点: 您可以使用

构建计算字段
Iif(fieldA<5,"Early",Iif(fieldA>10,"Late","OnTime"))

或者您可以使用conditional formatting。我认为这个选项最清楚