Access 中显示的 SQL Server 关系

问题描述 投票:0回答:3

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

一个表中的 (+) 符号链接到第二个表中的许多行。

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

有没有办法用 SQL Server 作为数据存储和访问链接表做类似的事情?

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

sql-server ms-access foreign-keys relational-database linked-tables
3个回答
1
投票

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

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

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

我知道获得接近您想要的结果的唯一方法是使用 VBA 更改

TableDef
。在此示例中,ProductsCategories 都是指向 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

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


0
投票

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

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

就是这样。


0
投票

亲爱的主,我很高兴找到这个并感谢您的意见。人们常说,在 Access 后端使用 MS SQL Server 并不算太糟糕,但这似乎需要从头开始构建/重做大量工作。我想我将在 Access 中构建所有内容,然后最后将其转换为 MS SQL 数据库,并且我遇到的任何不兼容的数据类型最终都会更改。

© www.soinside.com 2019 - 2024. All rights reserved.