MS Access 表单以更新多个表而无需子表单

Posted

技术标签:

【中文标题】MS Access 表单以更新多个表而无需子表单【英文标题】:MS Access form to update multiple tables without subforms 【发布时间】:2016-08-18 12:31:14 【问题描述】:

我对在 Access 中创建数据库很陌生,但我不喜欢子表单,我已经可以说很多了,它们对一对多关系(一个客户,多个订单)很好,但是当我只想减少冗余并在表之间创建一对一的关系,并且我只需要始终从另一个表中获取一条记录,子表单不再感觉那么好。

我的例子:

我有 2 个表格,1 个用于公司(ID、公司名称、国家 ID),1 个用于国家(国家 ID、国家名称)。为了消除国家名称的重复,我使用国家 ID 来链接 2 个表,并且只添加国家的 ID,而不是其名称。

当我为“公司”表创建一个表单时,我想要一个字段来说明该公司所在的位置,而不是一个子表单(因为我还没有弄清楚如何隐藏它周围的框),所以实际上只有一个字段连接到不同的表。

And then through the one to one connection, when a record is selected the form would show in one field where the company is located.这可能吗?

额外:我的“国家”表中有 2 个国家,英国和德国,但是我正在从该表格中添加记录的新公司位于法国,我是否有可能只是将法国输入该字段它会自动在“国家”表中为法国创建一条新记录,并将新记录的 ID 添加到“公司”表中,添加到位于法国的公司

【问题讨论】:

【参考方案1】:

您的表单和子表单似乎直接基于表格。尝试将您的主表单基于查询:

SELECT
    company.ID,
    company.CompanyName,
    company.CountryID,
    country.CountryName
FROM
    company
    INNER JOIN country ON
        company.CountryID = country.CountryID

这将消除对子表单的需要。

额外:您实际上可能希望在单独的表单上拥有“国家创建”功能,或者通过此主表单上的按钮调用。

使用国家/地区 ID 来强制用户从列表中选择标准国家/地区是一个非常好的主意。但是,如果您让他们在您试图防止他们输入错误的同一个框中任意输入新的,那么这项出色的工作可能会被撤消。

【讨论】:

【参考方案2】:

是的,这绝对是可能的。我这样做的方式是使用未绑定的表单,因此我控制所有 SQL 语句来告诉数据要做什么和去哪里。

由于您有 3 个字段被发送到“公司”表中的一行中,并且 2 个字段被发送到国家表中的一行中,其中 1 个字段处于关系中(我假设一对多),在表单上创建 4 个文本框(或任何其他控件)。控件将用于:ID(假设这是由用户输入而不是自动编号。如果是,请在下面评论),公司名称,国家 ID,国家名称。当您填写所有这些时,有一个带有Click 事件的按钮。在这里,您将有 2 个 SQL 语句来插入记录,每个表 1 个。

代码将如下所示:

Private Sub button_Click()

DoCmd.RunSQL "INSERT INTO companies VALUES ([ID].Value, [company name].Value, [country ID].Value)"
' The words in the [] are the names of your controls on the form
DoCmd.RunSQL "INSERT INTO country VALUES ([country ID].value, [country name].value)"

End Sub

【讨论】:

以上是关于MS Access 表单以更新多个表而无需子表单的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 子表单的多个分离条件

MS Access 使用绑定表单更新未绑定表单

MS Access:相关子表单的即时更新

MS Access 嵌套子表单链接到主(父)表单

如何在 ms access 中更改表字段的数据类型,而无需创建新表单来更新表?

在 MS Access 数据表子表单中导航和更新