前言
我有一個帶有MySQL後端的Access 2010前端。我想使用默認的MySQL用戶名來初始連接到後端數據庫並進行密碼檢查等,然後切換到用戶特定的MySQL用戶名。如何強制Access更改DSN less ODBC連接的用戶名和密碼?
我已經創建了代碼來更改連接字符串,並重新連接MySQL表與新的用戶名,但訪問煩人地記住原來的用戶名和密碼,並使用該代碼。
問題
我怎麼能強迫MS Access 2010中忘記了原來的用戶名和密碼才能連接到ODBC並使用連接字符串中的新的?
複製
要重新創建我的問題
- MySQL的:
- 創建一個名爲 「測試」
- 新模式的新模式創建3個表:
- 「 table1「
- 」選項卡LE2"
- 「表3」
- 創建有權訪問架構兩個新用戶:
- 名稱: 「SQLUser1」,道: 「Pass01」
- 名稱: 「SQLUser2」,通: 「Pass02」
- 接入端:
- 創建一個新的MS ACCE SS 2010項目
- 創建一個新的空形式
- 添加2個按鈕被稱爲「Cmd_User1」和「Cmd_User2」
- 添加以下
- 示例代碼,您將需要更正服務器名稱( sServer =「MySQL」)在GenConString()函數中。
- 運行形式
- 點擊 「Cmd_User1」 按鈕
- 點擊 「Cmd_User2」 按鈕
- 現在檢查MySQL的日誌,它會使用用戶: 「SQLUser1」 兩種連接: (
例如代碼:
Option Compare Database
Option Explicit
Private Sub Cmd_User1_Click()
'Remove all existing tables
Call RemoveAllTables
'Connect the tables
Call AttachDSNLessTable("table1", "table2", GenConString("SQLUser1", "Pass01"))
Call AttachDSNLessTable("table2", "table2", GenConString("SQLUser1", "Pass01"))
Call AttachDSNLessTable("table3", "table3", GenConString("SQLUser1", "Pass01"))
End Sub
Private Sub Cmd_User2_Click()
'Remove all existing tables
Call RemoveAllTables
'Connect the tables
Call AttachDSNLessTable("table1", "table1", GenConString("SQLUser2", "Pass02"))
Call AttachDSNLessTable("table2", "table2", GenConString("SQLUser2", "Pass02"))
Call AttachDSNLessTable("table3", "table3", GenConString("SQLUser2", "Pass02"))
End Sub
Private Sub RemoveAllTables()
Dim bFound As Boolean, TblDef As DAO.TableDef
bFound = True 'Force to loop once
While (bFound = True)
bFound = False
For Each TblDef In CurrentDb.TableDefs
If Not (TblDef.Connect = "") Then
Call CurrentDb.TableDefs.Delete(TblDef.Name)
bFound = True
End If
Next TblDef
Wend
End Sub
Private Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stConnect As String)
On Error GoTo AttachDSNLessTable_Err
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
CurrentDb.TableDefs.Append td
AttachDSNLessTable = True
Exit Function
AttachDSNLessTable_Err:
AttachDSNLessTable = False
MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description
End Function
Private Function GenConString(ByVal sUserName As String, ByVal sPassword As String) As String
Dim sConString As String, sServer As String, sDatabase As String, iPort As Integer
'Pull back all the required fields
sServer = "MySQL"
sDatabase = "test"
iPort = "3306"
'Generate connection string
sConString = "ODBC;Driver={MySQL ODBC 5.1 Driver}; " _
& "Server=" & sServer & "; " _
& "Database=" & sDatabase & "; " _
& "UID=" & sUserName & "; " _
& "PWD=" & sPassword & "; " _
& "Port=" & iPort & "; " _
& "Option=3"
'Return new connection string
GenConString = sConString
End Function
經過數小時的挖掘,我懷疑它可能是導致此問題的「ODBC連接池」。請參閱:http://support.microsoft.com/kb/169470但是沒有發現如何檢查它是否正在使用,更重要的是如何清除池,以便創建一個新的集合...任何想法? – GazB
也許沒有找到:http://support.microsoft.com/kb/216950/EN-US,它似乎被我的MySQL驅動程序禁用,因此看不到它是如何的。回到畫板...... :( – GazB
只是一個想法,可能會也可能沒有幫助:http://www.tek-tips.com/viewthread.cfm?qid=556609 – Fionnuala