在 ms-access 中与 mysql 服务器的 DSN-less 连接不记得用户名和密码

Posted

技术标签:

【中文标题】在 ms-access 中与 mysql 服务器的 DSN-less 连接不记得用户名和密码【英文标题】:DSN-less connection to mysql server in ms-access not remembering user name and password 【发布时间】:2011-04-17 17:41:09 【问题描述】:

为了便于分发,我希望所有 mysql 链接表都没有 DSN。我还希望能够轻松地将表重新链接到不同的服务器(出于测试目的),因此我正在 vba 代码中进行链接设置。这是我用来设置/刷新任何链接的代码:

Private Sub relink_mysql_tables(mysql_connection As String)
    Dim db As Database
    Set db = CurrentDb()
    Dim tbldef As TableDef
    For Each tbldef In db.TableDefs
        If (tbldef.Attributes And TableDefAttributeEnum.dbAttachedODBC) Then
            tbldef.Connect = mysql_connection
            tbldef.RefreshLink
        End If
    Next
End Sub

我使用的mysql_connection字符串是:

DRIVER=MySQL ODBC 5.1 Driver;Server=myserver;Database=mydatabase;Uid=myusername;Pwd=mypassword;Option=3

这一切都很好,而且一切正常,直到我关闭 ms-access 并重新打开它。用户名和密码似乎忘记了。例如,如果我尝试打开一个链接表,我会看到一个 ODBC 连接器弹出窗口,要求我输入用户名和密码。

我注意到,在运行上述重新链接代码后,如果我将鼠标指针悬停在链接表(在本例中称为“tender”的表)上,它会显示当前连接字符串,但省略了用户名和密码:

ODBC;DRIVER=MySQL ODBC 5.1 Driver;Server=myserver;Database=mydatabase;Option=3;TABLE=tender

我在其他地方读到,将“;Persist Security Info=True”添加到连接字符串会起作用,但它不起作用!下次重新启动 ms-access 时,用户名和密码仍然忘记。我当前的解决方案是每次启动数据库时都重新运行重新链接代码,但这对我来说似乎是不必要的开销。是一种在链接表中记住用户名和密码的访问方式吗?

顺便说一下,我用的是Mysql5.5和Access2007。

【问题讨论】:

我的设置是每次启动软件时运行重新链接代码。据我所知,这是解决这个问题的唯一方法。 【参考方案1】:

我在microsoft article 的帮助下找到了答案。不要使用 RefreshLink 方法,而是使用 dbAttachedODBC 选项删除并重新创建链接:

Public Sub relink_mysql_tables(mysql_connection As String)

Dim db As Database
Dim tblDef As TableDef
Dim sLocalTableName As String
Dim sRemoteTableName As String    

' new collection '
Dim newTableDefs As New Collection

' current database '
Set db = CurrentDb()

' create new table defs '
For Each tblDef In db.TableDefs
    If (tblDef.Attributes And TableDefAttributeEnum.dbAttachedODBC) Then
        sLocalTableName = tblDef.Name
        sRemoteTableName = tblDef.SourceTableName

        ' create new linked table def '
        Set tblDef = db.CreateTableDef(sLocalTableName, dbAttachSavePWD, sRemoteTableName, mysql_connection)
        newTableDefs.Add tblDef         

    End If
Next

' delete old table defs '
For Each tblDef In newTableDefs
    db.TableDefs.Delete tblDef.Name
Next

' add new table defs to current database '
For Each tblDef In newTableDefs
    db.TableDefs.Append tblDef
Next

连接字符串与之前相同,但添加了前缀“ODBC;”:

ODBC;DRIVER=MySQL ODBC 5.1 Driver;Server=myserver;Database=mydatabase;Uid=myusername;Pwd=mypassword;Option=3

【讨论】:

我从来没有发现可以更新任何类型的 ODBC 链接表,并且总是在需要更改时理所当然地删除和重新创建它们。 如何设置此代码?你能帮忙设置一下吗?

以上是关于在 ms-access 中与 mysql 服务器的 DSN-less 连接不记得用户名和密码的主要内容,如果未能解决你的问题,请参考以下文章

我可以在后端使用 MS-Access 而不是 MYSQL

如何使用 MYSQL 查询访问 Ms-Access 数据库

使用 vba 在 MS-Access 前端中来自 MySQL 存储过程的多个结果集?

从 Oracle 到 MS-Access 到 Mysql

在 Android 应用程序中与远程 MySQL 数据库交互

mysql vs ms-access DB上的sql查询左连接