用修改注册表方式添加ODBC连接出现问题代码如下,运行之后无问题,查看注册表中键值与手工配置完全一样,可是系统的管理工具中虽然有了这个ODBC连接,却没有指向我需要的Execl文件,请问是什么原因呢? reg := TRegistry.Create;
//建立一个Registry实例
with reg do
begin
REG.RootKey:=HKEY_LOCAL_MACHINE;
//REG.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True);
//设置根键值为HKEY_LOCAL_MACHINE
//找到Software\ODBC\ODBC.INI\ODBC Data Sources
if REG.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then
begin
//注册一个DSN名称
REG.WriteString( 'myexecl' ,'Microsoft Excel Driver (*.xls)' );
end
else
begin
//创建键值失败
ShowMessage('增加ODBC数据源失败');
exit;
end;
REG.CloseKey;
//找到或创建Software\ODBC\ODBC.INI\masdsn 写入DSN配置信息
if REG.OpenKey('Software\ODBC\ODBC.INI\myexecl' ,True) then
begin
// REG.WriteBinaryData( 'ReadOnly',BUF,01);
REG.WriteString( 'DBQ',Edit6.Text);
REG.WriteString( 'DefaultDir','F:\');
REG.WriteString( 'Driver' ,'C:\WINDOWS\system32\odbcjt32.dll' );
REG.WriteInteger( 'DriverId' ,790 );
REG.WriteString( 'FIL' ,'excel 8.0;');
REG.WriteInteger( 'SafeTransactions' ,0 );
REG.WriteString( 'UID' ,'');
end
else
//创建键值失败 begin
Showmessage('增加ODBC数据源失败');
exit;
end;
if REG.OpenKey('Engines' ,True) then
begin
if REG.OpenKey('Execl' ,True) then
begin
BUF[1]:=01;
REG.WriteBinaryData( 'FirstRowHasNames',BUF ,1);
REG.WriteString( 'ImplicitCommitSync','');
REG.WriteInteger( 'MaxScanRows' ,8 );
REG.WriteInteger( 'Threads' ,3 );
REG.WriteString( 'UserCommitSync' ,'Yes');
end;
end ; reg.CloseKey;
reg.Free;
//ShowMessage('增加ODBC数据源成功'); end;
//建立一个Registry实例
with reg do
begin
REG.RootKey:=HKEY_LOCAL_MACHINE;
//REG.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True);
//设置根键值为HKEY_LOCAL_MACHINE
//找到Software\ODBC\ODBC.INI\ODBC Data Sources
if REG.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then
begin
//注册一个DSN名称
REG.WriteString( 'myexecl' ,'Microsoft Excel Driver (*.xls)' );
end
else
begin
//创建键值失败
ShowMessage('增加ODBC数据源失败');
exit;
end;
REG.CloseKey;
//找到或创建Software\ODBC\ODBC.INI\masdsn 写入DSN配置信息
if REG.OpenKey('Software\ODBC\ODBC.INI\myexecl' ,True) then
begin
// REG.WriteBinaryData( 'ReadOnly',BUF,01);
REG.WriteString( 'DBQ',Edit6.Text);
REG.WriteString( 'DefaultDir','F:\');
REG.WriteString( 'Driver' ,'C:\WINDOWS\system32\odbcjt32.dll' );
REG.WriteInteger( 'DriverId' ,790 );
REG.WriteString( 'FIL' ,'excel 8.0;');
REG.WriteInteger( 'SafeTransactions' ,0 );
REG.WriteString( 'UID' ,'');
end
else
//创建键值失败 begin
Showmessage('增加ODBC数据源失败');
exit;
end;
if REG.OpenKey('Engines' ,True) then
begin
if REG.OpenKey('Execl' ,True) then
begin
BUF[1]:=01;
REG.WriteBinaryData( 'FirstRowHasNames',BUF ,1);
REG.WriteString( 'ImplicitCommitSync','');
REG.WriteInteger( 'MaxScanRows' ,8 );
REG.WriteInteger( 'Threads' ,3 );
REG.WriteString( 'UserCommitSync' ,'Yes');
end;
end ; reg.CloseKey;
reg.Free;
//ShowMessage('增加ODBC数据源成功'); end;
其实我也不会,我用系统管理中的ODBC配置了下,然后发现如上的错误。
建议你以后可以将注册表中的那些需要修改的项导出,然后复制要修改的值就不容易错了。