在Access中,您可以在表之间设置一对多关系。
一个表中的 (+) 符号链接到第二个表中的许多行。
当您单击 (+) 号时,它会显示表 2 中与表 1 相关的所有行。
有没有办法用 SQL Server 作为数据存储和访问链接表做类似的事情?
我在 SQL Server 表中设置了数据,并希望使用 Access 2010 作为前端。
我不相信您可以让 Access 自动启用 ODBC 链接表的子数据表 (+) 功能。
它与本机 Access 表一起使用的方式是 SubdatasheetName 属性默认为 [Auto]。使用 [自动],Access 将查看定义的关系并选择相关表作为子数据表。
对于 SQL Server 链接表,Access 不会检查 SQL Server 中定义的关系并选择一个表用作子数据表。您可以在 Access 中再次定义 SQL Server 链接表之间的关系(尽管它不提供强制引用完整性),但它仍然不会应用子数据表。您可以从链接表的设计视图中手动设置 SubdatasheetName、LinkMasterFields 和 LinkChildFields 属性,但这仅持续到您关闭表为止。
我知道获得接近您想要的结果的唯一方法是使用 VBA 更改
TableDef
。在此示例中,Products 和 Categories 都是指向 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
最后,子数据表可能很有用,但它们带来了其他挑战。请参阅问题属性中的子数据表名称部分。
还有一种方法可以在 UI 中执行此操作:
就是这样。
亲爱的主,我很高兴找到这个并感谢您的意见。人们常说,在 Access 后端使用 MS SQL Server 并不算太糟糕,但这似乎需要从头开始构建/重做大量工作。我想我将在 Access 中构建所有内容,然后最后将其转换为 MS SQL 数据库,并且我遇到的任何不兼容的数据类型最终都会更改。