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