Ms access 在Access 2003中编辑链接表信息

Ms access 在Access 2003中编辑链接表信息,ms-access,odbc,Ms Access,Odbc,我有一个Access 2003数据库,其中的表链接到SQL Server 2005数据库。最近更新了用于在Access和SQL Server之间创建ODBC连接的用户信息(密码) 当我打开Access数据库并尝试编辑链接表信息时,我就可以打开这些表并查看我的数据。但是,当我关闭Access并重新打开Access数据库时,密码信息似乎已经反射回来,我得到了一个ODBC连接错误 有人知道我做错了什么吗 作为后续,我们似乎有十几个Access数据库,其中有许多链接表,所有这些都需要此更新。这是更新此信

我有一个Access 2003数据库,其中的表链接到SQL Server 2005数据库。最近更新了用于在Access和SQL Server之间创建ODBC连接的用户信息(密码)

当我打开Access数据库并尝试编辑链接表信息时,我就可以打开这些表并查看我的数据。但是,当我关闭Access并重新打开Access数据库时,密码信息似乎已经反射回来,我得到了一个ODBC连接错误

有人知道我做错了什么吗


作为后续,我们似乎有十几个Access数据库,其中有许多链接表,所有这些都需要此更新。这是更新此信息的最佳方式吗?链接表似乎是使用不同的机器创建的,因为ODBC连接中指定的工作站ID不同

编写一个例程,从TableDef更新Connect属性,并使用RefreshLink保存更改。

链接表管理器(LTM)的问题是,当您将表链接到SQL视图时。在这种情况下,LTM将重新链接“表”,而不重新为它们分配适当的PK,并且它们将变得不可更新。 我已经写了一些代码,我用VBE开始,这是一个快速和肮脏的事情,但你肯定可以适应,如果你需要它。 有两个sub,一个用于表,另一个用于passthru查询

Option Compare Database
option explicit

Const kOld = "remote.g"  'string to identify old server
'new server odbc string
Const kConnLux = "ODBC;DRIVER=SQL Server Native Client 10.0;SERVER=xxxx;UID=yyyy;PWD=zzzz;"

Sub UpdateTables()
    Dim db As Database, td As TableDef
    Dim hasIndex As Boolean, strSql As String

    Set db = CurrentDb
    For Each td In db.TableDefs
        If InStr(1, td.Connect, kOld) > 0 Then  'lien vers CE serveur ?
            If td.Name Like "dbo_vw*" And td.Indexes.count = 1 Then 'table = vue attachee --> pbl de clef primaire
                strSql = "CREATE INDEX " & td.Indexes(0).Name & " ON [" & td.Name & "](" & td.Indexes(0).Fields & ")"
                ' convert field list from (+fld1;+fld2) to (fld1,fld2)
                strSql = Replace(strSql, "+", "")
                strSql = Replace(strSql, ";", ",")
                hasIndex = True
            Else
                hasIndex = False
            End If
            td.Connect = kConnLux
            td.RefreshLink
            Debug.Print td.Name
            If hasIndex And td.Indexes.count = 0 Then
                ' if index now removed then re-create it
                CurrentDb.Execute strSql
            End If
        End If
    Next td
    Debug.Print "Done"
End Sub

Sub UpdateQueries()
    Dim db As Database
    Dim td As QueryDef
    Set db = CurrentDb
    For Each td In db.QueryDefs
        If InStr(1, td.Connect, kOld) > 0 Then
            td.Connect = kConnLux
            Debug.Print td.Name, td.Connect
        End If
    Next td
End Sub

你看过链接表管理器了吗?应该有一个“保存密码”复选框。如果不可用,请参阅@Reemou,这是一个好主意,但链接到视图的链接表有问题。如果表不多,请删除它们,并在创建正确的DSN后重新连接它们。使用SQL Server身份验证而不是Windows身份验证有何原因?在这方面,使用后者要容易得多--您的Access应用程序将不再需要关心用户身份验证问题。通常,对于ODBC链接表,删除并重新创建链接表几乎总是更好的,因为这可以确保所有元数据都是最新的。对于ODBC链接表,我从不刷新tabledef的connect字符串,而是删除它们并从头开始重新创建,因为这样可以保证元数据是最新的(缺少更新是视图不可更新的原因)。