999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在Delphi中動態加載ODBC實現數據庫訪問的方法

2012-12-23 04:50:48崔怡文
武漢船舶職業技術學院學報 2012年2期
關鍵詞:數據庫用戶方法

崔怡文

(武漢鐵路職業技術學院,湖北武漢 430205)

ODBC(Open Database Connectivity,開放數據庫互連)是Microsoft提供的數據庫訪問接口標準,它定義了訪問數據庫的API(Application Programming Interface,應用程序編程接口)一個規范,獨立于具體的編程語言,用戶以統一的方式(即SQL語言)訪問不同廠商的DBMS。一個基于ODBC 的應用程序對數據庫的操作不依賴于任何DBMS,不直接與DBMS打交道,所有的數據庫操作由對應的DBMS的ODBC 驅動程序完成。

Delphi作為Windows平臺上一個功能強大、面向對象的、可視化的快速應用程序開發工具(Rapid Application Development,簡稱RAD),是目前最流行的C/S(Client/Server,客戶機/服務器)數據庫開發的主流工具之一,適用于多種數據庫結構。在用Delphi構建的數據庫應用系統中,通常使用ODBC接口訪問數據庫,而ODBC 數據源則通過ODBC 數據源管理器手工添加。分發數據庫應用系統時,若讓用戶自己手動添加ODBC數據源是不可行的,這樣顯得既麻煩又不符合專業軟件的要求,因此在數據庫應用程序中讓程序自動完成配置ODBC 數據源是專業軟件的要求。文中以Delphi為開發環境,介紹在應用程序中動態加載ODBC用戶數據源的方法。

1 ODBC數據庫訪問結構及其Del phi實現要點

1.1 ODBC 數據庫訪問結構

通過ODBC 訪問數據庫的體系結構由應用程序、ODBC驅動程序管理器、驅動程序和數據源4部分組成,如圖1所示[1]

圖1 ODBC數據庫訪問結構

ODBC是通過使用驅動程序(Driver)來實現應用程序對數據庫的獨立性的。各個模塊的功能分別是[2]:

(1)ODBC應用程序通過調用ODBC 函數向數據庫提交SQL語句并處理返回結果;

(2)ODBC驅動程序管理器負責管理和裝載特定的驅動程序、管理應用程序和驅動程序之間的通訊,并根據應用程序加載或卸載驅動程序,?處理ODBC 函數調用,獲把它們傳送到驅動程序;

(3)ODBC驅動程序負責處理ODBC 函數調用,將SQL語句提交到特定的數據源,并返回結果給應用程序;

1.2 ODBC數據源

Windows中的ODBC數據源有三種,分別是用戶DSN、系統DSN 和文件DSN。圖2是手動配置ODBC數據源的窗口。手動配置ODBC 數據源實際上是將數據源的相關信息寫入注冊表中,應用程序讀取注冊表中的相關信息達到訪問數據源的目的。因此,我們只要將與手動配置相似的注冊表信息寫入注冊表,就可實現ODBC 數據源的動態配置。

圖2 配置ODBC數據源

Windows注冊表中與ODBC 相關的鍵主要有下面幾項:

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers:記錄所有已安裝的ODBC驅動程序。

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI:記錄已安裝ODBC 驅動程序的相關信息。

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources:記錄各系統數據源的類型。

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI:記錄各系統數據源的詳細信息。

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

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI:記錄各種用戶數據源的詳細信息。

配置用戶DSN 時,系統在注冊表HKEY_CURRENT _USER\Software\ODBC\ODBC.INI目錄下建立了對應的用戶字符串名稱和數值;配置系統DSN 時,系統在注冊表HKEY_LOCAL_MACHINE\Soft ware\ODBC\ODBC.INI目錄下建立了對應的系統字符串名稱和數值;配置文件DSN 時,系統在C:\Program Files\Common Files\OD BC\Data Sources\目錄下建立了以DSN 為后綴的文件。通常用戶一般進行前面兩項DSN 的配置。

2 Delphi中動態加載ODBC的方法

通過ODBC 接口訪問數據庫的關鍵是配置ODBC數據源,即設置DSN。DSN 設置有三種實現方法[3]:手工配置、通過專業的應用程序安裝制作工具及應用程序實現對ODBC 的自動配置。上述三種方法的原理都是通過修改注冊表來實現配置數據源的目的。文中討論第3種方法即用程序實現對ODBC自動配置的方法。

Delphi中通過程序使用下述兩種方法實現ODBC自動配置:

(1)修改注冊表

(2)利用DLL

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

2.1 修改注冊表

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

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

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

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

功能:在當前鍵下,把字符串賦值于一個數據鍵。

Delphi中通過修改注冊表完成ODBC 數據源的配置代碼:

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);//獲取計算機名稱

ini:=TregIniFile.Create(');

ini.RootKey:=HKEY _LOCAL_MACHINE;//設置根鍵

str:=ini.ReadString('Software\ODBC\ODBCINST.ini\SQL Anywhere 11','Driver',');//讀取驅動數據庫的dll及路徑

if str='then

begin

showmessage('沒有安裝Sybase數據庫');

ini.Free;;

end

else

begin

ini.RootKey:=HKEY_CURRENT_USER;

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

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('創建數據源失?。В?;

free;

exit;

end;

end;

end;

end;

2.2 利用DLL

Windows系統子目錄中的動態鏈接庫odbccp32.dll提供了一個可以動態地增加、修改和刪除數據源的函數,該函數在Delphi中可聲明如下:

//配置ODBC數據源,成功則返回True

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

hwndParent:父窗口Handle,當指定為0 時不會出現對話框,否則會彈出標準的ODBC 配置對話框。

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

(1)增加一個新的用戶數據源;

(2)修改(配置)一個已經存在的用戶數據源;

(3)刪除一個已經存在的用戶數據源;

(4)增加一個新的系統數據源;

(5)修改(配置)一個已經存在的系統數據源;

(6)刪除一個已經存在的系統數據源;

lpszDriverString:驅動程序名稱,就是在ODBC設置中顯示的驅動程序名稱,如SQL Anywhere 11。

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

'DSN=cm;AutoStop=YES;DatabaseFile=c:\temp\xy.db;password=xy19661106;userID=DBA';

在程序中調用該函數就可完成mysql數據源的創建。

3 結 語

上述兩種方法都可以實現動態加載各種類型的ODBC數據源。方法一在實現時需要較多的代碼,但操作注冊表清晰;方法二所需代碼雖少,但形成lpszAttributes字符串復雜,隨著要求的增加,其代碼長度也會相應增加。若將實現ODBC 數據源動態配置的代碼設計成一個ActiveX或DLL控件,更方便數據庫應用系統的應用。

1 向隅.數據庫基礎及應用[M].北京:北京郵電大學出版社,2009

2 李永忠,張心歌.在VC++中動態加載ODBC 實現數據庫訪問方法[J].西北民族大學學報(自然科版),2005,26(57):47~53

3 鞠儒生,喬海泉,黃柯棣.ODBC 數據源動態配置原理及其實現研究[J].計算機仿真,2006,23(7):84~86.

猜你喜歡
數據庫用戶方法
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
主站蜘蛛池模板: 国产乱子精品一区二区在线观看| 色噜噜综合网| 91久久偷偷做嫩草影院| 67194成是人免费无码| 国产午夜无码专区喷水| 午夜精品区| 欧美日韩久久综合| 日韩在线永久免费播放| 国产内射一区亚洲| 丝袜亚洲综合| 成人夜夜嗨| 亚洲综合经典在线一区二区| 欧美成人免费午夜全| 茄子视频毛片免费观看| 老汉色老汉首页a亚洲| 日韩精品一区二区三区大桥未久| 欧美a在线看| 超清无码一区二区三区| 亚洲人成色77777在线观看| 久久精品国产亚洲麻豆| 国产又色又刺激高潮免费看| 国产精品久线在线观看| 国内嫩模私拍精品视频| 欧美69视频在线| 国产乱子伦视频在线播放| 国产凹凸视频在线观看| 中文字幕在线不卡视频| 国产精品刺激对白在线| 性视频一区| 国产永久无码观看在线| 毛片久久久| 国产乱论视频| 久久久波多野结衣av一区二区| a色毛片免费视频| 亚洲综合日韩精品| 国产精品九九视频| 91热爆在线| 国产国产人在线成免费视频狼人色| 国产交换配偶在线视频| 91尤物国产尤物福利在线| 国产又黄又硬又粗| 免费国产一级 片内射老| 67194成是人免费无码| 国产综合在线观看视频| 亚洲伊人久久精品影院| 黄色网页在线观看| 青青青草国产| 日韩在线欧美在线| 日韩区欧美区| 中国国产A一级毛片| 国产精品夜夜嗨视频免费视频| 亚洲色图欧美在线| 国产精品免费福利久久播放| 亚洲an第二区国产精品| 九九九精品成人免费视频7| 香蕉视频国产精品人| 最新国产高清在线| 99爱视频精品免视看| 91麻豆国产精品91久久久| 日本一本在线视频| 久久香蕉国产线看观| 欧美一级在线播放| 亚洲va精品中文字幕| 亚洲精品福利视频| 成人噜噜噜视频在线观看| 女人18一级毛片免费观看 | 91免费精品国偷自产在线在线| 激情网址在线观看| 亚洲精品无码av中文字幕| 国产成人免费视频精品一区二区| 精品福利网| 亚洲日本中文综合在线| 亚洲大学生视频在线播放| 漂亮人妻被中出中文字幕久久| a色毛片免费视频| 欧美精品啪啪| 久久综合一个色综合网| 九九热在线视频| 国产在线91在线电影| 夜夜拍夜夜爽| www.精品视频| 亚洲va欧美va国产综合下载|