[VBA]讀取ODBC連線資訊

[VBA]讀取ODBC連線資訊

紀錄一下過程

問題描述

原先excel檔案是用odbc(user dsn)方式連接db2資料庫,用明碼方式儲存資料庫帳密;要調整相關程式如下:

1. odbc改成用system dsn。

2. 資料庫帳密改成用設定檔方式讀取。

設定檔位置

設定檔內容

第一行帳號,第二行密碼:

image

步驟

新增ODBC連線

執行 C:\Windows\SysWOW64\odbcad32.exe 跳出ODBC資料來源管理員

選擇【系統資料來源名稱】,點選【新增】。

clip_image001

選取【SQL Server Native Client 11.0】後點選完成,進入設定畫面。

clip_image002

輸入名稱與伺服器,點選【下一步】。

clip_image004

選取【以SQL方式驗證登入】輸入連線帳號和密碼。

clip_image005

勾選並選取預設登入資料庫點選【下一步】。

clip_image006

勾選SQL Server System Language 選取English語系後,點選【完成】按鈕。

clip_image007

點選【測試連線按鈕】進行連線測試。

clip_image008

驗證連線正常,完成資料庫連線設定。

clip_image009

點選確定離開。

clip_image010

修改Excel

增加模組LoadConfigFile,內容如下:


'帳號
Public ID As String
'密碼
Public PWD As String



Sub LoadConfig()
 Dim arrStr() As String, InputStr As String
 Dim i As Integer, j As Integer
 Dim Fn As Variant
 Dim myConfigFile As String

 Fn = FreeFile
 
 '組態檔位置
 myConfigFile = "C:\config\Ors_AP.txt"
 
 On Error GoTo Err
 Open myConfigFile For Input As #Fn
Application.ScreenUpdating = False '畫面暫停更新
i = 1: j = 1
 While Not EOF(Fn)
 Line Input #Fn, InputStr '從檔案讀出一列,
If Len(InputStr) > 0 Then '略過無字串的空行
arrStr = Split(InputStr, "=")
 '把讀入的文字列依逗號分成數個字串, 置於 arrStr 陣列裡
For j = 1 To UBound(arrStr)
    
  If arrStr(0) = "ID" Then
    ID = arrStr(1)
  End If
  If arrStr(0) = "PWD" Then
    PWD = arrStr(1)
  End If
Next j
 End If
 i = i + 1
 Wend
 Application.ScreenUpdating = True '畫面恢復更新
Close #Fn
GoTo Final

Err:
 Debug.Print "Config File Not Exist!" & myConfigFile
 
Final:
 End Sub

執行結果

測試連線結果。


Dim cn   As New ADODB.Connection
'讀取連線帳密
LoadConfigFile.LoadConfig
'開啟資料庫連線
cn.Open "northwind", LoadConfigFile.ID, LoadConfigFile.PWD
   If cn.State = adStateOpen Then
      Debug.Print "Welcome to Northwind!"
   Else
      Debug.Print "Sorry. No Northwind today."
   End If
Set cn = Nothing
End Sub

成功

image

參考資料

Excel VBA 讀入外部的txt檔案 程式碼要如何撰寫呢

VBA ADODB excel - read data from Recordset

如何從 Visual Basic 或 VBA 搭配使用 ADO 與 Excel 資料

How Do I Use the Connection Object in ADO?