以上是建立一個系統DSN的基本信息(其它信息如選項或高級選項等信息也在這裡設置,只不過因采用默認信息,注冊表裡沒有列出),我們在程序中按上述步驟操作注冊表,同樣也能增加一個系統DSN或修改其配置.在下面的例子程序中,將按以上步驟建立一個系統DSN,請注意程序中的注釋.
{*******************************************************
在本程序中,將創建一個ODBC系統數據源(DSN),
數據源名稱:MyAccess 數據源描述:我的新數據源
數據庫類型:Access97
對應數據庫:C:\Inetpub\wwwroot\test.mdb
*******************************************************}
{ 注意應在USES語句中包含Registry }
procedure TForm1.Button1Click(Sender: TObject);
var
registerTemp : TRegistry;
bData : array[ 0..0 ] of byte;
begin
registerTemp := TRegistry.Create;
//建立一個Registry實例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MacHINE;
//設置根鍵值為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//創建鍵值失敗
memo1.lines.add(增加ODBC數據源失敗);
exit;
end;
CloseKey;
//找到或創建Software\ODBC\ODBC.INI
\MyAccess,寫入DSN配置信息
if OpenKey(Software\ODBC\ODBC.INI\MyAccess,True) then
begin
WriteString( DBQ, C:\inetpub\wwwroot\test.mdb );//數據庫目錄
WriteString( Description, 我的新數據源 );//數據源描述
WriteString( Driver, C:\PWIN98\SYSTEM\odbcjt32.dll );//驅動程序DLL文件
WriteInteger( DriverId, 25 );
//驅動程序標識
WriteString( FIL, Ms Access; );
//Filter依據
WriteInteger( SafeTransaction, 0 );
//支持的事務操作數目
WriteString( UID, );//用戶名稱bData[0] := 0;
WriteBinaryData( Exclusive, bData, 1 );
//非獨占方式
WriteBinaryData( ReadOnly, bData, 1 );
//非只讀方式
end
else//創建鍵值失敗
begin
memo1.lines.add(增加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
memo1.lines.add(增加ODBC數據源失敗);
exit;
end;
CloseKey;
memo1.lines.add(增加新ODBC數據源成功);
Free;
end;
end;
以上程序在PWIN98+Delphi3.0下調試通過.