wtorek, 27 października 2009

Wykonanie skryptu SQL z pliku

function BOOL ExecuteSQLScript(szFile, sServerName, sDBName, sDriver, bTrustedConn, sUserName, sUserPwd, bLog)
OBJECT objConn, objRST, pADORecordSetObj, adoCommand; 
STRING sConnString, szADOConnObjID, szADORecordSetObjID; 
BOOL bReturn, bOpenCon;
LIST ListaSQL;
INT i;
STRING szLine, szSQL;
begin                                  
 bReturn = TRUE;    
 bOpenCon = FALSE;
 // Create the connectionstring
    if (sDriver == "") then sConnString = "Provider=sqloledb;";
           else sConnString = "Driver={" + sDriver + "};";
    endif;

 if (bTrustedConn) then //ACA_Log_AppendLine("   using Windows Authentication");
     sConnString = sConnString + "server=" + sServerName + ";";
  sConnString = sConnString + "database=" + sDBName + ";";
  sConnString = sConnString + "Trusted_connection=Yes";
 else //ACA_Log_AppendLine("   using SQL Login");
     sConnString = sConnString + "server=" + sServerName + ";";
  sConnString = sConnString + "uid=" + sUserName + ";";
  sConnString = sConnString + "pwd=" + sUserPwd + ";";
  sConnString = sConnString + "database=" + sDBName;
 endif;

 try
  szADOConnObjID = "ADODB.Connection";
     set objConn = CreateObject(szADOConnObjID);         
   
  if (IsObject(objConn)) then 
   objConn.ConnectionString = sConnString;
   objConn.Open;                            
   bOpenCon = TRUE;      //Połączono 
  else
   if (bLog) then WriteLog(1,"Nie moża utworzyć obiektu połączenia ADODB.Connection do "+sDBName); endif;  
  endif;
    
  
 catch             
  bOpenCon = FALSE;
  bReturn = FALSE;
  if (bLog) then WriteLog(1,"Nie uzyskano połączenia z bazą "+sDBName); endif;  
 endcatch;
 
 
if (bOpenCon) then  //Jezeli połączono to odczytaj plik i wykonaj skrypty

 szSQL = "";
 ListaSQL = ListCreate(STRINGLIST);
 if Is(FILE_EXISTS,szFile) then                  
               
  ListReadFromFile(ListaSQL,szFile);                           //Odczytanie pliku do listy
  ListSetIndex(ListaSQL,LISTFIRST);
  for i = 0 to ListCount(ListaSQL)-1 
      ListCurrentString(ListaSQL, szLine);                     //linia po linii 
      if StrLength(szLine)>0 then
       if (StrLength(szLine)=2)&&(StrFind(szLine,"GO")>=0) then 
        //Wykonanie skryptu
        try
            set objRST = objConn.Execute(szSQL);      
            if (bLog) then 
             WriteLog(1,"- SQL: \""+szSQL+"\"");             
            endif; 
           catch             
            if (bLog) then 
             WriteLog(1,"- Błąd wykonania SQL: ");
             WriteLog(2,"\""+szSQL+"\"");
            endif;                       
            bReturn = FALSE;
           endcatch;                         
          
           szSQL = "";
       else
          //dopisywanie linii do postaci sql
          if StrLength(szSQL)>0 then szSQL = szSQL + " " + szLine; 
                          else szSQL = szLine;
          endif;      
       endif;    
      endif; //StrLength = 0; 
   
   ListSetIndex(ListaSQL,LISTNEXT);   
  endfor;
 
 else  
  if (bLog) then WriteLog(1,"- brak pliku skryptu SQL"); endif;
 endif;                
 
 ListDestroy(ListaSQL);
 set objConn = NOTHING;
 set objRST  = NOTHING;
 
 endif; //bOpen - połączono; 
 
 return bReturn;
 
end;

Brak komentarzy:

Prześlij komentarz