九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
在VB中動(dòng)態(tài)加載ODBC數(shù)據(jù)源

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

發(fā)布時(shí)間:2008-04-03 10:38:07  來(lái)源:編程愛(ài)好者網(wǎng)站  作者:編程愛(ài)好者網(wǎng)站  點(diǎn)擊:509

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

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

Public Function LoadDbSource(StrSourceName, StrSourceDB, StrDescription As String) As Boolean
Dim hKey As Long ’要打開(kāi)的注冊(cè)表鍵句柄
Dim lReturn As Long ’注冊(cè)表API函數(shù)的執(zhí)行返回值
Dim StrSubKey As String ’要打開(kāi)的子鍵
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

’檢測(cè)是否安裝 Access ODBC 驅(qū)動(dòng) odbcjt32.dll
lReturn = GetSystemDirectory(Buffer, 255)
StrSysDir = Left(Buffer, lReturn) ’獲取Windows系統(tǒng)目錄
StrDriver = StrSysDir & "\odbcjt32.dll"
If Dir(StrDriver) = "" Then
MsgBox "您的計(jì)算機(jī)中沒(méi)有安裝Access的ODBC驅(qū)動(dòng)程序odbcjt32.dll,無(wú)法加載數(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ù)庫(kù)引擎名稱
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
在上面的程序中使用了標(biāo)準(zhǔn)的Win32 API注冊(cè)表操作函數(shù),在VB "API文本瀏覽器"工具和MSDN中可以很容易查到其詳細(xì)說(shuō)明。

方法之二:使用ODBC DLL提供的函數(shù)
  Windows系統(tǒng)目錄中提供有一系列專門操作ODBC的動(dòng)態(tài)鏈接庫(kù),其中Odbcinst.dll提供了一個(gè)可以動(dòng)態(tài)的增加、刪除和修改數(shù)據(jù)源的函數(shù)SQLConfigDataSource()。微軟在MSDN的幫助文檔中提供了對(duì)該函數(shù)的詳細(xì)使用說(shuō)明:
BOOL SQLConfigDataSource(
HWND hwndParent,
WORD fRequest,
LPCSTR lpszDriver,
LPCSTR lpszAttributes);
其中:hwndParent為調(diào)用窗體句柄;fRequest為操作碼,通過(guò)設(shè)置不同的值可以實(shí)現(xiàn)對(duì)數(shù)據(jù)源的增加、刪除、修改操作,這些對(duì)應(yīng)值可以在MSDN中查到;lpszDriver參數(shù)傳遞數(shù)據(jù)庫(kù)引擎,lpszAtrributes是配置信息列表,配置信息條目之間以字符代碼Chr(0)分隔。同樣,我們以上面的Access數(shù)據(jù)源配置為例寫(xiě)一個(gè)標(biāo)準(zhǔn)函數(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)用這個(gè)標(biāo)準(zhǔn)例程:
Dim StrAttributes As String
StrAttributes = "DSN=AccessODBC2" & Chr(0) & "Desciption=動(dòng)態(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)


  上述兩種方法都可以實(shí)現(xiàn)VB動(dòng)態(tài)加載ODBC數(shù)據(jù)源,對(duì)于不同類型的數(shù)據(jù)源,注冊(cè)表中記錄的內(nèi)容會(huì)有一些不同。所以,除查閱有關(guān)文檔外,程序員可以先通過(guò)手工在控制面板中配置數(shù)據(jù)源,然后再通過(guò)觀察注冊(cè)表中的內(nèi)容再進(jìn)行編程。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
自己動(dòng)手讓系統(tǒng)13秒開(kāi)機(jī)速度提升6倍
WIN7 64位旗艦版安裝OFFICE2003 提示:“錯(cuò)誤1919,配置ODBC數(shù)據(jù)源MS Access Database時(shí)發(fā)生錯(cuò)誤ODEC錯(cuò)誤”
痛苦的歷程:Ado訪問(wèn)PARADOX數(shù)據(jù)庫(kù)
談?wù)刅FP和SQL SERVER搭配做C/S系統(tǒng)
MFC對(duì)注冊(cè)表的讀寫(xiě)
九大技巧,提升xp運(yùn)行速度100%
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服