在 Access 中查找链接 SQL 视图的唯一“伪”索引

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

我有一个 Access 数据库,其中有许多链接表链接到 SQL Server 数据库中的视图。当您刷新视图的链接时,Access 会要求包含唯一值的字段,以便构建唯一的 ID 索引。

我的问题是,一旦建立了链接,是否可以看到哪些字段被指定为唯一索引?我看不到每个链接表的属性中的任何内容,也看不到设计视图中索引中的任何内容。

一如既往地感谢您的阅读和任何帮助,

sql-server ms-access uniqueidentifier linked-tables
1个回答
0
投票

你不仅可以获得这些信息,而且理论上,如果你编写自己的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
© www.soinside.com 2019 - 2024. All rights reserved.