MS Access表单,用于更新没有子表单的多个表

时间:2016-08-18 12:31:14

标签: database forms ms-access

我很擅长在Access中创建dbs,但我不是子表单的粉丝,我已经可以说了很多,它们对于一对多关系(一个客户,多个订单)很好但是当我只是想减少冗余并在表之间创建一对一的关系,我只在任何时候都需要来自另一个表的一个记录,子表单不再那么好。

我的例子:

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

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

然后通过一对一连接,当选择记录时,表单将显示在公司所在的一个字段中。这可能吗?

额外:我的“国家/地区”表格中有2个国家/地区,英国和德国,但是我在这个表格中添加记录的新公司位于法国,我是否有可能进入法国进入该领域它会自动在法国的“国家/地区”表格中创建新记录,并将新记录的ID添加到“公司”表格中,并添加到位于法国的公司

2 个答案:

答案 0 :(得分:1)

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

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

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

额外:您实际上可能希望在单独的表单上使用“国家/地区创建”功能,或者通过此主表单上的按钮推送来调用。

拥有国家ID以强制用户从列表中选择标准国家/地区是一个非常好的主意。但是,如果您让他们在同一个框中任意输入新的内容,而您正试图阻止他们进行错误输入,那么这项优秀的工作可能会被取消。

答案 1 :(得分:0)

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

由于您在"公司"中有3个字段被发送到一行。表和2个字段被发送到countries表中的一行,其中1个字段处于关系中(我假设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