自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在DELPHI程序中動(dòng)態(tài)設(shè)置ODBC數(shù)據(jù)源

運(yùn)維 數(shù)據(jù)庫運(yùn)維
在利用ODBC訪問數(shù)據(jù)庫時(shí),通常的方法時(shí)是在ODBC管理面板中設(shè)置一個(gè)ODBC系統(tǒng)數(shù)據(jù)源(系統(tǒng)DSN),然后在DBD中或在程序中設(shè)置一個(gè)數(shù)據(jù)庫別名(Alias)對(duì)應(yīng)該DSN,這樣就可以如愿以償?shù)夭僮鲾?shù)據(jù)庫了. 本文介紹了在程序中動(dòng)態(tài)設(shè)置系統(tǒng)DSN的方法,希望會(huì)對(duì)讀者有所幫助。

ODBC數(shù)據(jù)庫驅(qū)動(dòng)程序設(shè)置DSN的秘密在注冊表中,所以要想動(dòng)態(tài)地設(shè)置ODBC數(shù)據(jù)源,我們首先就要從注冊表開始。打開注冊表,到HKEY_LOCAL_MACHINE\Software\ODBC看一看它的設(shè)置。首先來看看系統(tǒng)中已安裝的ODBC數(shù)據(jù)庫驅(qū)動(dòng)程序.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBCInst.INI中,存放著已經(jīng)安裝了的ODBC數(shù)據(jù)庫驅(qū)動(dòng)程序的信息,從這里可以查到已安裝的ODBC數(shù)據(jù)庫驅(qū)動(dòng)程序?qū)?yīng)的DLL文件等信息.在ODBCInst.INI\ODBC Drivers的各個(gè)鍵值中,鍵名是驅(qū)動(dòng)程序名稱(如Microsoft Access Driver(*.mdb)),鍵值為“Installed”,表示驅(qū)動(dòng)程序已安裝。

在ODBCInst.INI\DriverName(DriverName為一個(gè)驅(qū)動(dòng)程序名稱,如Microsoft Access Driver(*.mdb))中,有驅(qū)動(dòng)程序的詳細(xì)信息,我們主要從這里獲得ODBC驅(qū)動(dòng)程序?qū)?yīng)的DLL文件的路徑和文件名,即鍵名Driver的鍵值,一般為"C:\WINDOWS\SYSTEM\FileName.DLL".然后來看系統(tǒng)DSN的注冊信息,在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中,存放著系統(tǒng)DSN的注冊信息,我們在ODBC管理面板設(shè)置的DSN參數(shù)就在這里。

下面來看看創(chuàng)建一個(gè)ODBC系統(tǒng)DSN的步驟,即我們在ODBC管理面板中完成參數(shù)設(shè)置后,ODBC管理程序是怎么在注冊表中注冊DSN信息的.以創(chuàng)建一個(gè)名稱為MyAccess的Ms Access97類型的系統(tǒng)DSN為例,我們指定的參數(shù)主要有數(shù)據(jù)庫類型(Microsoft Access Driver(*.mdb))、數(shù)據(jù)源名稱(MyAccess)、數(shù)據(jù)源描述(我的ACCESS)、數(shù)據(jù)庫路徑(C:\Inetpub\wwwroot\Test.mdb),其它參數(shù)如用戶名稱、用戶密碼、獨(dú)占、只讀、系統(tǒng)數(shù)據(jù)庫、默認(rèn)目錄、緩沖區(qū)大小、掃描行數(shù)、頁超時(shí)等采用系統(tǒng)缺省參數(shù).這時(shí),注冊系統(tǒng)DSN一般應(yīng)有以下幾個(gè)步驟:

1.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources中增加一個(gè)字符串鍵值,為MyAccess = Microsoft Access Driver(*.mdb),其中分別為數(shù)據(jù)源名稱和數(shù)據(jù)庫類型.這是在注冊表中注冊一個(gè)系統(tǒng)DSN名稱.

2.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中創(chuàng)建一個(gè)子鍵(SubKey)MyAccess,即創(chuàng)建一個(gè)鍵為HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess,然后在其下創(chuàng)建一些鍵值,詳細(xì)描述一個(gè)系統(tǒng)DSN的配置信息,主要信息有([]中的內(nèi)容為筆者注釋):

 

  1. DBQ=C:\Inetpub\wwwroot\Test.mdb [字符串,表示數(shù)據(jù)庫路徑]  
  2.  
  3. Description=我的ACCESS [字符串,表示數(shù)據(jù)庫描述]  
  4.  
  5. Driver=C:\PWIN98\System\odbcjt32.dll [字符串,表示驅(qū)動(dòng)程序,可見ODBCINST.INI]  
  6.  
  7. DriverId=0x00000019(25) [數(shù)字,表示驅(qū)動(dòng)程序標(biāo)識(shí),不能改變]  
  8.  
  9. FIL=Ms Access; [字符串,可能與過濾Filter有關(guān)]  
  10.  
  11. SafeTransaction=0x00000000 [數(shù)字,可能表示支持事務(wù)性操作的個(gè)數(shù)]  
  12.  
  13. UID="" [字符串,表示用戶名稱,此處為空字符串] 

 

3.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess中創(chuàng)建一個(gè)子鍵(SubKey)Engines,再在其下創(chuàng)建子鍵(SubKey)Jet,即創(chuàng)建一個(gè)鍵為HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess\Engines\Jet,然后在其下創(chuàng)建一些鍵值,詳細(xì)描述一個(gè)系統(tǒng)DSN的數(shù)據(jù)庫引擎配置信息,主要信息有([]中的內(nèi)容為筆者注釋):

 

  1. ImplicitCommitSync=Yes [字符串,可能表示是否立即反映數(shù)據(jù)修改]  
  2.  
  3. MaxBufferSize=0x00000200(512) [數(shù)字,表示緩沖區(qū)大小]  
  4.  
  5. PageTimeout=0x00000005(5) [數(shù)字,表示頁超時(shí)]  
  6.  
  7. Threads=0x00000003(3) [數(shù)字,可能表示支持的***線程數(shù)目]  
  8.  
  9. UserCommitSync=Yes [字符串,可能表示是否立即將數(shù)據(jù)修改反映到用戶] 

 

以上是建立一個(gè)系統(tǒng)DSN的基本信息(其它信息如選項(xiàng)或高級(jí)選項(xiàng)等信息也在這里設(shè)置,只不過因采用默認(rèn)信息,注冊表里沒有列出),我們在程序中按上述步驟操作注冊表,同樣也能增加一個(gè)系統(tǒng)DSN或修改其配置.

#p#

在下面的例子程序中,將按以上步驟建立一個(gè)系統(tǒng)DSN,請(qǐng)注意程序中的注釋.

{*******************************************************

在本程序中,創(chuàng)建一個(gè)ODBC系統(tǒng)數(shù)據(jù)源(DSN),

數(shù)據(jù)源名稱:MyAccess 數(shù)據(jù)源描述:新數(shù)據(jù)源

數(shù)據(jù)庫類型:ACCESS97

對(duì)應(yīng)數(shù)據(jù)庫:C:\Inetpub\wwwroot\test.mdb

*******************************************************}

{ 注意應(yīng)在USES語句中包含Registry }

 

  1. procedure TForm1.Button1Click(Sender: TObject);  
  2.  
  3. var  
  4.  
  5. registerTemp : TRegistry;  
  6.  
  7. bData : array[ 0..0 ] of byte;  
  8.  
  9. begin  
  10.  
  11. registerTemp :TRegistry.Create; //建立一個(gè)Registry實(shí)例  
  12.  
  13. with registerTemp do  
  14.  
  15. begin  
  16.  
  17. RootKey:=HKEY_LOCAL_MACHINE;//設(shè)置根鍵值為HKEY_LOCAL_MACHINE  
  18.  
  19. //找到Software\ODBC\ODBC.INI\ODBC Data Sources  
  20.  
  21. if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then  
  22.  
  23. begin //注冊一個(gè)DSN名稱  
  24.  
  25. WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)' );  
  26.  
  27. end  
  28.  
  29. else  
  30.  
  31. begin//創(chuàng)建鍵值失敗  
  32.  
  33. memo1.lines.add('增加ODBC數(shù)據(jù)源失敗');  
  34.  
  35. exit;  
  36.  
  37. end;  
  38.  
  39. CloseKey;  
  40.  
  41. //找到或創(chuàng)建Software\ODBC\ODBC.INI\MyAccess,寫入DSN配置信息  
  42.  
  43. if OpenKey('Software\ODBC\ODBC.INI\MyAccess',True) then  
  44.  
  45. begin  
  46.  
  47. WriteString( 'DBQ', 'C:\inetpub\wwwroot\test.mdb' );//數(shù)據(jù)庫目錄  
  48.  
  49. WriteString( 'Description', '我的新數(shù)據(jù)源' );//數(shù)據(jù)源描述  
  50.  
  51. WriteString( 'Driver', 'C:\PWIN98\SYSTEM\odbcjt32.dll' );//驅(qū)動(dòng)程序DLL文件  
  52.  
  53. WriteInteger( 'DriverId', 25 );//驅(qū)動(dòng)程序標(biāo)識(shí)  
  54.  
  55. WriteString( 'FIL', 'Ms Access;' );//Filter依據(jù)  
  56.  
  57. WriteInteger( 'SafeTransaction', 0 );//支持的事務(wù)操作數(shù)目  
  58.  
  59. WriteString( 'UID', '' );//用戶名稱  
  60.  
  61. bData[0] :0;  
  62.  
  63. WriteBinaryData( 'Exclusive', bData, 1 );//非獨(dú)占方式  
  64.  
  65. WriteBinaryData( 'ReadOnly', bData, 1 );//非只讀方式  
  66.  
  67. end  
  68.  
  69. else//創(chuàng)建鍵值失敗  
  70.  
  71. begin  
  72.  
  73. memo1.lines.add('增加ODBC數(shù)據(jù)源失敗');  
  74.  
  75. exit;  
  76.  
  77. end;  
  78.  
  79. CloseKey;  
  80.  
  81. //找到或創(chuàng)建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet  
  82.  
  83. //寫入DSN數(shù)據(jù)庫引擎配置信息  
  84.  
  85. if OpenKey('Software\ODBC\ODBC.INI\MyAccess\Engines\Jet',True) then  
  86.  
  87. begin  
  88.  
  89. WriteString( 'ImplicitCommitSync', 'Yes' );  
  90.  
  91. WriteInteger( 'MaxBufferSize', 512 );//緩沖區(qū)大小  
  92.  
  93. WriteInteger( 'PageTimeout', 10 );//頁超時(shí)  
  94.  
  95. WriteInteger( 'Threads', 3 );//支持的線程數(shù)目  
  96.  
  97. WriteString( 'UserCommitSync', 'Yes' );  
  98.  
  99. end  
  100.  
  101. else//創(chuàng)建鍵值失敗  
  102.  
  103. begin  
  104.  
  105. memo1.lines.add('增加ODBC數(shù)據(jù)源失敗');  
  106.  
  107. exit;  
  108.  
  109. end;  
  110.  
  111. CloseKey;  
  112.  
  113. memo1.lines.add('增加新ODBC數(shù)據(jù)源成功');  
  114.  
  115. Free;  
  116.  
  117. end;  
  118.  
  119. end; 

 

通過上面的代碼,我們就能夠在程序中動(dòng)態(tài)設(shè)置ODBC數(shù)據(jù)源了。

【編輯推薦】

  1. C#利用ODP.net連接Oracle數(shù)據(jù)庫
  2. 怎樣把數(shù)據(jù)庫連接字符串存入注冊表中
  3. 利用Sql Server將Excel中的數(shù)據(jù)導(dǎo)入Oracle
  4. ASP通過Oracle Object for OLE對(duì)Oracle查詢
責(zé)任編輯:趙鵬 來源: 設(shè)計(jì)前沿
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)