【问题标题】:Textbox Controlling a Query Field控制查询字段的文本框
【发布时间】:2019-01-21 18:36:04
【问题描述】:

我必须管理各种雨水排放口。问题是我必须使用和维护各种名称。因此,当生成报告时,它们必须使用客户要求的命名约定。

首先我创建了一个包含以下字段的表: 排放口_ID 名称1 名称2 名称3 名称4 名称5

该表将来可能有更多名称,但现在我处理的最大名称是 5 个

然后我创建了一个表单作为设置表单,允许用户选择 name1 到 name5 来标识报告所需的当前名称。

这是我遇到问题的部分。 在查询中,我引入了排放口表,我可以选择 ID 和名称字段。但我只想激活与设置表单中的文本字段匹配的名称字段(信息存储在表中以供参考)。

我尝试过或查找过的任何方法都不起作用

【问题讨论】:

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


    【解决方案1】:

    您无法真正设计一个适用于 name1 到 name5 列的表单。

    Access 是一个数据库,而不是电子表格。因此,在处理数据时,您使用的是数据行,而不是数据列。

    因此,请制作一个包含您要选择的名称的表格。

    Outfall_ID |姓名。

    您的表格将有两列,如上所示。然后,您可以构建一个表单,并驱动一个基于上表的组合框(或列表框)。这将显示一个允许您选择名称的列表或组合框。

    在此表单的组合框(或列表框)下方,您可以使用一个按钮来启动您的报告。您可以按所选名称过滤报告,如下所示:

    DoCmd.OpenReport "rptOutfalls", acViewPreview, , "outfall_ID = " & Me.MyComboBox
    

    以上将按给定(选定的)outfall_ID 过滤报告。

    如果您需要根据您在组合框(或列表框)中选择的实际文本名称过滤报告,我们假设组合框同时显示 outfall_id 和名称。所以名称是组合框的第二列。

    如果我们要按所选名称过滤报告,那么 openreprot 命令将如下所示:

    DoCmd.OpenReport "rptOutfalls", acViewPreview, , "outfallName = '" & Me.MyComboBox.column(1) & "'"
    

    因此,上述报告现在将仅过滤到您在组合框中选择的名称。

    编辑

    编辑: SQL 无法将列转换为不同的列。您需要规范化数据,因此可以使用 SQL 完成此类更新。

    因此,您的表格必须如下所示:

    mytrans
    ID  Myset   SetID   TranslateTo
    1   Name1   1   A
    2   Name1   2   B
    3   Name1   3   C
    4   Name2   1   X
    5   Name2   2   Y
    6   Name2   3   X
    

    因此,您的组合框将基于此查询:

    select distinct MySet from myTrans
    

    您根据上述“翻译” ID 的 sql 将是

    Select ID, Field1, Field2, outfall_ID,
     (select TranslateTo from mytrans 
        where mytrans.SetID = outfall_id and myset = 'Name1’) as outfallText
     from theDataTable
    

    【讨论】:

    • @ Albert 您的建议在大多数情况下是有道理的,但问题来自于使用各种名称。我不需要组合框来显示各种名称。我需要一个在引用设置表单上的控件时切换表字段的查询。示例:Outfall ID: 1 2 3 Name1: A B C Name2: X Y Z 如果控件显示Name1,那么我想使用A B C,如果控件显示Name2,那么我想使用X Y Z 想法是改变控件然后让查询将更改拉入自身并更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多