Funkcja tworzy nowe źródło ODBC DSN z ewentualnym usunięciem źródła starego
function BOOL SetNewODBC(sNewZrodlo,sOldZrodlo, szDataBase, szServer, szUser, nVersionSQL)
string RegPath,sKey,sValue,sDriver,sServer,sUser,sDataBase,sClass,sData;
number nSize,nType,nResult,nDriver,nServer,nUser,nDataBase;
number nsDriver,nsServer,nsUser,nsDataBase,nsDataSource;
begin
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegPath="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;
if (RegDBKeyExist(RegPath)<0) then
RegPath="SOFTWARE\\ODBC\\ODBC.INI\\"+sOldZrodlo;
if (RegDBKeyExist(RegPath)==1) then
sDataBase="";
sValue="Driver";
sKey = "SOFTWARE\\ODBC\\ODBC.INI\\"+sOldZrodlo;
nDriver = RegDBGetKeyValueEx( sKey, sValue, nType, sDriver, nSize );
sValue="Server";
nServer = RegDBGetKeyValueEx( sKey, sValue, nType, sServer, nSize );
sValue="LastUser";
nUser = RegDBGetKeyValueEx( sKey, sValue, nType, sUser, nSize );
sValue="Database";
nDataBase=RegDBGetKeyValueEx( sKey, sValue, nType, sDataBase, nSize );
if ((nDriver==0)&&(nServer==0)&&(nUser==0)) then
sClass="";
sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;
RegPath="SOFTWARE\\ODBC\\ODBC.INI";
if (RegDBCreateKeyEx(sKey, sClass) < 0) then
WriteLog(1,"- nie można utworzyć źrodła ODBC do "+sNewZrodlo);
else
//Zapis wartosci do nowego zrodla
WriteLog(1,"- Utworzono klucz ODBC \""+sNewZrodlo+"\"");
nType=REGDB_STRING;
sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;
nsDriver = RegDBSetKeyValueEx ( sKey, "Driver", nType, sDriver, nSize );
nsServer = RegDBSetKeyValueEx ( sKey, "Server", nType, sServer, nSize );
nsUser = RegDBSetKeyValueEx ( sKey, "LastUser", nType, sUser, nSize );
if (StrLength(sDataBase)>0) then
sDataBase=szDataBase;
nsDataBase = RegDBSetKeyValueEx ( sKey, "Database", nType, sDataBase, nSize );
endif;
if (nsDriver==0) then WriteLog(2,"- utworzono klucz 'Driver' wartość \""+sDriver+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'Driver'"); endif;
if (nsServer==0) then WriteLog(2,"- utworzono klucz 'Server' wartość \""+sServer+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'Server'"); endif;
if (nsUser==0) then WriteLog(2,"- utworzono klucz 'LastUser' wartość \""+sUser+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'LastUser'"); endif;
if ((StrLength(sDataBase)>0)&&(nsDataBase==0)) then WriteLog(2,"- utworzono klucz 'Database' wartość \""+sDataBase+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'Database'");
endif;
//Utworzenie wpisu do ODBC Data Sources
sKey="SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources";
nsDataSource = RegDBGetKeyValueEx ( sKey, sOldZrodlo, nType, sData, nSize );
if (nsDataSource==0) then
if (RegDBSetKeyValueEx ( sKey, sNewZrodlo, nType, sData, nSize )==0) then
WriteLog(2,"- utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo);
else
WriteLog(2,"- nie utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo);
endif;;
endif;
endif;
else //Brak wszystkich wymaganych danych do utworzenia zrodla ODBC
WriteLog(1,"Brak wszystkich wymaganych danych do utworzenia zrodla ODBC ");
//Usuwam zrodla
endif;
else //brak sOldZrodla - stworz
sClass="";
sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;
RegPath="SOFTWARE\\ODBC\\ODBC.INI";
if (RegDBCreateKeyEx(sKey, sClass) < 0) then
WriteLog(1,"- nie można utworzyć źrodła ODBC do "+sNewZrodlo);
else
//Zapis wartosci do nowego zrodla
WriteLog(1,"- Utworzono klucz ODBC do "+sNewZrodlo);
nType=REGDB_STRING;
sKey="SOFTWARE\\ODBC\\ODBC.INI\\"+sNewZrodlo;
WriteLog(1,"- wyszukiwanie sterownika SQL");
if (nVersionSQL<90) then
if (Is(FILE_EXISTS,WINSYSDIR^"sqlsrv32.dll")) then sDriver = WINSYSDIR^"sqlsrv32.dll";
elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlsrv32.dll")) then sDriver = WINSYSDIR64^"sqlsrv32.dll";
endif;
elseif (nVersionSQL>=90)&&(nVersionSQL<100) then
if (Is(FILE_EXISTS,WINSYSDIR^"sqlncli.dll")) then sDriver = WINSYSDIR^"sqlncli.dll";
elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlncli.dll")) then sDriver = WINSYSDIR64^"sqlncli.dll";
endif;
elseif (nVersionSQL>=100) then
if (Is(FILE_EXISTS,WINSYSDIR^"sqlncli10.dll")) then sDriver = WINSYSDIR^"sqlncli10.dll";
elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlncli10.dll")) then sDriver = WINSYSDIR64^"sqlncli10.dll";
elseif (Is(FILE_EXISTS,WINSYSDIR^"sqlncli.dll")) then sDriver = WINSYSDIR^"sqlncli.dll";
elseif (Is(FILE_EXISTS,WINSYSDIR64^"sqlncli.dll")) then sDriver = WINSYSDIR64^"sqlncli.dll";
endif;
endif;
WriteLog(2,"- sterownik SQL to \""+sDriver+"\"");
nsDriver = RegDBSetKeyValueEx ( sKey, "Driver", nType, sDriver, nSize );
nsServer = RegDBSetKeyValueEx ( sKey, "Server", nType, szServer, nSize );
nsUser = RegDBSetKeyValueEx ( sKey, "LastUser", nType, szUser, nSize );
if (StrLength(szDataBase)>0) then
nsDataBase = RegDBSetKeyValueEx ( sKey, "Database", nType, szDataBase, nSize );
endif;
if (nsDriver==0) then WriteLog(2,"- utworzono klucz 'Driver' wartość \""+sDriver+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'Driver' = \""+sDriver+"\""); endif;
if (nsServer==0) then WriteLog(2,"- utworzono klucz 'Server' wartość \""+szServer+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'Server' = \""+szServer+"\""); endif;
if (nsUser==0) then WriteLog(2,"- utworzono klucz 'LastUser' wartość \""+szUser+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'LastUser'"); endif;
if ((StrLength(szDataBase)>0)&&(nsDataBase==0)) then WriteLog(2,"- utworzono klucz 'Database' wartość \""+szDataBase+"\"");
else WriteLog(2,"- nie utworzono wartość klucza 'Database' = \""+szDataBase+"\"");
endif;
//Utworzenie wpisu do ODBC Data Sources
sKey="SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources";
if StrFind(sDriver,"sqlsrv32.dll")>=0 then sData = "SQL Server"; endif;
if StrFind(sDriver,"sqlncli.dll")>=0 then sData = "SQL Native Client"; endif;
if StrFind(sDriver,"sqlncli10.dll")>=0 then sData = "SQL Server Native Client 10.0"; endif;
/*
if (nVersionSQL<90) then sData = "SQL Server";
elseif (nVersionSQL>=90)&&(nVersionSQL<100) then sData = "SQL Native Client";
elseif (nVersionSQL>=100) then sData = "SQL Server Native Client 10.0";
endif;
*/
if StrLength(sData)>0 then
if (RegDBSetKeyValueEx ( sKey, sNewZrodlo, nType, sData, nSize )==0) then
WriteLog(2,"- utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo+ " na \""+sData+"\"");
else
WriteLog(2,"- nie utworzono wartość klucza ODBC Data Sources do "+sNewZrodlo+ " na \""+sData+"\"");
endif;
else
WriteLog(1,"Błąd rozpoznania sterownika SQL. Nie można utworzyć ODBC Data Sources do \""+sNewZrodlo+ "\"");
endif;
endif;
endif;
else
WriteLog(2,"Istnieje klucz ODBC "+sNewZrodlo);
endif;
end;