六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在VB中動態加載ODBC數據源

[摘要]在編寫數據庫應用程序時,常常需要用戶自己在控制面板中配置ODBC數據源。然而對一般用戶而言,配置ODBC數據源的工作是有一定困難的。因此,如果能在程序中動態加載ODBC數據源,就能大大方便應用程序最終用戶的使用。本文介紹在VB中動態加載ODBC數據源的兩種方法。方法之一:修改注冊表  一般情況下,...
在編寫數據庫應用程序時,常常需要用戶自己在控制面板中配置ODBC數據源。然而對一般用戶而言,配置ODBC數據源的工作是有一定困難的。因此,如果能在程序中動態加載ODBC數據源,就能大大方便應用程序最終用戶的使用。本文介紹在VB中動態加載ODBC數據源的兩種方法。

方法之一:修改注冊表
  一般情況下,用戶在控制面板中配置好ODBC數據源后,Windows系統會將用戶配置的信息寫在注冊表中。當應用程序需要用到數據源時,Windows會通知底層接口查閱注冊表中該數據源的配置。例如,如果配置了系統數據源,Windows系統會根據配置修改注冊表中的 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI 主鍵。因此,我們只要在應用程序中使用API函數來完成Windows對注冊表所做的工作,就可以達到動態加載數據源的目的。
  對于不同類型的數據源,注冊表修改的內容也會各有不同,但基本上都要修改兩個地方:一個是在ODBC.INI子鍵下建立與數據源配置相關的項;另一個是在\ODBC.INI\ODBC Data Source子鍵下建立一個新項,以告訴驅動程序管理器ODBC數據源的類型信息。
下面以配置一個ODBC系統數據源為例,給出一段動態加載Access數據源的VB例程:

Public Function LoadDbSource(StrSourceName, StrSourceDB, StrDescription As String) As Boolean
Dim hKey As Long '要打開的注冊表鍵句柄
Dim lReturn As Long '注冊表API函數的執行返回值
Dim StrSubKey As String '要打開的子鍵
Dim Buffer As String * 255
Dim StrSysDir As String
Dim StrDbq, StrDriver, StrFil, StrUid As String
Dim LngDriverID, LngSafeTransactions As Long
Dim StrImplict, StrUserCommit As String
Dim LngPageTimeout, LngThreads, LngMaxBufferSize As Long
Dim StrDbType As String

'檢測是否安裝 Access ODBC 驅動 odbcjt32.dll
lReturn = GetSystemDirectory(Buffer, 255)
StrSysDir = Left(Buffer, lReturn) '獲取Windows系統目錄
StrDriver = StrSysDir & "\odbcjt32.dll"
If Dir(StrDriver) = "" Then
MsgBox "您的計算機中沒有安裝Access的ODBC驅動程序odbcjt32.dll,無法加載數據源。", vbOKOnly + vbCritical
LoadDbSource = False
Exit Function
End If

StrSubKey = "SOFTWARE\ODBC\ODBC.INI" & "\" & StrSourceName
lReturn = RegCreateKey(HKEY_LOCAL_MACHINE, StrSubKey, hKey)
If lReturn <> ERROR_SUCCESS Then
LoadDbSource = False
Else
StrDbq = StrSourceDB
LngDriverID = 25
StrFil = "MS Access;" '文件類型"MS Access" for Microsoft Access
LngSafeTransactions = 0

Call RegSetValueEx(hKey, "DBQ", 0&, REG_SZ, StrDbq, LenB(StrDbq))
Call RegSetValueEx(hKey, "Description", 0&, REG_SZ, StrDescription, LenB(StrDescription))
Call RegSetValueEx(hKey, "Driver", 0&, REG_SZ, StrSourceDB, LenB(StrSourceDB))
Call RegSetValueEx2(hKey, "DriverID", 0&, REG_DWORD, LngDriverID, 4)
Call RegSetValueEx(hKey, "FIL", 0&, REG_SZ, StrFil, LenB(StrFil))
Call RegSetValueEx(hKey, "UID", 0&, REG_SZ, "", LenB(""))
Call RegSetValueEx2(hKey, "SafeTransaction", 0&, REG_DWORD, LngSafeTransactions, 4)
Call RegCloseKey(hKey)

StrSubKey = StrSubKey & "\Engines\Jet"
lReturn = RegCreateKey(HKEY_LOCAL_MACHINE, StrSubKey, hKey)
If lReturn <> ERROR_SUCCESS Then
LoadDbSource = False
Else
StrImplict = ""
StrUserCommit = "Yes"
LngPageTimeout = 5
LngThreads = 3
LngMaxBufferSize = 2048

Call RegSetValueEx(hKey, "ImplictCommitSync", 0&, REG_SZ, StrImplict, LenB(StrImplict))
Call RegSetValueEx2(hKey, "MaxBufferSize", 0&, REG_DWORD, LngMaxBufferSize, 4)
Call RegSetValueEx2(hKey, "PageTimeout", 0&, REG_DWORD, LngPageTimeout, 4)
Call RegSetValueEx2(hKey, "Threads", 0&, REG_DWORD, LngThreads, 4)
Call RegSetValueEx(hKey, "UserCommitSync", 0&, REG_SZ, StrUserCommit, LenB(StrUserCommit))
Call RegCloseKey(hKey)

'設置ODBC數據庫引擎名稱
lReturn = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", 0&, KEY_WRITE, hKey)
If lReturn <> ERROR_SUCCESS Then
LoadDbSource = False
Else
StrDbType = "Microsoft Access Driver (*.mdb)"
lReturn = RegSetValueEx(hKey, StrSourceName, 0&, REG_SZ, StrDbType, LenB(StrDbType))
If lReturn = ERROR_SUCCESS Then LoadDbSource = True
End If
End If
End If
End Function
在上面的程序中使用了標準的Win32 API注冊表操作函數,在VB "API文本瀏覽器"工具和MSDN中可以很容易查到其詳細說明。

方法之二:使用ODBC DLL提供的函數
  Windows系統目錄中提供有一系列專門操作ODBC的動態鏈接庫,其中Odbcinst.dll提供了一個可以動態的增加、刪除和修改數據源的函數SQLConfigDataSource()。微軟在MSDN的幫助文檔中提供了對該函數的詳細使用說明:
BOOL SQLConfigDataSource(
HWND hwndParent,
WORD fRequest,
LPCSTR lpszDriver,
LPCSTR lpszAttributes);
其中:hwndParent為調用窗體句柄;fRequest為操作碼,通過設置不同的值可以實現對數據源的增加、刪除、修改操作,這些對應值可以在MSDN中查到;lpszDriver參數傳遞數據庫引擎,lpszAtrributes是配置信息列表,配置信息條目之間以字符代碼Chr(0)分隔。同樣,我們以上面的Access數據源配置為例寫一個標準函數:

Private Const ODBC_ADD_SYS_DSN = 4
Private Declare Function SQLConfigDataSource Lib "odbccp32.dll" (ByVal hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long

Public Function LoadDbSource2(StrDriver, StrAttributes As String) As Boolean
LoadDbSource2 = SQLConfigDataSource(0&, ODBC_ADD_SYS_DSN, StrDriver, StrAttributes)
End Function

在VB程序中調用這個標準例程:
Dim StrAttributes As String
StrAttributes = "DSN=AccessODBC2" & Chr(0) & "Desciption=動態加載ODBC示例" & Chr(0)
StrAttributes = StrAttributes & "Dbq=" & App.Path & "\MyDb.mdb" & Chr(0) & "FIL=MS Access;" & Chr(0)
StrAttributes = StrAttributes & "MaxBufferSize=2048" & Chr(0) & "PageTimeout=5" & Chr(0)
Call LoadDbSource2("Microsoft Access Driver (*.mdb)", StrAttributes)


  上述兩種方法都可以實現VB動態加載ODBC數據源,對于不同類型的數據源,注冊表中記錄的內容會有一些不同。所以,除查閱有關文檔外,程序員可以先通過手工在控制面板中配置數據源,然后再通過觀察注冊表中的內容再進行編程。


主站蜘蛛池模板: 色综合日韩 | 中文字幕伦伦精品 | 日韩a级毛片 | 日本aⅴ在线观看 | 午夜成人在线视频 | 天天草比| 中文www新版资源在线 | 天天做天天爱天天影视综合 | 天天做天天爱夜夜爽女人爽宅 | 雪白丰满丝袜长腿白嫩在线 | 在线观看视频污 | 色婷丁香 | 日韩中文字幕一在线 | 视频精品一区二区 | 欧美一级三级在线观看 | 四虎国产精品免费五月天 | 天天操天天草 | 日本视频网址 | 日本三级韩国三级香港三级网站 | 青青国产成人久久91网站站 | 欧美亚洲国产精品久久久久 | 天天操天天操 | 天天躁日日2018躁狠狠躁 | 日韩爱爱| 日本道在线视频 | 欧美做真爱欧美观看免费 | 五月天激情婷婷 | 日韩黄在线观看免费视频 | 四虎成人免费 | 手机看片福利盒子久久青 | 日本免费一区视频 | 伊人黄| 亚洲午夜久久久久中文字幕 | 色偷偷亚洲男人天堂 | 日本一区二区免费看 | 中文字幕在线观看免费视频 | 日产精品一区二区 | 亚洲国产日韩综合久久精品 | 伊人热人久久中文字幕 | 一本久道在线 | 天天搞天天搞 |