人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

在VB中動態(tài)加載ODBC數(shù)據(jù)源

在VB中動態(tài)加載ODBC數(shù)據(jù)源

更新時間:2022-10-13 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

在編寫數(shù)據(jù)庫應用程序時,常常需要用戶自己在控制面板中配置ODBC數(shù)據(jù)源。然而對一般用戶而言,配置ODBC數(shù)據(jù)源的工作是有一定困難的。因此,如果能在程序中動態(tài)加載ODBC數(shù)據(jù)源,就能大大方便應用程序最終用戶的使用。本文介紹在VB中動態(tài)加載ODBC數(shù)據(jù)源的兩種方法。

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

Public Function LoadDbSource(StrSourceName, StrSourceDB, StrDescription As String) As Boolean
Dim hKey As Long '要打開的注冊表鍵句柄
Dim lReturn As Long '注冊表API函數(shù)的執(zhí)行返回值
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 驅(qū)動 odbcjt32.dll
lReturn = GetSystemDirectory(Buffer, 255)
StrSysDir = Left(Buffer, lReturn) '獲取Windows系統(tǒng)目錄
StrDriver = StrSysDir & "\odbcjt32.dll"
If Dir(StrDriver) = "" Then
MsgBox "您的計算機中沒有安裝Access的ODBC驅(qū)動程序odbcjt32.dll,無法加載數(shù)據(jù)源。", 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)

'設(shè)置ODBC數(shù)據(jù)庫引擎名稱
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注冊表操作函數(shù),在VB "API文本瀏覽器"工具和MSDN中可以很容易查到其詳細說明。

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

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程序中調(diào)用這個標準例程:
Dim StrAttributes As String
StrAttributes = "DSN=AccessODBC2" & Chr(0) & "Desciption=動態(tài)加載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)


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

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 克什克腾旗| 大姚县| 濮阳市| 屏南县| 察隅县| 海淀区| 阿拉善右旗| 连州市| 镇平县| 安福县| 蛟河市| 嘉善县| 囊谦县| 巴林左旗| 芒康县| 萨嘎县| 万宁市| 嵊州市| 江津市| 汕头市| 大庆市| 墨竹工卡县| 清丰县| 仙居县| 甘肃省| 内江市| 闽清县| 澄迈县| 筠连县| 岳西县| 石阡县| 临沧市| 文水县| 武邑县| 扶沟县| 长阳| 阿克苏市| 隆德县| 丘北县| 商河县| 乐清市|