我是Access VBA编程的新手。这是在Access中创建表单时遇到的一个问题。我需要将表单的记录源链接到我已经定义的查询对象。假设我的查询中有field1,field2,field3等。我想介绍的最终产品是
我提出了两种设计方法,但由于缺乏VBA编程经验,我现在无法完成其中任何一项......
设计1:
我有一个带有标准输入文本框的主窗体。此主窗体未链接到任何数据源。然后我在底部有一个子表单,通过读取主表单中的文本框值来动态设置数据源。
设计2:
我有一个表单,但我将所有条件框都移到了表单标题部分。此表单具有来自查询对象的记录源。详细信息部分用于显示数据表,其中表单的过滤器属性设置为用户条件。
我无法进行设计1,因为我不知道如何动态设置子表单的数据源。我也无法进行设计2,因为即使我在设计视图中检查了表单页眉/页脚已启用,我的表单标题部分也没有出现。
我可以做些什么来实现我的表单设计?任何替代设计建议?
我正在使用Access 2003进行此开发,但我希望将来我的代码可以升级到Access 2010.
提前感谢您的建议。
答案 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。我认为这个选项最清楚