我想在程序中动态建立数据库与ODBC数据源的连接,以下代码能添加到用户DSN,但提示找不到驱动的路径,希望大家多帮忙!!!!var
registertemp:tregistry;
bdata:array[0..10] of byte;begin
registertemp:=tregistry.Create;
with registertemp do
begin
rootkey:=hkey_users;
if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\ODBC.INI\ODBC Data Sources',true) then
begin
writestring('11','Driver do microsoft Access(*.mdb)');
end
else
begin
memo1.Lines.Add('增加ODBC数据源失败');
exit;
end;
closekey;
if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\odbc.init',true) then
begin
writestring('dbq','e:\矿物局软件\数据库\基础表\minedb.mdb');
writestring('Description','我的数据源');
writestring('Driver','C:\WINNT\System32\odbcjt32.dll');
writeinteger('Driverid',25);
writestring('fil','Ms Access');
writeinteger('safeTransaction',0);
writestring('uid','');
bdata[0]:=0;
writebinarydata('exclusive',bdata,1);
writebinarydata('readonly',bdata,1);
end
else
begin
memo1.Lines.Add('增加数据源失败');
exit;
end;
closekey;
if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\odbc.init',true) then
begin
writestring('implicitcommitsync',' ');
writeinteger('maxbuffersize',2048);
writeinteger('pagetimeout',5);
writeinteger('threads',3);
writestring('usercommitsync','yes');
end
else
begin
memo1.lines.add('增加数据源失败');
exit;
end;
closekey;
memo1.lines.add('增加数据源成功');
free;
end;
end;
end.
大家没有验证的代码请不要添加,分不够可以再加!!!!!!!!!
registertemp:tregistry;
bdata:array[0..10] of byte;begin
registertemp:=tregistry.Create;
with registertemp do
begin
rootkey:=hkey_users;
if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\ODBC.INI\ODBC Data Sources',true) then
begin
writestring('11','Driver do microsoft Access(*.mdb)');
end
else
begin
memo1.Lines.Add('增加ODBC数据源失败');
exit;
end;
closekey;
if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\odbc.init',true) then
begin
writestring('dbq','e:\矿物局软件\数据库\基础表\minedb.mdb');
writestring('Description','我的数据源');
writestring('Driver','C:\WINNT\System32\odbcjt32.dll');
writeinteger('Driverid',25);
writestring('fil','Ms Access');
writeinteger('safeTransaction',0);
writestring('uid','');
bdata[0]:=0;
writebinarydata('exclusive',bdata,1);
writebinarydata('readonly',bdata,1);
end
else
begin
memo1.Lines.Add('增加数据源失败');
exit;
end;
closekey;
if openkey('S-1-5-21-823518204-1580818891-725345543-500\Software\ODBC\odbc.init',true) then
begin
writestring('implicitcommitsync',' ');
writeinteger('maxbuffersize',2048);
writeinteger('pagetimeout',5);
writeinteger('threads',3);
writestring('usercommitsync','yes');
end
else
begin
memo1.lines.add('增加数据源失败');
exit;
end;
closekey;
memo1.lines.add('增加数据源成功');
free;
end;
end;
end.
大家没有验证的代码请不要添加,分不够可以再加!!!!!!!!!
一个一个学着搬过用..就是了..
function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;lpszDriverString: String; lpszAttributes: String): Integer;stdcall;external 'ODBCCP32.DLL';
实现//这个是用户级的{const
ODBC_ADD_DSN = 1; // Add data source
ODBC_CONFIG_DSN = 2; // Configure (edit) data source
ODBC_REMOVE_DSN = 3; // Remove data source
ODBC_ADD_SYS_DSN = 4; // add a system DSN
ODBC_CONFIG_SYS_DSN = 5; // Configure a system DSN
ODBC_REMOVE_SYS_DSN = 6; // remove a system DSN
}//例子
procedure TForm1.SeSkinButton3Click(Sender: TObject);
begin
SQLConfigDataSource(0, 4, 'Microsoft Access Driver (*.mdb)',
'DSN=TianCai' + Chr(0) +
'Server=(local)' + Chr(0) +
'DBQ=e:\TianCai.mdb' + Chr(0) +
'Description=Alex');
end;
给分吧!
ODBC_ADD_DSN = 1;
DNS_NAME = 'abcdefg';
...
SQLConfigDataSource(0, ODBC_ADD_DSN, 'Microsoft Access Driver (*.mdb)',
'DSN=' + DSN_NAME + Chr(0) +
'Server=(local)' + Chr(0) +
'DBQ=' + pAccessFile + Chr(0) +
'Description=Alex');
with tempreg do
begin
rootkey:=HKEY_LOCAL_MACHINE;
if KeyExists('Software\ODBC\ODBC.INI\wxzx')=false then
begin
if openkey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
begin
writestring('wxzx','Microsoft Access Driver (*.mdb)');
end
else
begin
showmessage('增加ODBC数据源失败!');
halt;
end;
closekey;
v_path:=extractfiledir(application.exename)+'\wxzx.mdb';
rootkey:=HKEY_LOCAL_MACHINE;
if openkey('Software\ODBC\ODBC.INI\wxzx',true) then
begin
writestring('DBQ',v_path);
writestring('Description','wxzx');
writestring('Driver','C:\WINDOWS\SYSTEM\ODBCJT32.DLL');
writeinteger('DriverID',25);
writestring('FIL','MS Access;');
writeinteger('SafeTransactions',0);
writestring('UID','bbs');
byte1[0]:=0;
writebinarydata('Exclusive',byte1,1);
writebinarydata('ReadOnly',byte1,1);
end
else
begin
showmessage('增加ODBC数据源失败!');
halt;
end;
closekey;
rootkey:=HKEY_LOCAL_MACHINE;
if openkey('Software\ODBC\ODBC.INI\wxzx\Engines\Jet',true) then
begin
writestring('ImplicitCommitSync','Yes');
writeinteger('MaxBufferSize',2048);
writeinteger('PageTimeout',5);
writeinteger('Threads',5);
writestring('UserCommitSync','Yes');
end
else
begin
showmessage('增加ODBC数据源失败!');
halt;
end;
closekey;
end
else
begin
closekey;
v_path:=extractfiledir(application.exename)+'\wxzx.mdb';
rootkey:=HKEY_LOCAL_MACHINE;
if openkey('Software\ODBC\ODBC.INI\wxzx',true) then
begin
writestring('DBQ',v_path);
closekey;
end
end;
end;