Private Sub Form_Load()
Dim i As Long
Dim sqlApp As SQLDMO.Application
Dim serverList As SQLDMO.NameList
' 建立 Application 物件
Set sqlApp = New SQLDMO.Application
' 取得可用伺服器清單
Set serverList = sqlApp.ListAvailableSQLServers
' 填入下拉選單
For i = 1 To serverList.Count
cboServer.AddItem serverList.Item(i)
Next i
End Sub
NameList 集合。注意:Private Sub cboServer_Click()
Dim sqlSvr As New SQLDMO.SQLServer
Dim db As SQLDMO.Database
lstDatabases.Clear
On Error GoTo ErrHandler
sqlSvr.LoginSecure = True ' Windows 整合驗證
sqlSvr.Connect cboServer.Text ' 連線選取的伺服器
For Each db In sqlSvr.Databases
If Not db.SystemObject Then ' 過濾系統資料庫
lstDatabases.AddItem db.Name
End If
Next db
Exit Sub
ErrHandler:
MsgBox "連線失敗:" & Err.Description, vbCritical
End Sub
| 現象 | 可能原因 | 解決 |
|---|---|---|
| ListAvailableSQLServers 回傳空集合 | SQL Browser 服務未啟動 / 防火牆封鎖 UDP 1434 | 啟動服務、開放防火牆 |
| 執行期錯誤 429 "ActiveX component can't create object" | 未註冊 SQLDMO.DLL / 版本不符 | 重新註冊:regsvr32 "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\SQLDMO.DLL" |
| 64 位元 Office/VBA 執行失敗 | SQL-DMO 為 32 位元 COM | Office 改裝 32 位元版,或遷移至 SMO/.NET |
SQL-DMO 列舉伺服器功能輕鬆實作「伺服器選擇」UI,是資料庫管理工具開發的常用起手式。注意網路環境與位元數相容性,即可穩定運作。