我已经,修改了你的程序,添加了oracle数据源的添加办法,其实和sql server差别不是很大。代码如下,希望你们也更新。呵呵,我比较喜欢这个论坛。 function createOracleDSN(const FDSN,FServer,Fuser:string):boolean; var RegisterTemp:TRegistry; s:string; begin RegisterTemp:=Tregistry.Create;
RegisterTemp.RootKey:=HKEY_LOCAL_MACHINE;
//首先判断此DSN是否已经存在,如在,则不用继续下去 if registertemp.OpenKey('Software\ODBC\ODBC.INI\' + FDSN, False) then begin RegisterTemp.CloseKey; Result := True; RegisterTemp.Free; exit; end; RegisterTemp.CloseKey; //判断Oracle的驱动程序是否已经安装 if RegisterTemp.OpenKey('Software\ODBC\ODBCINST.INI\ODBC Drivers', False) then begin s := RegisterTemp.ReadString('Oracle ODBC Driver'); if UpperCase(S) <> 'INSTALLED' then begin RegisterTemp.CloseKey; Result := False; RegisterTemp.Free; exit; end; end else begin RegisterTemp.CloseKey; Result := True; RegisterTemp.Free; exit; end; RegisterTemp.CloseKey; //寻找oracle的驱动程序路径 if RegisterTemp.OpenKey('Software\ODBC\ODBCINST.INI\Oracle ODBC Driver', False) then begin s := RegisterTemp.ReadString('Driver'); if S = ' then begin RegisterTemp.CloseKey; Result := False; RegisterTemp.Free; exit; end; end else begin RegisterTemp.CloseKey; Result := True; RegisterTemp.Free; exit; end; RegisterTemp.CloseKey; //注册一个DSN名称 if RegisterTemp.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources', True) then RegisterTemp.WriteString(FDSN, 'Oracle ODBC Driver') else begin RegisterTemp.CloseKey; Result := True; RegisterTemp.Free; exit; end; RegisterTemp.CloseKey; if RegisterTemp.OpenKey('Software\ODBC\ODBC.INI\' + FDSN, True) then begin RegisterTemp.WriteString('Driver', S); RegisterTemp.WriteString('UserID', FUser); RegisterTemp.WriteString('Server', FServer); RegisterTemp.WriteString('Application Attributes','T'); RegisterTemp.WriteString('Attributes','W'); RegisterTemp.WriteString('CloseCursor','F'); RegisterTemp.WriteString('Description','); RegisterTemp.WriteString('DisableMTS','F'); RegisterTemp.WriteString('Failover','T'); RegisterTemp.WriteString('FailoverDelay','10'); RegisterTemp.WriteString('FailoverRetryCount','10'); RegisterTemp.WriteString('Lobs','T'); RegisterTemp.WriteString('Longs','F'); RegisterTemp.WriteString('PrefetchCount','10'); RegisterTemp.WriteString('QueryTimeout','T'); RegisterTemp.WriteString('ResultSets','T'); RegisterTemp.WriteString('Translation DLL','); RegisterTemp.WriteString('Translation Option','0');
Result := True; end else begin RegisterTemp.CloseKey; Result := False; RegisterTemp.Free; exit; end; RegisterTemp.CloseKey; RegisterTemp.Free;