狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

在VB中動態加載ODBC數據源

在VB中動態加載ODBC數據源

更新時間:2024-04-09 文章作者:未知 信息來源:網絡 閱讀次數:

在編寫數據庫應用程序時,常常需要用戶自己在控制面板中配置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數據源,對于不同類型的數據源,注冊表中記錄的內容會有一些不同。所以,除查閱有關文檔外,程序員可以先通過手工在控制面板中配置數據源,然后再通過觀察注冊表中的內容再進行編程。

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

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
国内精品国产成人| 国产日产欧美一区二区三区| 日本一不卡视频| 国产精品久久久久久久岛一牛影视| 精品视频1区2区| 91传媒视频在线播放| 一区二区免费在线播放| 亚洲天堂成人在线观看| 欧美最猛黑人xxxxx猛交| 中文字幕一区三区| 成人av第一页| 国产欧美精品一区二区色综合| 丝袜诱惑亚洲看片| 91丨九色丨黑人外教| 久久精彩视频| 一区二区三区 在线观看视频| www.av精品| 欧美激情综合五月色丁香| 中文字幕亚洲欧美在线不卡| 免费精品99久久国产综合精品| 日韩美女视频19| 国产欧美一二三区| 亚洲国产日本| 三级在线观看一区二区| 欧美日韩三级在线| 麻豆91免费观看| 久久精品在这里| 国产精品久久九九| 看电视剧不卡顿的网站| 精品噜噜噜噜久久久久久久久试看 | caoporm超碰国产精品| 欧美一区二区三区思思人| 91麻豆蜜桃一区二区三区| 亚洲欧洲成人av每日更新| 欧洲在线/亚洲| 欧美精品日韩| 久久国产生活片100| 中文字幕的久久| 欧美日韩视频第一区| 91丨九色丨蝌蚪丨老版| 日韩—二三区免费观看av| 精品成人a区在线观看| 免费视频久久| 黄色免费成人| 99riav久久精品riav| 免费在线观看一区二区三区| 亚洲国产精品精华液ab| 欧美精品18+| 国产模特精品视频久久久久| 欧美大片专区| 菠萝蜜视频在线观看一区| 久久国产欧美日韩精品| 一区二区三区高清| 亚洲视频每日更新| 日本一区二区综合亚洲| 日韩精品专区在线影院观看| 色婷婷久久综合| 免费看的黄色欧美网站| 国产精品v欧美精品v日本精品动漫| 国产剧情一区二区三区| 一区二区欧美视频| 亚洲色图欧美在线| 中文字幕在线不卡一区二区三区| 欧美大片日本大片免费观看| 这里只有精品电影| 欧美一区二区三区视频在线| 欧美日韩亚洲综合| 日韩一二三区视频| 欧美一区二区三级| 欧美日韩免费观看一区二区三区 | 久久久久国产免费免费| 亚洲精品一区二区三区影院| 日韩欧美123| 26uuu国产在线精品一区二区| 3751色影院一区二区三区| 欧美三级中文字幕在线观看| 久久久久久九九九九| 国产精品久久九九| 欧美日韩在线精品一区二区三区激情| 麻豆精品91| 在线不卡的av| 精品理论电影在线| 久久久久国产精品人| 国产精品免费免费| 婷婷综合久久一区二区三区| 久久 天天综合| 95精品视频在线| 国产亚洲成人一区| 欧美日韩精品一区视频| 久久亚洲精品国产精品紫薇| 国产精品久久久久四虎| 亚洲最大成人综合| 久久国产精品第一页| 成人精品视频一区二区三区| 色综合天天综合| 玖玖精品视频| 中文字幕第一区第二区| 午夜激情一区二区三区| 丁香婷婷综合色啪| 国产欧美日本| 久久久久99精品国产片| 午夜欧美在线一二页| 成人免费va视频| 在线视频一区二区三| 国产精品丝袜久久久久久app| 美女网站在线免费欧美精品| 欧美在线高清| 欧美一区二区视频在线观看 | 国产日韩综合av| 国产精品一区二区在线观看不卡| 在线精品一区二区| 久久亚洲免费视频| 国产一区在线精品| 久久一二三区| 亚洲国产精品久久久久婷婷884| 国产精品66部| 欧美伊人久久久久久久久影院| 亚洲激情自拍偷拍| 99在线|亚洲一区二区| 亚洲天堂中文字幕| 国产精品视频免费观看| 久久婷婷色综合| 91蜜桃婷婷狠狠久久综合9色| 日韩三级视频在线看| 懂色一区二区三区免费观看| 日韩三级伦理片妻子的秘密按摩| 韩国v欧美v亚洲v日本v| 欧美美女bb生活片| 成人av网址在线| 中文字幕不卡在线观看| 亚洲人www| 日韩精品午夜视频| 欧美一区二区三区婷婷月色| 99国产欧美另类久久久精品| 欧美大尺度电影在线| 欧美永久精品| 亚洲午夜成aⅴ人片| 欧美图区在线视频| 国产一区二区三区电影在线观看| 51精品国自产在线| 国产精品v欧美精品v日韩| 亚洲午夜免费电影| 欧美日韩在线不卡| 欧美精品二区| 久久99精品一区二区三区三区| 日韩欧美国产一二三区| 亚洲国产欧美国产综合一区| 蜜桃精品在线观看| 国产亚洲一区二区三区四区| 国产日韩精品久久| 国产精品一二三四区| 日韩理论片中文av| 欧美大白屁股肥臀xxxxxx| 中文在线不卡| 国产ts人妖一区二区| 亚洲自拍偷拍网站| 久久久久国产精品麻豆| 在线观看视频一区二区| 狠狠色噜噜狠狠狠狠色吗综合| 视频一区二区三区在线| 国产精品福利一区二区| 欧美日韩亚洲国产综合| 18成人免费观看视频| 国产成人av福利| 久久精品国产久精国产| 亚洲午夜在线视频| 国产精品久久久久久久久动漫 | 欧美色手机在线观看| 亚洲人成免费| 一区在线视频| 成人午夜私人影院| 一级特黄大欧美久久久| 亚洲精品一区二区三区香蕉| 欧美日产国产精品| 在线观看日韩一区| 久久综合电影| 在线观看视频一区二区欧美日韩| 国产蜜臀av在线一区二区三区| 国内精品久久久久久久影视蜜臀| 国产乱码精品一区二区三区五月婷| 性做久久久久久久久| 一区二区三区四区国产精品| 欧美国产丝袜视频| 国产精品久久久久久亚洲毛片| 久久久久久亚洲综合影院红桃| 日韩欧美三级在线| 国产日韩欧美a| 1024成人网| 一区二区三区鲁丝不卡| 亚洲一区二区三区视频在线播放 | 亚洲免费资源在线播放| ●精品国产综合乱码久久久久| 国产精品你懂的在线欣赏| 国产欧美日韩精品在线| 国产校园另类小说区| 国产精品成人网| 亚洲综合激情另类小说区| 天天做天天摸天天爽国产一区 | 亚洲va国产va欧美va观看| 久久久精品综合|