用注册表,程序运行创建ODBC连接
那里面可以设置路径,设置路径时取的你程序所用数据库的路径。
我的Access连接,希望对你有帮助
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,Registry;
type
TFrmMain = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ODBCReg;
end;
var
FrmMain: TFrmMain;
implementation
{$R *.DFM}
//****************************************************************************
// ODBC自动注册演示,本演示自动创建了一个名为MYACCESS的
// Microsoft Access Driver (*.mdb) ODBC数据源
// 数据库路径为程序运行路径下DATABASE目录下的BIBLIO.mdb数据库
// 编写自己的程序时改变一下数据库名即可。若是其他数据库只要作
// 相应的修改即可。
// BY 沈阳大猫
// 2002/01/16
//****************************************************************************
procedure TFrmMain.ODBCReg ;
var
RegODBC : TRegistry;
RegDriver:TRegistry;
bData : array[ 0..0 ] of byte;
DataPath:string; //数据库路径
DataDriver:string; //Microsoft Access Driver (*.mdb)数据库ODBC驱动路径
begin
DataPath:=ExtractFilePath(ParamStr(0));
RegDriver:=TRegistry.Create ;
Try
RegDriver.RootKey:=HKEY_LOCAL_MACHINE;
if RegDriver.KeyExists('Software/ODBC/ODBCINST.INI/Microsoft Access Driver (*.mdb)') then
begin
RegDriver.OpenKey('Software/ODBC/ODBCINST.INI/Microsoft Access Driver (*.mdb)',true);
DataDriver:=RegDriver.ReadString('Driver');
end;
RegDriver.CloseKey;
RegDriver.Free;
inherited;
except
showmessage('没有发现MS ACCESS的ODBC驱动,请先安装MS OFFICE 2000!!!!');
end;
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
RegODBC := TRegistry.Create;
//建立一个Registry实例
with RegODBC do
begin
try
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( 'FSLDAGL', '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/FSLDAGL',True) then
begin
WriteString( 'DBQ', DataPath+'DATABASE/myDB.mdb' );//数据库目录定为程序运行目录下的DATABASE目录
WriteString( 'Description','XXX档案管理系统' );//数据源描述
WriteString( 'Driver', DataDriver );//驱动程序DLL文件由注册表取得已经安装的access数据库驱动路径
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/FSLDAGL/Engines/Jet',True) then
begin
WriteString( 'ImplicitCommitSync', 'Yes' );
WriteInteger( 'MaxBufferSize',2048);//缓冲区大小
WriteInteger( 'PageTimeout', 5 );//页超时
WriteInteger( 'Threads', 3 );//支持的线程数目
WriteString( 'UserCommitSync', 'Yes' );
end
else//创建键值失败
begin
memo1.lines.add('增加ODBC数据源失败');
exit;
end;
finally
CloseKey;
memo1.lines.add('增加新ODBC数据源成功');
Free;
end;
end;
end;
procedure TFrmMain.Button1Click(Sender: TObject);
begin
ODBCReg;
end;
procedure TFrmMain.FormCreate(Sender: TObject);
var
RegODBC : TRegistry;
begin
RegODBC:=TRegistry.Create ;
try
RegODBC.RootKey := HKEY_LOCAL_MACHINE;
if RegODBC.KeyExists('Software/ODBC/ODBC.INI/FSLDAGL')=false then
begin
ODBCReg;
end;
//finally
except
RegODBC.CloseKey;
RegODBC.Free;
inherited;
showmessage('数据库配置失败!');
end;
end;
end.