• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    在VB中動態加載ODBC數據源

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 100次 | 進入軟件測試論壇討論

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

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>