MS Access窗体来更新没有子窗体的多个表格

问题描述:

我在Access中创建数据库很新,但我不是子窗体的粉丝,我已经可以说很多了,他们很适合一对多的关系(一个客户,很多订单),但是当我只想减少冗余并在表和表之间建立一对一的关系时,只有在任何时候都需要来自另一个表的一条记录,那么子表单就不再那么好了。MS Access窗体来更新没有子窗体的多个表格

我的例子:

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

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

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

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

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

由于您有3个字段被发送到“公司”表中的一行中,并且2个字段被发送到国家/地区表中的一行中,其中1个字段处于关系中(我假设1对多) ,在你的表单上创建4个文本框(或任何其他控件)。这些控件将用于: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 

看来你的窗体和子窗体直接基于表。尝试以查询为基础的主窗体:

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

这将消除对子窗体的需要。

额外:您可能实际上想要在单独的窗体上使用“国家/地区创建”功能,或者通过此主窗体上的按钮按钮进行调用。

拥有强制用户从列表中选择标准国家的国家ID是一个非常好的主意。但是,如果你让他们任意输入新的在同一个盒子你试图阻止他们从薄雾中,好的工作可以取消。