首页 文章

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

提问于
浏览
2

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

  • 在表单的顶部,有几个文本框供用户输入field1,field2,field3 ...的过滤条件 .
    单击按钮

  • ,数据表显示在表单底部,并应用了过滤条件

  • 除了查询中的现有字段之外,我还需要在数据表的末尾添加一个基于field1和field2的某些计算结果的自定义列 . 可以显示一些文本,例如"Late","Early"或"On Time"

我提出了两种设计方法,但由于缺乏VBA编程经验,我现在无法完成其中任何一项...

Design 1:

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

Design 2:

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

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

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

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

提前感谢您的建议 .

1 回答

  • 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分配给表单数据源 .

    Design1

    下面的代码以主要形式出现,就在上面的旁边:

    SubFormControlName.Form.RecordSource = sql
    

    Design2

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

    Me.recourdsource = sql
    

    第三点:您可以使用构建计算字段

    Iif(fieldA<5,"Early",Iif(fieldA>10,"Late","OnTime"))
    

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

相关问题