我有一个 Access 数据库,其中有许多链接表链接到 SQL Server 数据库中的视图。当您刷新视图的链接时,Access 会要求包含唯一值的字段,以便构建唯一的 ID 索引。
我的问题是,一旦建立了链接,是否可以看到哪些字段被指定为唯一索引?我看不到每个链接表的属性中的任何内容,也看不到设计视图中索引中的任何内容。
一如既往地感谢您的阅读和任何帮助,
你不仅可以获得这些信息,而且理论上,如果你编写自己的VBA重新链接代码,那么当你重新链接到不同的后端(SQL服务器)时,你就会丢失PK(主要)的设置键值)运行时选择的列。
换句话说,虽然您可以使用代码(或 Access UI)将表重新刷新/重新链接到本示例中的 SQL Server“视图”? Access 将记住 PK 值的设置,但当您更改或指向不同的服务器时则不会。
因此,上述信息非常重要,因为作为开发人员,我们经常会对生产数据库进行 SQL 备份,并恢复到 SQL Express 的本地副本,从而使用它来“测试”和开发我们的软件。
当一切顺利时,那么在部署之前,我们将:
将我们的前端链接到实时生产数据库。然后我们将 accDB 编译为 accDE,然后将我们软件的新版本分发(安装)到每台台式计算机。
那么,要获取/查看/查找链接时“选择”的列吗?
您可以使用此代码:
Function ViewPK(strTable As String) As String
Dim db As DAO.Database
Dim ix As DAO.Index
Set db = CurrentDb
For Each ix In db.TableDefs(strTable).Indexes
If ix.Primary = True Then
ViewPK = ix.Fields
Exit For
End If
Next
End Function
请注意,列返回为字段名称(带有“+”前缀),然后每列由“;”分隔。
因此,如果您选择了 id,然后选择了名字,那么上面的内容将会返回
+ID;+FirstName
所以,理论上,要得到/看到,列出以上内容,然后
Sub Test1()
Dim sResult As String
Dim vFields As Variant
Dim vF As Variant
sResult = ViewPK("dbo_FightersV")
vFields = Split(sResult, ";")
For Each vF In vFields
Debug.Print Replace(vF, "+", "")
Next
End Sub