| 導購 | 订阅 | 在线投稿
分享
 
 
 

在DELPHI中編程生成ACCESS數據庫文件並創建指向此連接的ODBC數據源

來源:互聯網網民  2006-06-06 05:18:43  評論

要實現創建ACCESS數據庫文件,我們要用到Windows系統中用來完成ODBC 管理功能的DLL(odbccp32.dll)。

廢話少說,讓我們用個例子來演示吧!

(一)在DELPHI中新建一個工程,並在窗體上添加兩個按鈕。然後保存

(二)從系統中搜索odbccp32.dll和odbcint.dll,一般在C:\WINDOWS\system32中,並將這兩個文件拷貝到在上一步我們創建的DELPHI工程的同級目錄下

(三)在程序的中添加關于常量的定義

const

ODBC_ADD_DSN = 1; // 添加數據源

ODBC_CONFIG_DSN = 2; // 配置數據源

ODBC_REMOVE_DSN = 3; // 刪除數據源

ODBC_ADD_SYS_DSN = 4; // 添加系統DSN

ODBC_CONFIG_SYS_DSN = 5; // 配置系統DSN

ODBC_REMOVE_SYS_DSN = 6; // 刪除系統DSN

(四)在程序的type處添加聲明

type

TSQLConfigDataSource = function( hwndParent: HWND;

fRequest: WORD;

lpszDriver: LPCSTR;

lpszAttributes: LPCSTR ) : BOOL; stdcall;

(五)用來完成建立DSN並生成數據庫文件的代碼如下:

procedure TForm1.Button1Click(Sender: TObject);

var

pFn: TSQLConfigDataSource;

hLib: LongWord;

strDriver: string;

strAttr: string;

strFile: string;

fResult: BOOL;

srInfo : TSearchRec;

begin

//獲得程序所在路徑

strFile := ExtractFilePath(ParamStr(0))+'Test.MDB';

//加載動態庫

hLib := LoadLibrary( 'ODBCCP32' );

if( hLib <> NULL ) then

begin

@pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );

if( @pFn <> nil ) then

begin

// 重新建立DSN

strDriver := 'Microsoft Access Driver (*.mdb)';

strAttr := Format( 'DSN=TestDSN'+#0+

'DBQ=%s'+#0+

'Exclusive=1'+#0+

'Description=Test Data'+#0+#0,

[strFile] );

fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );

if not fResult then ShowMessage( '創建DSN失敗!' );

// 檢測/創建同DSN關聯的 MDB 文件

if( FindFirst( strFile, 0, srInfo ) <> 0 ) then

begin

strDriver := 'Microsoft Access Driver (*.mdb)';

//,"CREATE_DB"的調用是Access(MS Jet引擎)的專有調用,類似的還有COMPACT_DB和REPAIR_DB等

strAttr := Format( 'DSN=TestDSN'+#0+

'DBQ=%s'+#0+

'Exclusive=1'+#0+

'Description=Test Data'+#0+

'CREATE_DB="%s"'#0+#0,

[strFile,strFile] );

fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );

if not fResult then ShowMessage( '創建MDB文件失敗' );

end;

FindClose( srInfo );

end;

FreeLibrary( hLib );

end else ShowMessage( '無法加載ODBCCP32.DLL' );

end;

(六)用來動態創建ODBC的DSN數據源代碼

procedure TForm1.Button2Click(Sender: TObject);

var

registerTemp : TRegistry;

bData : array[ 0..0 ] of byte;

begin

registerTemp := TRegistry.Create;

with registerTemp do

begin

RootKey:=HKEY_LOCAL_MACHINE;

//找到Software\ODBC\ODBC.INI\ODBC Data Sources

if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then

begin //注冊DSN名稱

WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)' );

end else begin

showmessage('添加ODBC數據源失敗');

exit;

end;

CloseKey;

//找到或創建Software\ODBC\ODBC.INI\MyAccess,寫入DSN配置信息

if OpenKey('Software\ODBC\ODBC.INI\MyAccess',True) then

begin

WriteString( 'DBQ', ExtractFilePath(ParamStr(0))+'Test.MDB' );//數據庫目錄,連接您的數據庫

WriteString( 'Description','我的新數據源' );//數據源描述

WriteString( 'Driver', 'C:\WINDOWS\system32\odbcjt32.dll' );//驅動程序DLL文件

WriteInteger( 'DriverId', 25 );

//驅動程序標識

WriteString( 'FIL', 'Ms Access;' );

//Filter依據

WriteInteger( 'SafeTransaction', 0 );

//支持的事務操作數目

WriteString( 'admin', '' );//用戶名稱

bData[0] := 0;

WriteBinaryData( 'Exclusive', bData, 1 );

//非獨占方式

WriteBinaryData( 'ReadOnly', bData, 1 );

//非只讀方式

end else begin

showmessage('添加ODBC數據源失敗');

exit;

end;

CloseKey;

//找到或創建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet

//寫入DSN數據庫引擎配置信息

if OpenKey('Software\ODBC\ODBC.INI\MyAccess\Engines\Jet',True) then

begin

WriteString( 'ImplicitCommitSync', 'Yes' );

WriteInteger( 'MaxBufferSize', 512 );//緩沖區大小

WriteInteger( 'PageTimeout', 10 );//頁超時

WriteInteger( 'Threads', 3 );//支持的線程數目

WriteString( 'UserCommitSync', 'Yes' );

end else//創建鍵值失敗

begin

showmessage('增加ODBC數據源失敗');

exit;

end;

CloseKey;

showmessage('增加新ODBC數據源成功');

Free;

end;

end;

(七)F9運行程序,首先點擊BUTTON1,然後你可以在程序的同級目錄下找打新建立的MDB文件,Test.MDB。然後打開控制面板->管理->ODBC數據源,你會發現在系統DSN這一頁面中多了一個TestDSN項,打開後可以看到它指向程序創建的Test.mdb。然後點擊BUTTON2,待彈出增加新ODBC數據源成功'的對話框後,再次轉到ODBC數據源查看,你會發現在系統DSN中又多了一個Myaccess項,它也指向由程序創建的Test.mdb。如果有興趣,你還可以注意一下注冊表的變化,那樣,你會對程序中的代碼有更直觀的認識。

(八)以上程序在WinXp,DELPHI7下測試通過。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
要實現創建ACCESS數據庫文件,我們要用到Windows系統中用來完成ODBC 管理功能的DLL(odbccp32.dll)。 廢話少說,讓我們用個例子來演示吧! (一)在DELPHI中新建一個工程,並在窗體上添加兩個按鈕。然後保存 (二)從系統中搜索odbccp32.dll和odbcint.dll,一般在C:\WINDOWS\system32中,並將這兩個文件拷貝到在上一步我們創建的DELPHI工程的同級目錄下 (三)在程序的中添加關于常量的定義 const ODBC_ADD_DSN = 1; // 添加數據源 ODBC_CONFIG_DSN = 2; // 配置數據源 ODBC_REMOVE_DSN = 3; // 刪除數據源 ODBC_ADD_SYS_DSN = 4; // 添加系統DSN ODBC_CONFIG_SYS_DSN = 5; // 配置系統DSN ODBC_REMOVE_SYS_DSN = 6; // 刪除系統DSN (四)在程序的type處添加聲明 type TSQLConfigDataSource = function( hwndParent: HWND; fRequest: WORD; lpszDriver: LPCSTR; lpszAttributes: LPCSTR ) : BOOL; stdcall; (五)用來完成建立DSN並生成數據庫文件的代碼如下: procedure TForm1.Button1Click(Sender: TObject); var pFn: TSQLConfigDataSource; hLib: LongWord; strDriver: string; strAttr: string; strFile: string; fResult: BOOL; srInfo : TSearchRec; begin //獲得程序所在路徑 strFile := ExtractFilePath(ParamStr(0))+'Test.MDB'; //加載動態庫 hLib := LoadLibrary( 'ODBCCP32' ); if( hLib <> NULL ) then begin @pFn := GetProcAddress( hLib, 'SQLConfigDataSource' ); if( @pFn <> nil ) then begin // 重新建立DSN strDriver := 'Microsoft Access Driver (*.mdb)'; strAttr := Format( 'DSN=TestDSN'+#0+ 'DBQ=%s'+#0+ 'Exclusive=1'+#0+ 'Description=Test Data'+#0+#0, [strFile] ); fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] ); if not fResult then ShowMessage( '創建DSN失敗!' ); // 檢測/創建同DSN關聯的 MDB 文件 if( FindFirst( strFile, 0, srInfo ) <> 0 ) then begin strDriver := 'Microsoft Access Driver (*.mdb)'; //,"CREATE_DB"的調用是Access(MS Jet引擎)的專有調用,類似的還有COMPACT_DB和REPAIR_DB等 strAttr := Format( 'DSN=TestDSN'+#0+ 'DBQ=%s'+#0+ 'Exclusive=1'+#0+ 'Description=Test Data'+#0+ 'CREATE_DB="%s"'#0+#0, [strFile,strFile] ); fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] ); if not fResult then ShowMessage( '創建MDB文件失敗' ); end; FindClose( srInfo ); end; FreeLibrary( hLib ); end else ShowMessage( '無法加載ODBCCP32.DLL' ); end; (六)用來動態創建ODBC的DSN數據源代碼 procedure TForm1.Button2Click(Sender: TObject); var registerTemp : TRegistry; bData : array[ 0..0 ] of byte; begin registerTemp := TRegistry.Create; with registerTemp do begin RootKey:=HKEY_LOCAL_MACHINE; //找到Software\ODBC\ODBC.INI\ODBC Data Sources if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then begin //注冊DSN名稱 WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)' ); end else begin showmessage('添加ODBC數據源失敗'); exit; end; CloseKey; //找到或創建Software\ODBC\ODBC.INI\MyAccess,寫入DSN配置信息 if OpenKey('Software\ODBC\ODBC.INI\MyAccess',True) then begin WriteString( 'DBQ', ExtractFilePath(ParamStr(0))+'Test.MDB' );//數據庫目錄,連接您的數據庫 WriteString( 'Description','我的新數據源' );//數據源描述 WriteString( 'Driver', 'C:\WINDOWS\system32\odbcjt32.dll' );//驅動程序DLL文件 WriteInteger( 'DriverId', 25 ); //驅動程序標識 WriteString( 'FIL', 'Ms Access;' ); //Filter依據 WriteInteger( 'SafeTransaction', 0 ); //支持的事務操作數目 WriteString( 'admin', '' );//用戶名稱 bData[0] := 0; WriteBinaryData( 'Exclusive', bData, 1 ); //非獨占方式 WriteBinaryData( 'ReadOnly', bData, 1 ); //非只讀方式 end else begin showmessage('添加ODBC數據源失敗'); exit; end; CloseKey; //找到或創建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet //寫入DSN數據庫引擎配置信息 if OpenKey('Software\ODBC\ODBC.INI\MyAccess\Engines\Jet',True) then begin WriteString( 'ImplicitCommitSync', 'Yes' ); WriteInteger( 'MaxBufferSize', 512 );//緩沖區大小 WriteInteger( 'PageTimeout', 10 );//頁超時 WriteInteger( 'Threads', 3 );//支持的線程數目 WriteString( 'UserCommitSync', 'Yes' ); end else//創建鍵值失敗 begin showmessage('增加ODBC數據源失敗'); exit; end; CloseKey; showmessage('增加新ODBC數據源成功'); Free; end; end; (七)F9運行程序,首先點擊BUTTON1,然後你可以在程序的同級目錄下找打新建立的MDB文件,Test.MDB。然後打開控制面板->管理->ODBC數據源,你會發現在系統DSN這一頁面中多了一個TestDSN項,打開後可以看到它指向程序創建的Test.mdb。然後點擊BUTTON2,待彈出增加新ODBC數據源成功'的對話框後,再次轉到ODBC數據源查看,你會發現在系統DSN中又多了一個Myaccess項,它也指向由程序創建的Test.mdb。如果有興趣,你還可以注意一下注冊表的變化,那樣,你會對程序中的代碼有更直觀的認識。 (八)以上程序在WinXp,DELPHI7下測試通過。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有