Vergleiche 2 MySQL DB mit RecordSet

sohpos

Grünschnabel
Hallo zusammen,

könnt ihr mir bitte weiterhelfen.

habe 2 gleiche MySQL Datenbank mit mehrere Tabellen!
SQL-Daten mit (ADO) Recordset lese ich mittels aus mySQL-Server aus und vergleiche die Werte!
Nicht das beste aber Das funktioniert wunderbar!
Tabellen sind Identisch aufgebaut!

Kann man das einfacher mit per SQL abrage machen DB1 =? DB2
ob die zwei Tabellen gleich oder nicht


Dann brauche ich die ganze Klamotten nicht

Bin für jede Hilfe dankbar!


Code:
function fnTestDB()
{
var ConnString1, ConnString2; 
var sEqual= "";

var SQLString = "SELECT * FROM Scope";

  ConnString1 =  fnGetConnectionString("localhost")
  ConnString2 =  fnGetConnectionString("xxx.xx.xx.xxx")
  
  sEqual = SQLEqual (SQLString, ConnString1,ConnString2)
  
  Log.Message ("DB comparison was "+sEqual);

}

function fnGetConnectionString (myServer)
{
 var myServer;
  // DB Interlab
  var myDatabase ="";

  ConnectionString = "Driver={MySQL ODBC 3.51 Driver};Server= "+myServer+";Database= "+myDatabase+";User=root;Option=3;"; 
  return ConnectionString;
}

function SQLEqual (SQLString, ConnString1,ConnString2)

{
var SQLString, ConnString1, ConnString2, RecSet2;
var ilenTable1 = null;
var ilenTable2 = null;
var RecSet1 = null;
var RecSet2 = null;
var bEqual = false;

// Creates a new connection
  ConnDB1 = ADO.CreateConnection();
  ConnDB2 = ADO.CreateConnection();  

  ConnDB1.ConnectionString =  ConnString1;
  ConnDB2.ConnectionString =  ConnString2;

  ConnDB1.Open();
  ConnDB2.Open();
  
  if (ConnDB1.State==null ||ConnDB2.State== null) 
  {
    Log.Error( "Connection to TestDatabase state is closed.");
    return null;
  }
  
  // Opens a recordset
  RecSet1 = ConnDB1.Execute(SQLString);
  RecSet2 = ConnDB2.Execute(SQLString);
  
  // Find Count of Rows Records  
  ilenTable1 = RecSet1.RecordCount;
  ilenTable2 = RecSet2.RecordCount;
  
  if  (ilenTable1 != 0 && ilenTable2 !=0)
         {
            // if the tables does not lengthen same size are break with return off
            if (ilenTable1 != ilenTable2)
            {
              return bEqual;   
            }
            
            var strField= "";
            var iCountRecSet = RecSet1.Fields.Count;
             
            for (i = 0; i <iCountRecSet;i++)

            {
              // construct  Field Name for ex. (o_oid, c_ts)  
              strField = strField+";"+RecSet1.Fields(i).Name;
  
            }
            fieldsName = new Array();
            fieldsName = strField.split (';');
            var strF = "";
         
            for (var j = 1;j<iCountRecSet;j++) 
              {
                strF = fieldsName [j];
            
                if (strF!= "")   
            
                RecSet1.MoveFirst();
                RecSet2.MoveFirst();  
                  while ((! RecSet1.EOF)&&(! RecSet2.EOF)) 
                  {  
                      // Gets the field values
                      sFielval1 = RecSet1.Fields(strF).Value;
                      sFielval2 = RecSet2.Fields(strF).Value;
                      
                      if  ((sFielval1 == null) && (sFielval2 == null))
                      {
                        RecSet1.MoveNext();
                        RecSet2.MoveNext();
                        continue;
                      }
                      
                      if  ((sFielval1 == null) && (sFielval2 != null))
                      {
                        return bEqual;
                      }

                      // if equal field '0'  Move to Next field
                      if  ((sFielval1 == 0) && (sFielval2 == 0))
                      {
                        RecSet1.MoveNext();
                        RecSet2.MoveNext();
                        continue;
                      }
                      else
                      {     
                          if ((sFielval1 != null) && (sFielval2 != null)) 
                          {      
                            var comp = Utilities.CompareStr(sFielval1,sFielval2)
                            if (comp != 0)
                            {
                              Log.Message (strF +" "+sFielval1+" "+sFielval2+" ");
                              bEqual = false;
                              return bEqual;
                            }
                            else
                            {
                              bEqual = true;
                            }
                          }
                      } 
                      RecSet1.MoveNext();
                      RecSet2.MoveNext();  
                  };
             }// EOF for lenTable1
      } // if Table not NULL   
      
  // Closes the recordset and connection
  RecSet1.Close();
  RecSet2.Close()
  ConnDB1.Close();
  ConnDB2.Close();
  
  return bEqual;
}
 
Zurück