//你自己对比一下吧
function CreateODBC(DSN, LoginName, ServerName: string): Boolean;
var
RegisterTemp: TRegistry;
Os, SystemRoot: string;
begin
Result := False;
RegisterTemp := TRegistry.Create;
with RegisterTemp do try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then
WriteString(DSN, 'SQL Server' ) else Exit;
CloseKey;
(*ZsGetSystemVersion;*)
/// 判断操作系统
OpenKey('Software\Microsoft\Windows\CurrentVersion', False);
if ReadString('ProductId') <> '' then
begin
Os := 'Windows';
SystemRoot := ReadString('SystemRoot');
end else
begin
CloseKey;
OpenKey('Software\Microsoft\Windows NT\CurrentVersion', False);
if ReadString('ProductId') <> '' then
begin
Os := 'Winnt';
SystemRoot := ReadString('SystemRoot');
end;
end;
///
CloseKey;
if OpenKey('Software\ODBC\ODBC.INI\' + DSN, True) then
begin
if UpperCase(Os) = 'WINNT' then
begin
if FileExists(SystemRoot + '\System32\sqlsrv32.dll') then
WriteString( 'Driver', SystemRoot + '\System32\sqlsrv32.dll') //驱动程序DLL文件
else
begin
MessageDlg('缺少文件sqlsrv32.dll',mterror,[mbok],0);
Result:=False;
Exit;
end;
end else if UpperCase(Os) = 'WINDOWS' then begin
if FileExists(SystemRoot + '\System\sqlsrv32.dll') then
WriteString('Driver', SystemRoot + '\System\sqlsrv32.dll' )
else begin
MessageDlg('缺少文件sqlsrv32.dll', mtError, [mbok], 0);
Result := False;
Exit;
end;
end;
WriteString('Database', C_SQLServerDataBaseName);
WriteString('LastUser', LoginName);
WriteString('Server', ServerName);
Result := True;
end else Exit;
finally
CloseKey;
Free;
end;
end;
function CreateODBC(DSN, LoginName, ServerName: string): Boolean;
var
RegisterTemp: TRegistry;
Os, SystemRoot: string;
begin
Result := False;
RegisterTemp := TRegistry.Create;
with RegisterTemp do try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then
WriteString(DSN, 'SQL Server' ) else Exit;
CloseKey;
(*ZsGetSystemVersion;*)
/// 判断操作系统
OpenKey('Software\Microsoft\Windows\CurrentVersion', False);
if ReadString('ProductId') <> '' then
begin
Os := 'Windows';
SystemRoot := ReadString('SystemRoot');
end else
begin
CloseKey;
OpenKey('Software\Microsoft\Windows NT\CurrentVersion', False);
if ReadString('ProductId') <> '' then
begin
Os := 'Winnt';
SystemRoot := ReadString('SystemRoot');
end;
end;
///
CloseKey;
if OpenKey('Software\ODBC\ODBC.INI\' + DSN, True) then
begin
if UpperCase(Os) = 'WINNT' then
begin
if FileExists(SystemRoot + '\System32\sqlsrv32.dll') then
WriteString( 'Driver', SystemRoot + '\System32\sqlsrv32.dll') //驱动程序DLL文件
else
begin
MessageDlg('缺少文件sqlsrv32.dll',mterror,[mbok],0);
Result:=False;
Exit;
end;
end else if UpperCase(Os) = 'WINDOWS' then begin
if FileExists(SystemRoot + '\System\sqlsrv32.dll') then
WriteString('Driver', SystemRoot + '\System\sqlsrv32.dll' )
else begin
MessageDlg('缺少文件sqlsrv32.dll', mtError, [mbok], 0);
Result := False;
Exit;
end;
end;
WriteString('Database', C_SQLServerDataBaseName);
WriteString('LastUser', LoginName);
WriteString('Server', ServerName);
Result := True;
end else Exit;
finally
CloseKey;
Free;
end;
end;
SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,
‘SQL Server',
‘DSN=Record_ODBC'+ chr(0) +
‘Server=(local)'+ chr(0) +
‘Database=DatabaseName'+ chr(0) +
‘Description=动态配置ODBC’);
要是不能用你扁我,怎么样,爽吧!
SQLConfigDataSource
SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,
‘SQL Server', //数据库类型
‘DSN=Record_ODBC'+ chr(0) + //设置数据源名称
‘Server=(local)'+ chr(0) + //SQL Server数据库服务器名称
‘Database=DatabaseName'+ chr(0) + //数据库名称
‘Description=动态配置ODBC’ //描述
……………………); //可以继续添加其他配置项
必须声明如下:
function SQLConfigDataSource(hwndParent: Integer;fRequest: Integer; lpszDriverString: String; lpszAttributes: String): Integer; stdcall;external ‘ODBCCP32.DLL';
帮帮忙吧,老兄,问题解决后给分.
var registertemp:tregistry;
begin
registertemp:=tregistry.create;
with registertemp do
begin
rootkey:=hkey_local_machine;
if openkey('software\odbc\odbc.ini\odbc data source',true) then //应该是…\odbc data sources'
begin
writestring('pf','sql server');
end;
closekey;
if openkey('software\odbc\odbc.ini\pf',true) then
begin
writestring('database','pfjxc');
writestring('driver','C:\WINDOWS\SYSTEM\SQLSRV32.dll');
writestring('lastuser','sa');
writestring('server','nto_nt1');
end;
closekey;
free;
end;
end;我试了,没有问题,就是少了一个‘s’而已!