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

时间:2011-04-17 17:41:09

标签: mysql ms-access odbc connection-string

为了便于分发,我希望所有mysql链表都是DSN-less。我还希望能够轻松地将表重新链接到不同的服务器(用于测试目的),所以我在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连接器弹出窗口,要求我输入用户名和密码。

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

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 个答案:

答案 0 :(得分:2)

我在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