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是一个非常好的主意。但是,如果你也让他们任意输入新的在同一个盒子你试图阻止他们从薄雾中,好的工作可以取消。