【问题标题】:Access: Bind Combobox to recordset but disallow alterations to recordset on change/update访问:将组合框绑定到记录集,但不允许在更改/更新时更改记录集
【发布时间】:2019-02-22 19:19:02
【问题描述】:

我遇到了一个关于 Access Comboboxes 的问题,这可能是一个糟糕的想法或者是对工具的不当使用。

假设我有一个显示“报告”元数据的表单(日常报告中常见的内容,如记者、项目、目标截止日期、预期总成本等),并带有连续正在报告的行项目的子表单(如人工成本、材料、管理费用等)

在后端我有 2 个表来表示这一点。 “元数据”表和“订单项”表。在尝试捕获报告的单个项目时,报告者可以随意命名项目,但是,在系统中,我们希望将该报告项目命名映射到我们的内部项目命名。

为了做到这一点,我有一些帮助表和一个映射表来创建这个链接。一个“内部订单项”表、一个“数据类型”表和一个“订单项映射器”表。

结构如下:
- 带有 ID、名称、Metadata_ID 和数据的“行项目”表(典型的 excel 格式)
- 带有 ID 的“元数据”表,以及所有报告通用的元数据
- 带有 ID 和名称的“内部订单项”表
- 带有 Internal_ID、LineItem_ID 和 DataType 的“行项目映射器”表
- 带有 ID 和名称的“DataType”表

接下来说说我遇到的问题。

我想在子表单中为每一行显示一个组合框,下拉列表将包含一个可以选择的可能内部名称列表。我认为通过使用未绑定的框我可以做到这一点,但发现每一行都会获得同一个框的副本(因此同时更改所有行的选择)。

然后我尝试使用 ControlSource 将框绑定到记录集,但这样做时它更改了 id 号(显然不行)。

然后我想将框绑定到映射表本身,但不知道如何将它耦合到记录集......

我想要做的是将此框绑定到记录集,而不允许它更改“列表项”表中的任何数据,因为此框旨在更改映射表。然后我可以使用 OnChange 事件来使用正确的数据填充或更新映射表。

是否可以创建这样的绑定(控件绑定到记录集,允许我获取 LineItem ID,但不能更改记录集,同时仍允许用户与之交互)?还是有更好的方法来解决这个问题?

【问题讨论】:

  • 组合框当然可以是“未绑定的”——没有 ControlSource。从列表中选择项目或在框中键入不应更改 RowSource 从中提取列表的表。如果是,则 ControlSource 设置为错误的字段。
  • 嘿,感谢您的评论!但我认为你误解了我的意思。即使更改了 Rowsource,我也不想更改 ControlSource。 IE。我想将 Combobox 绑定到该行并从 RowSource 中选择一些内容,但禁用 Access 所做的任何“自动更新”并自己处理数据...
  • 你是对的。不明白。如果组合框绑定到字段,则选择直接传递给表记录。如果组合框未绑定,则不会。因此,对于未绑定的组合框,在某些事件中使用条件代码来确定如何处理选择。
  • 正确,这正是我需要做的。但是,如果我可以指出我提到我在连续子表单中使用此未绑定组合框的部分,我发现它将框复制到每一行。所以我需要绑定盒子,不允许它改变ControlSource中的任何数据......
  • 是的,这是连续或数据表视图中未绑定控件的缺点。所有记录都将显示相同的信息。如果你绑定它,那么仍然在某些事件中使用代码来决定如何处理输入,也许形成 BeforeUpdate 事件来“验证”输入。

标签: ms-access combobox binding


【解决方案1】:

原来我只是对我的数据模型做了一些愚蠢的事情,这导致了我的麻烦。

完整的答案可以在这里找到:https://answers.microsoft.com/en-us/msoffice/forum/msoffice_access-msoffice_custom-mso_2013_release/bind-a-control-without-data-alteration-access-2013/51a98460-6e1a-425d-8f7b-eba5f2825ba9?tm=1552503037022&auth=1&page=2

但不足之处是我不正确地将所有 FK 放在一个表中,试图制作一种“映射”表。我已经更正了我的结构并让我的组合框按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多