Microsoft Access - 组合框 - 无法添加记录,表的连接键不在记录集中

时间:2014-07-28 20:00:44

标签: sql ms-access ms-access-2010

无论我尝试学习多少教程,指南或示例;我似乎无法弄清楚如何使我的工作。就它而言,它几乎就像是一次打击和错过。我让它在某些形式上工作,但我似乎无法让它在其他形式上工作。有一个让组合框工作的技巧;我失踪了?!

例如以我的供应商形式。

frm_vendor

   tbl_vendor  ->      tbl_address    ->     tbl_addressType
PK vendorID         PK addressID          PK addressTypeID  
FK addressID        FK addressTypeID

我能够创建一个组合框,允许您选择addressTypeID< - 没问题

control source = addressTypeID

row source =SELECT [tbl_addressType].[addressTypeID], [tbl_addressType].[addressType] FROM tbl_addressType;

row source type = Query/Table

bound to column = 1

limit to list = 1

not editable

但是在这个新形式上,我无法让它发挥作用。

control source = addressTypeID似乎无效并给我一个警告。

从查询创建表单时。我是否应该在此查询中包含每个PK / FK,即使我认为我不会显示它,所以表单可以理解链接?

3 个答案:

答案 0 :(得分:1)

组合框的RowSource确定数据来自何处以使用值填充列表,此列表可以来自数据库中的任何位置。

ControlSource是将组合框选定值映射到表单绑定的查询的位,即ControlSource中的名称需要是表单的RecordSource中存在的字段。

因此,在新表单中,您需要确保基于表单的查询有一个名为addressTypeID的字段。

答案 1 :(得分:1)

基本上是的,如果您需要通过组合框显示数据,则需要将该组合框绑定到查询中的某些数据,这样当表单在特定记录上打开时,它可以设置组合框的值(此处为addressTypeID),它会在另一个表格中显示您想要的值(在本例中为tbl_addressType.addressType)。

在特定的情况下,你想要实现的目标实际上并不是很清楚,这可能是你无法得到你想要的东西的原因之一:如果你不能完全定义问题,那么你可以'找到解决方案。

你需要准确展示什么? 您列出了3个具有相关信息的不同表格,但不清楚tbl_addressType在此中的作用是什么。 也许如果你有一个表格截图可能有帮助吗?

关于您的数据库命名约定的一点:我认为您的PK和FK被命名为相同的事实是混乱的一部分。 如果你采用这样的东西,它可能会让事情变得更清楚:

Vendor       ->   Address          ->   AddressType
PK ID             PK ID                 PK ID
FK AddressID      FK AddressTypeID
.. VendorName     .. AddressTitle

所有主键都命名为ID。外键遵循惯例ForeignTableName+ID 这使得关系明确无误。

现在,您的Vendor表绑定到表单:

 frmVendor.RecordSource = SELECT ID, AddressID, VendorName FROM Vendor

现在,假设我们要显示供应商的AddressTitle并让用户通过从组合框中选择供应商的地址,将供应商的地址更改为另一个:将组合框添加到frmVendor,命名为cbAddress

cbAddress.ControlSource = AddressID
cbAddress.RowSource     = SELECT ID, AddressTitle FROM Address
cbAddress.RowSourceType = Table/Query
cbAddress.BoundColumn   = 1      ' Address.ID is bound to Vendor.AddressID
cbAddress.ColumnCount   = 2      ' Two columns: ID and AddressTitle
cbAddress.ColumnWidths  = 0;3    ' Width 0 for the ID column will hide it

你已经确定了。

当您的表单显示供应商记录时,组合框也会显示相应的地址'标题 如果您的frmVendor.RecordsetTypeDynaset,那么如果用户从组合框中选择了另一个地址,则Vendor.AddressID将更新为所选的Address.ID

现在,我仍然不知道你想用AddressType表做什么。

答案 2 :(得分:-1)

我同意@Rikalous

  

您需要确保基于表单的查询有一个名为addressTypeID的字段

希望此链接可以提供帮助: Microsoft Access cannot add records join key of table not in recordset