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

要實現創建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下測試通過。

 
一個動態生成數據庫連接文件的類
一個動態生成數據庫連接文件的類 作者: 我們知道,數據庫連接文件(.udl)可以動態生成各種數據庫連接的參數,而且它是一個文本文件。所以我們就可以動態生成,以增強程序的靈活性。但是...查看完整版>>一個動態生成數據庫連接文件的類
 
在DELPHI中編程生成ACCESS數據庫文件並創建指向此連接的ODBC數據源
要實現創建ACCESS數據庫文件,我們要用到Windows系統中用來完成ODBC 管理功能的DLL(odbccp32.dll)。 廢話少說,讓我們用個例子來演示吧!(一)在DELPHI中新建一個工程,並在窗體上添加兩個按鈕。然後保存(二)從...查看完整版>>在DELPHI中編程生成ACCESS數據庫文件並創建指向此連接的ODBC數據源
 
在DELPHI程序中自動設置ODBC數據源
摘要:在DELPHI程序中自動設置ODBC數據源在DELPHI數據庫應用程序中,我們訪問數據庫通常有兩種方法.一種是通過BDE數據庫搜索引擎,即利用DELPHI自帶的數據庫驅動程序,這種方法的優點是速度快,但應用範圍有限,當數...查看完整版>>在DELPHI程序中自動設置ODBC數據源
 
在DELPHI程序中自動設置ODBC數據源
在DELPHI數據庫應用程序中,我們訪問數據庫通常有兩種方法.一種是通過BDE數據庫搜索引擎,即利用DELPHI自帶的數據庫驅動程序,這種方法的優點是速度快,但應用範圍有限,當數據庫版本更新時,有可能不能用于操作新的...查看完整版>>在DELPHI程序中自動設置ODBC數據源
 
自動生成--Delphi多層數據庫應用項目源代碼
當設計好數據庫後,開發Delphi多層數據庫應用項目有許多枯燥而重複的體力活要做,如放組件,命名(特別是給每個組件以及字段對象都取一個可讀的名字),關聯,.....等等, 我開發了一個代碼自動生成工具,自動生成應...查看完整版>>自動生成--Delphi多層數據庫應用項目源代碼