Announcement

Collapse
No announcement yet.

Vergleich von Daten aus zwei MySQL Datenbanken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vergleich von Daten aus zwei MySQL Datenbanken

    Hi,

    ich bin nochziemlich frisch in der Klamotte und bin momentan ziemlich am verzweifeln.

    Folgende Aufgabenstellung:

    Ich möchte auf Daten von zwei verschiedenen MySQL zugriefen.
    Beide Datenbanken haben mehreren Tabellen. Ich möchte nun diese Daten vergleichen und aktualisieren.

    bin noch neu auf dem gebiet und komme einfach nicht dahinter.

  • #2
    Sind die Tabellen gleich aufgebaut? Dann wären die DB-Eigenen Mittel bezüglich replikation die sinnvollste Methode.

    Comment


    • #3
      Vergleich von Daten aus zwei MySQL Datenbanken (2)

      Die Tabellen sind gleich aber möchte raus bekommen,
      ob die werte auch gleich sind.

      Habe mit ADO folgendes programmiert...

      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;
      }

      Comment

      Working...
      X