不用BDE很久了。发几个我以前用BDE连接Access数据的代码,希望对你能有帮助,思路就是动态创建ODBC数据源。
procedure CreatMDBODBC(ODBCNAme,MDBFileName:string);//动态创建一个ODBC数据源
procedure EditMDBODBC(ODBCNAme,MDBFileName:string);//动态修改一个ODBC数据源的数据库文件位置
procedure OpenDB(DB:TDataBase;DBName,MDBFileName,AliasName:string);
function CheckMDBODBC(ODBCName:string):boolean;//检查ODBC是否存在
function TFrmMain.CheckMDBODBC(ODBCName:string):boolean;//检查ODBC是否存在
var
ODBC_Check:boolean;
var registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE; //设置根键值为HKEY_LOCAL_MACHINE
//找到或创建Software.INI ,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+ODBCName,false) then
begin
ODBC_Check:=true;
end
else //创建键值失败
begin
ODBC_Check:=false;
end;
CloseKey;
Free;
end;
result:=ODBC_Check;
end;
procedure TFrmMain.OpenDB(DB:TDataBase;DBName,MDBFileName,AliasName:string);
begin
if (not CheckMDBODBC(DBName)) then
CreatMDBODBC(DBName,MDBFileName)
else
EditMDBODBC(DBName,MDBFileName);
DB.Close;
DB.AliasName:=DBName;
DB.DatabaseName:=AliasName;
DB.Open;
end;
procedure TFrmMain.EditMDBODBC(ODBCNAme,MDBFileName:string);
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.INI ,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+ODBCName,false) then
begin
WriteString( 'DBQ', MDBFileName );//数据库目录
end
else //创建键值失败
begin
CreatMDBODBC(ODBCNAme,MDBFileName);
exit;
end;
CloseKey;
Free;
end;
end;
// 注意应在USES语句中包含Registry }
procedure TFrmMain.CreatMDBODBC(ODBCName,MDBFileName:string);
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.INIData Sources
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin
//注册一个DSN名称
WriteString( ODBCName, 'Microsoft Access Driver (*.mdb)' );
end
else
begin
//创建键值失败
exit;
end;
CloseKey;
//找到或创建Software.INI ,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+ODBCName,True) then
begin
WriteString( 'DBQ', MDBFileName );//数据库目录
WriteString( 'Description', '我的新数据源' );//数据源描述
WriteString( 'Driver', 'C: 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
exit;
end;
CloseKey;
//找到或创建Software.INI
//写入DSN数据库引擎配置信息
if OpenKey('SOFTWARE/ODBC/ODBC.INI/'+ODBCName+'/Engines/Jet',True) then
begin
WriteString( 'ImplicitCommitSync', 'Yes' );
WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
WriteInteger( 'PageTimeout', 10 );//页超时
WriteInteger( 'Threads', 3 );//支持的线程数目
WriteString( 'UserCommitSync', 'Yes' );
end
else//创建键值失败
begin
exit;
end;
CloseKey;
Free;
end;
end;