2

在 Access 中,您可以设置表之间的一对多关系。

然后在一个表中有一个 (+) 符号,它链接到第二个表中的许多行。

当您单击 (+) 符号时,它会显示表 2 中与表 1 相关的所有行。

无论如何,是否可以使用 SQL Server 作为数据存储和访问链接表做类似的事情?

我在 SQL Server 表中设置了数据,并希望使用 Access 2010 作为前端。

4

2 回答 2

1

我不相信您可以使 Access 自动启用 ODBC 链接表的子数据表 (+) 功能。

它与本机 Access 表一起使用的方式是SubdatasheetName属性默认为[Auto]。使用[Auto],Access 将查看定义的关系并选择相关表作为子数据表。

对于 SQL Server 链接表,Access 不会检查 SQL Server 中定义的关系并选择要用作子数据表的表。您可以在 Access 中再次定义 SQL Server 链接表之间的关系(尽管它不提供强制参照完整性),但它仍然不会应用子数据表。您可以从链接表的设计视图中手动设置SubdatasheetNameLinkMasterFieldsLinkChildFields属性,但这只会持续到您关闭表。

我知道得到接近你想要的东西的唯一方法是使用 VBA 来改变TableDef. 在此示例中,产品类别都是指向 SQL Server 表的 ODBC 链接。

Dim db As DAO.database
Dim tdf As DAO.TableDef
Dim prp As DAO.Property

Set db = CurrentDb
Set tdf = db.TableDefs("Products")

Set prp = tdf.CreateProperty("SubdatasheetName", dbText, "Categories")
tdf.Properties.Append prp

Set prp = tdf.CreateProperty("LinkMasterFields", dbText, "RefID")
tdf.Properties.Append prp

Set prp = tdf.CreateProperty("LinkChildFields", dbText, "CategoryID")
tdf.Properties.Append prp

Set prp = Nothing
Set tdf = Nothing
Set db = Nothing

最后,子数据表可能很有用,但它们带来了其他挑战。请参阅问题属性中的SubdatasheetName部分。

于 2013-02-11T18:04:04.153 回答
0

还有一种方法可以在 UI 中执行此操作:

  • 打开主表(VBA 示例中的表 Products)的表定义(设计视图)。忽略警告。
  • 在表格的设计视图中打开属性窗口
  • 在属性Sub Datasheet中输入一个文本 Table.Categories(一个子数据表表)
  • 链接字段(LinkMasterField 和 LinkChildFields)应使用现有关系自动填充。如果没有,填写关系的列名,即CategoryID(主键+外键)
  • 关闭表格并保存设计更改

这就对了。

于 2014-06-24T08:52:57.963 回答