自动设置odbcprocedure Tsche_mainform.autoodbc(); var registertemp:tregistry; my_driver,dir_name:string; i:integer; index:array[1..10] of integer; begin //创建一个registry实例 registerTemp:=TRegistry.Create; with registerTemp do begin Rootkey:=HKEY_CURRENT_USER; if openkey('Software\ODBC\ODBC.INI\ODBC data sources',true)then if readstring('shays')<>'' then exit else begin //设置根键值为HKEY_LOCAL_MACHINE Rootkey:=HKEY_LOCAL_MACHINE; // 找到Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb) if openkey('Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)',true)then my_driver:=readstring('Driver') else begin Application.MessageBox('增加ODBC数据源失败','警告',MB_ICONHAND); exit; end; closekey; Rootkey:=HKEY_CURRENT_USER; if openkey('Software\ODBC\ODBC.INI\ODBC data sources',true)then writestring('shays','Microsoft Access Driver (*.mdb)') else begin Application.MessageBox('增加ODBC数据源失败','警告',MB_ICONHAND); exit; end; closekey; //找到或创建Software\ODBC\ODBC.INI\shays,写入DSN配置信息 if openkey('Software\ODBC\ODBC.INI\shays',true)then begin dir_name:=ExtractFilePath(Application.ExeName); for i:=1 to 10 do index[i]:=0; i:=1; while Pos('\',dir_name)>0 do begin index[i]:=Pos('\',dir_name); dir_name[Pos('\', dir_name)]:= '/'; i:=i+1; end; dir_name:=ExtractFilePath(Application.ExeName); dir_name:=leftstr(dir_name,index[i-3]);//根据实际目录定下exe文件的目录 //数据库目录 writestring('DBQ',dir_name+'data\shays.mdb'); //数据源描述 writestring('Description','我的数据库设置'); //驱动程序DLL文件 writestring('Driver',my_driver); //驱动程序标识 writeinteger('DriverId',25); //Filter依据 writestring('FIL','MS Access;'); //支持的事务操作数目 writeinteger('safeTransaction',0); //用户名称 writestring('UID',''); end else begin Application.MessageBox('增加ODBC数据源失败!','警告',MB_ICONHAND); exit; end; closekey; //找到或创建software\ODBC\ODBC.INI\shays\Engines\Jet if openkey('software\ODBC\ODBC.INI\shays\Engines\Jet',True)then begin writestring('implicitcommitsync',''); //缓冲区大小 writeinteger('maxbuffersize',512); //页超时 writeinteger('pagetimeout',10); //支持的线程数目 writeinteger('threads',3); writestring('usercommitsync','yes'); end else begin Application.MessageBox('增加ODBC数据源失败!','警告',MB_ICONHAND); exit; end; closekey; end; Free; end; end;
连接字符串是: "Provider=Microsoft.Jet.OleDb.4.0; data source=mydata.mdb"
给我分我可以教你方法!@
ADOQuery1:TADOQuery
DataSource1:TDataSource
ADOConnection:TADOConnectionDataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1在FormCreate事件中
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(Application.ExeName)+'doctor.mdb;Persist Security Info=False';
ADOQuery1.SQL.Add('Select * From Doctor');
ADOQuery1.Active:=True;
var
registertemp:tregistry;
my_driver,dir_name:string;
i:integer;
index:array[1..10] of integer;
begin
//创建一个registry实例
registerTemp:=TRegistry.Create;
with registerTemp do
begin
Rootkey:=HKEY_CURRENT_USER;
if openkey('Software\ODBC\ODBC.INI\ODBC data sources',true)then
if readstring('shays')<>'' then
exit
else
begin
//设置根键值为HKEY_LOCAL_MACHINE
Rootkey:=HKEY_LOCAL_MACHINE;
// 找到Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)
if openkey('Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)',true)then
my_driver:=readstring('Driver')
else
begin
Application.MessageBox('增加ODBC数据源失败','警告',MB_ICONHAND);
exit;
end;
closekey; Rootkey:=HKEY_CURRENT_USER;
if openkey('Software\ODBC\ODBC.INI\ODBC data sources',true)then
writestring('shays','Microsoft Access Driver (*.mdb)')
else
begin
Application.MessageBox('增加ODBC数据源失败','警告',MB_ICONHAND);
exit;
end;
closekey; //找到或创建Software\ODBC\ODBC.INI\shays,写入DSN配置信息
if openkey('Software\ODBC\ODBC.INI\shays',true)then
begin
dir_name:=ExtractFilePath(Application.ExeName);
for i:=1 to 10 do
index[i]:=0; i:=1;
while Pos('\',dir_name)>0 do
begin
index[i]:=Pos('\',dir_name);
dir_name[Pos('\', dir_name)]:= '/';
i:=i+1;
end;
dir_name:=ExtractFilePath(Application.ExeName);
dir_name:=leftstr(dir_name,index[i-3]);//根据实际目录定下exe文件的目录 //数据库目录
writestring('DBQ',dir_name+'data\shays.mdb');
//数据源描述
writestring('Description','我的数据库设置');
//驱动程序DLL文件
writestring('Driver',my_driver);
//驱动程序标识
writeinteger('DriverId',25);
//Filter依据
writestring('FIL','MS Access;');
//支持的事务操作数目
writeinteger('safeTransaction',0);
//用户名称
writestring('UID','');
end
else
begin
Application.MessageBox('增加ODBC数据源失败!','警告',MB_ICONHAND);
exit;
end;
closekey; //找到或创建software\ODBC\ODBC.INI\shays\Engines\Jet
if openkey('software\ODBC\ODBC.INI\shays\Engines\Jet',True)then
begin
writestring('implicitcommitsync','');
//缓冲区大小
writeinteger('maxbuffersize',512);
//页超时
writeinteger('pagetimeout',10);
//支持的线程数目
writeinteger('threads',3);
writestring('usercommitsync','yes');
end
else
begin
Application.MessageBox('增加ODBC数据源失败!','警告',MB_ICONHAND);
exit;
end;
closekey;
end;
Free;
end;
end;
"Provider=Microsoft.Jet.OleDb.4.0; data source=mydata.mdb"
如果我用的数据库文件是access2000的,而有些用户的机器是win98,其驱动是3.51的,这样他们就打不开数据库了。
通常的办法是升级ado,但不知道只换一下ODBCJT32.DLL可不可以?
由于手头没有环境一直都没试过,是否有哪位兄台知道。