piątek, 1 kwietnia 2011

Utworzenie źródła ODBC DSN w InstallShield do serwera MSSQL

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;

Brak komentarzy:

Prześlij komentarz