亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        在Delphi中動(dòng)態(tài)加載ODBC實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問的方法

        2012-12-23 04:50:48崔怡文
        關(guān)鍵詞:注冊(cè)表管理器驅(qū)動(dòng)程序

        崔怡文

        (武漢鐵路職業(yè)技術(shù)學(xué)院,湖北武漢 430205)

        ODBC(Open Database Connectivity,開放數(shù)據(jù)庫(kù)互連)是Microsoft提供的數(shù)據(jù)庫(kù)訪問接口標(biāo)準(zhǔn),它定義了訪問數(shù)據(jù)庫(kù)的API(Application Programming Interface,應(yīng)用程序編程接口)一個(gè)規(guī)范,獨(dú)立于具體的編程語(yǔ)言,用戶以統(tǒng)一的方式(即SQL語(yǔ)言)訪問不同廠商的DBMS。一個(gè)基于ODBC 的應(yīng)用程序?qū)?shù)據(jù)庫(kù)的操作不依賴于任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫(kù)操作由對(duì)應(yīng)的DBMS的ODBC 驅(qū)動(dòng)程序完成。

        Delphi作為Windows平臺(tái)上一個(gè)功能強(qiáng)大、面向?qū)ο蟮摹⒖梢暬目焖賾?yīng)用程序開發(fā)工具(Rapid Application Development,簡(jiǎn)稱RAD),是目前最流行的C/S(Client/Server,客戶機(jī)/服務(wù)器)數(shù)據(jù)庫(kù)開發(fā)的主流工具之一,適用于多種數(shù)據(jù)庫(kù)結(jié)構(gòu)。在用Delphi構(gòu)建的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,通常使用ODBC接口訪問數(shù)據(jù)庫(kù),而ODBC 數(shù)據(jù)源則通過ODBC 數(shù)據(jù)源管理器手工添加。分發(fā)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)時(shí),若讓用戶自己手動(dòng)添加ODBC數(shù)據(jù)源是不可行的,這樣顯得既麻煩又不符合專業(yè)軟件的要求,因此在數(shù)據(jù)庫(kù)應(yīng)用程序中讓程序自動(dòng)完成配置ODBC 數(shù)據(jù)源是專業(yè)軟件的要求。文中以Delphi為開發(fā)環(huán)境,介紹在應(yīng)用程序中動(dòng)態(tài)加載ODBC用戶數(shù)據(jù)源的方法。

        1 ODBC數(shù)據(jù)庫(kù)訪問結(jié)構(gòu)及其Del phi實(shí)現(xiàn)要點(diǎn)

        1.1 ODBC 數(shù)據(jù)庫(kù)訪問結(jié)構(gòu)

        通過ODBC 訪問數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)由應(yīng)用程序、ODBC驅(qū)動(dòng)程序管理器、驅(qū)動(dòng)程序和數(shù)據(jù)源4部分組成,如圖1所示[1]

        圖1 ODBC數(shù)據(jù)庫(kù)訪問結(jié)構(gòu)

        ODBC是通過使用驅(qū)動(dòng)程序(Driver)來實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫(kù)的獨(dú)立性的。各個(gè)模塊的功能分別是[2]:

        (1)ODBC應(yīng)用程序通過調(diào)用ODBC 函數(shù)向數(shù)據(jù)庫(kù)提交SQL語(yǔ)句并處理返回結(jié)果;

        (2)ODBC驅(qū)動(dòng)程序管理器負(fù)責(zé)管理和裝載特定的驅(qū)動(dòng)程序、管理應(yīng)用程序和驅(qū)動(dòng)程序之間的通訊,并根據(jù)應(yīng)用程序加載或卸載驅(qū)動(dòng)程序,?處理ODBC 函數(shù)調(diào)用,獲把它們傳送到驅(qū)動(dòng)程序;

        (3)ODBC驅(qū)動(dòng)程序負(fù)責(zé)處理ODBC 函數(shù)調(diào)用,將SQL語(yǔ)句提交到特定的數(shù)據(jù)源,并返回結(jié)果給應(yīng)用程序;

        1.2 ODBC數(shù)據(jù)源

        Windows中的ODBC數(shù)據(jù)源有三種,分別是用戶DSN、系統(tǒng)DSN 和文件DSN。圖2是手動(dòng)配置ODBC數(shù)據(jù)源的窗口。手動(dòng)配置ODBC 數(shù)據(jù)源實(shí)際上是將數(shù)據(jù)源的相關(guān)信息寫入注冊(cè)表中,應(yīng)用程序讀取注冊(cè)表中的相關(guān)信息達(dá)到訪問數(shù)據(jù)源的目的。因此,我們只要將與手動(dòng)配置相似的注冊(cè)表信息寫入注冊(cè)表,就可實(shí)現(xiàn)ODBC 數(shù)據(jù)源的動(dòng)態(tài)配置。

        圖2 配置ODBC數(shù)據(jù)源

        Windows注冊(cè)表中與ODBC 相關(guān)的鍵主要有下面幾項(xiàng):

        HKEY_LOCAL_M(jìn)ACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers:記錄所有已安裝的ODBC驅(qū)動(dòng)程序。

        HKEY_LOCAL_M(jìn)ACHINE\SOFTWARE\ODBC\ODBCINST.INI:記錄已安裝ODBC 驅(qū)動(dòng)程序的相關(guān)信息。

        HKEY_LOCAL_M(jìn)ACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources:記錄各系統(tǒng)數(shù)據(jù)源的類型。

        HKEY_LOCAL_M(jìn)ACHINE\SOFTWARE\ODBC\ODBC.INI:記錄各系統(tǒng)數(shù)據(jù)源的詳細(xì)信息。

        HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Source:記錄各用戶數(shù)據(jù)源的類型。

        HKEY_CURRENT_USER\Software\ODBC\ODBC.INI:記錄各種用戶數(shù)據(jù)源的詳細(xì)信息。

        配置用戶DSN 時(shí),系統(tǒng)在注冊(cè)表HKEY_CURRENT _USER\Software\ODBC\ODBC.INI目錄下建立了對(duì)應(yīng)的用戶字符串名稱和數(shù)值;配置系統(tǒng)DSN 時(shí),系統(tǒng)在注冊(cè)表HKEY_LOCAL_M(jìn)ACHINE\Soft ware\ODBC\ODBC.INI目錄下建立了對(duì)應(yīng)的系統(tǒng)字符串名稱和數(shù)值;配置文件DSN 時(shí),系統(tǒng)在C:\Program Files\Common Files\OD BC\Data Sources\目錄下建立了以DSN 為后綴的文件。通常用戶一般進(jìn)行前面兩項(xiàng)DSN 的配置。

        2 Delphi中動(dòng)態(tài)加載ODBC的方法

        通過ODBC 接口訪問數(shù)據(jù)庫(kù)的關(guān)鍵是配置ODBC數(shù)據(jù)源,即設(shè)置DSN。DSN 設(shè)置有三種實(shí)現(xiàn)方法[3]:手工配置、通過專業(yè)的應(yīng)用程序安裝制作工具及應(yīng)用程序?qū)崿F(xiàn)對(duì)ODBC 的自動(dòng)配置。上述三種方法的原理都是通過修改注冊(cè)表來實(shí)現(xiàn)配置數(shù)據(jù)源的目的。文中討論第3種方法即用程序?qū)崿F(xiàn)對(duì)ODBC自動(dòng)配置的方法。

        Delphi中通過程序使用下述兩種方法實(shí)現(xiàn)ODBC自動(dòng)配置:

        (1)修改注冊(cè)表

        (2)利用DLL

        文中實(shí)例數(shù)據(jù)庫(kù)為Sybase SQL Anywhere 11;數(shù)據(jù)庫(kù)名:c:\temp|xy.db;密碼(password):xy19661106;用戶名(UserID):DBA;數(shù)據(jù)源名:mysql。

        2.1 修改注冊(cè)表

        DelPhi為程序員提供了一個(gè)Tregistry 類,它提供了眾多豐富的方法來完成對(duì)注冊(cè)表的修改。

        (1)OpenKey(const Key:String;CanCreate:Boolean):Boolean

        功能:設(shè)置當(dāng)前鍵,由Key 指定。如果Key為空,則當(dāng)前鍵為RootKey的值;CanCreate指定當(dāng)Key不存在時(shí),是否創(chuàng)建,值為True時(shí)創(chuàng)建,為False時(shí)不創(chuàng)建。當(dāng)打開或創(chuàng)建成功時(shí),返回True。

        (2) WriteString(const Name:String:const Value:String)

        功能:在當(dāng)前鍵下,把字符串賦值于一個(gè)數(shù)據(jù)鍵。

        Delphi中通過修改注冊(cè)表完成ODBC 數(shù)據(jù)源的配置代碼:

        procedure TForm1.FormCreate(Sender:TObject);

        var regTemp:Tregistry;

        ini:TregIniFile;

        ComputerName:array[0..MAX_COMPUTERNAME_LENGTH+1]of char;

        Size:Cardinal;

        Result:String;

        begin

        result:=';

        Size := MAX _COMPUTERNAME _LENGTH+1;

        GetComputerName(ComputerName,Size);

        Result:=StrPas(ComputerName);//獲取計(jì)算機(jī)名稱

        ini:=TregIniFile.Create(');

        ini.RootKey:=HKEY _LOCAL_M(jìn)ACHINE;//設(shè)置根鍵

        str:=ini.ReadString('Software\ODBC\ODBCINST.ini\SQL Anywhere 11','Driver',');//讀取驅(qū)動(dòng)數(shù)據(jù)庫(kù)的dll及路徑

        if str='then

        begin

        showmessage('沒有安裝Sybase數(shù)據(jù)庫(kù)');

        ini.Free;;

        end

        else

        begin

        ini.RootKey:=HKEY_CURRENT_USER;

        ini.WriteString('Software\ODBC\ODBC.INI\ODBC Data Sources','mysql','SQL Anywhere 11');//創(chuàng)建數(shù)據(jù)源名

        regTemp:=Tregistry.Create;

        with regTemp do

        begin

        RootKey:=HKEY_CURRENT_USER;

        if openkey('Software\ODBC\ODBC.INI\mysql',true)then

        begin

        WriteString('AutoStop','YES');

        WriteString('CommLinks','SharedMemory,TCPIP{192.168.1.1}');

        WriteString('DatabaseFile','c:\temp\xy.db');

        writeString('Driver',str);

        WriteString('password','xy19661106');

        WriteString('ServerName',Result);

        WriteString('UserID','DBA');

        end

        else

        begin

        showmessage('創(chuàng)建數(shù)據(jù)源失?。В?/p>

        free;

        exit;

        end;

        end;

        end;

        end;

        2.2 利用DLL

        Windows系統(tǒng)子目錄中的動(dòng)態(tài)鏈接庫(kù)odbccp32.dll提供了一個(gè)可以動(dòng)態(tài)地增加、修改和刪除數(shù)據(jù)源的函數(shù),該函數(shù)在Delphi中可聲明如下:

        //配置ODBC數(shù)據(jù)源,成功則返回True

        function SQLConfigDataSource(hwndParent:Integer;?fRequest:LongInt;?lpszDriver-String:string;lpszAttributes:string ):Long-Bool;stdcall;external‘ODBCCP32.DLL’;

        hwndParent:父窗口Handle,當(dāng)指定為0 時(shí)不會(huì)出現(xiàn)對(duì)話框,否則會(huì)彈出標(biāo)準(zhǔn)的ODBC 配置對(duì)話框。

        fRequest:命令請(qǐng)求,用來指明要完成的功能,其值可為1~6。意義如下:

        (1)增加一個(gè)新的用戶數(shù)據(jù)源;

        (2)修改(配置)一個(gè)已經(jīng)存在的用戶數(shù)據(jù)源;

        (3)刪除一個(gè)已經(jīng)存在的用戶數(shù)據(jù)源;

        (4)增加一個(gè)新的系統(tǒng)數(shù)據(jù)源;

        (5)修改(配置)一個(gè)已經(jīng)存在的系統(tǒng)數(shù)據(jù)源;

        (6)刪除一個(gè)已經(jīng)存在的系統(tǒng)數(shù)據(jù)源;

        lpszDriverString:驅(qū)動(dòng)程序名稱,就是在ODBC設(shè)置中顯示的驅(qū)動(dòng)程序名稱,如SQL Anywhere 11。

        lpszAttributes:DSN 的一些屬性,可有多項(xiàng),各項(xiàng)之間用分號(hào)(;)分隔。如:

        'DSN=cm;AutoStop=Y(jié)ES;DatabaseFile=c:\temp\xy.db;password=xy19661106;userID=DBA';

        在程序中調(diào)用該函數(shù)就可完成mysql數(shù)據(jù)源的創(chuàng)建。

        3 結(jié) 語(yǔ)

        上述兩種方法都可以實(shí)現(xiàn)動(dòng)態(tài)加載各種類型的ODBC數(shù)據(jù)源。方法一在實(shí)現(xiàn)時(shí)需要較多的代碼,但操作注冊(cè)表清晰;方法二所需代碼雖少,但形成lpszAttributes字符串復(fù)雜,隨著要求的增加,其代碼長(zhǎng)度也會(huì)相應(yīng)增加。若將實(shí)現(xiàn)ODBC 數(shù)據(jù)源動(dòng)態(tài)配置的代碼設(shè)計(jì)成一個(gè)ActiveX或DLL控件,更方便數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的應(yīng)用。

        1 向隅.數(shù)據(jù)庫(kù)基礎(chǔ)及應(yīng)用[M].北京:北京郵電大學(xué)出版社,2009

        2 李永忠,張心歌.在VC++中動(dòng)態(tài)加載ODBC 實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問方法[J].西北民族大學(xué)學(xué)報(bào)(自然科版),2005,26(57):47~53

        3 鞠儒生,喬海泉,黃柯棣.ODBC 數(shù)據(jù)源動(dòng)態(tài)配置原理及其實(shí)現(xiàn)研究[J].計(jì)算機(jī)仿真,2006,23(7):84~86.

        猜你喜歡
        注冊(cè)表管理器驅(qū)動(dòng)程序
        應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
        Windows文件緩沖處理技術(shù)概述
        更上一層樓 用好注冊(cè)表編輯器
        高集成度2.5A備份電源管理器簡(jiǎn)化鋰離子電池備份系統(tǒng)
        快速導(dǎo)出QQ群消息
        電腦迷(2014年2期)2014-04-29 19:21:13
        學(xué)習(xí)器揭開注冊(cè)表面紗
        驅(qū)動(dòng)程序更新與推薦
        驅(qū)動(dòng)程序更新與推薦
        軟件不能運(yùn)行,注冊(cè)表中找根源
        驅(qū)動(dòng)程序更新與推薦
        无码无套少妇毛多18p| 黄页国产精品一区二区免费| 国产综合无码一区二区色蜜蜜| 农村欧美丰满熟妇xxxx| 欧美黑人群一交| 亚洲综合无码一区二区| 亚洲天堂2017无码中文| 亚洲欧洲精品国产二码| 久久青青草原亚洲AV无码麻豆 | 伊人中文字幕亚洲精品乱码| 国产精选自拍视频网站| 日韩综合无码一区二区| 在线观看人成视频免费| 国模冰莲自慰肥美胞极品人体图| 水蜜桃精品一二三| 国产麻豆成人精品av| 亚洲啪啪综合av一区| 亚洲最大av资源站无码av网址 | 国产91网| 久久精品国产亚洲综合色| 成人日韩av不卡在线观看| 中文字幕人妻丝袜成熟乱| 午夜天堂精品一区二区| 熟女丝袜美腿亚洲一区二区三区| 日本中文字幕人妻精品| 日本在线一区二区三区视频| 中文字幕日韩精品永久在线| 国产精品成人av一区二区三区| 亚洲黄片av在线播放| 国产一区二区三区毛片| 亚洲欧美精品suv| 夜先锋av资源网站| 精品人妻系列无码一区二区三区| 996久久国产精品线观看| 中文字幕在线一区乱码| 亚洲成人精品在线一区二区| 精品日韩一级免费视频| 国产69精品久久久久9999apgf| 亚洲人成未满十八禁网站| 在线观看精品国产福利片100| 国产日韩午夜视频在线观看|