我很擅长在Access中创建dbs,但我不是子表单的粉丝,我已经可以说了很多,它们对于一对多关系(一个客户,多个订单)很好但是当我只是想减少冗余并在表之间创建一对一的关系,我只在任何时候都需要来自另一个表的一个记录,子表单不再那么好。
我的例子:
我有2个表,1个用于公司(ID,公司名称,国家ID),1个用于国家(国家ID,国家名称)。为了消除国家/地区名称的重复,我使用国家/地区ID链接2个表格,只添加国家/地区的ID,而不是其名称。
当我为“公司”表创建一个表单时,我想要一个字段来说明公司所在的位置而不是子表单(因为我还没弄清楚如何隐藏它周围的框),所以实际上有一个字段那是连接到另一个表。
然后通过一对一连接,当选择记录时,表单将显示在公司所在的一个字段中。这可能吗?
额外:我的“国家/地区”表格中有2个国家/地区,英国和德国,但是我在这个表格中添加记录的新公司位于法国,我是否有可能进入法国进入该领域它会自动在法国的“国家/地区”表格中创建新记录,并将新记录的ID添加到“公司”表格中,并添加到位于法国的公司
答案 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