Table Data Comparer MSSQL

 
This example shows how to synchronize a MSSQL database tables via ADO.
 
 
procedure TForm1.btnCompareClick(Sender: TObject);
begin
  memLog.Clear();
  memResult.Clear();

  MSSQLExec1.MSSQLServerOptions.Assign(TableDataComparer1.MSSQLServerOptions);
  MSSQLExec1.MSSQLServerOptions.Assign(TableDataComparer1.MSSQLServerOptions);

  TableDataComparer1.TableNameMaster := edtTableNameM.Text;
  TableDataComparer1.TableNameTarget := edtTableNameT.Text;

  ConnectionMaster.Connected := True;
  ConnectionTarget.Connected := True;
  try
    if TableDataComparer1.CompareData() then
    begin
    memResult.Lines.BeginUpdate;
    MSSQLExec1.GetScript(memResult.Lines);
    memResult.Lines.EndUpdate;    
    end;
    
  memLog.Lines.Add('<Comparing finished.>');
  
  finally
  ConnectionTarget.Connected := False;
  ConnectionMaster.Connected := False;
  end;
end;

procedure TForm1.btnUpdateClick(Sender: TObject);
begin
  TableDataComparer1.SQLExec.ExecuteScript();
end;
 
procedure TForm1.ConnectionMasterBeforeConnect(Sender: TObject);
begin
  ADOConnectionMaster.ConnectionString :=
    AdoConnectString(cbAuthM.Checked, edtMasterServer.Text, edtMasterDatabaseName.Text,
    edtMasterUser.Text, edtMasterPassword.Text);

  MSSQLExec1.MSSQLServerOptions.SQLServerVersion :=
    TMSSQLServerVersionType(cbSqlServerVersion.Items.Objects[cbSqlServerVersion.ItemIndex]);
end;

procedure TForm1.ConnectionTargetBeforeConnect(Sender: TObject);
begin
  ADOConnectionTarget.ConnectionString :=
    AdoConnectString(cbAuthT.Checked, edtTargetServer.Text, edtTargetDatabaseName.Text,
    edtTargetUser.Text, edtTargetPassword.Text);

  MSSQLExec1.MSSQLServerOptions.SQLServerVersion :=
    TMSSQLServerVersionType(cbSqlServerVersion.Items.Objects[cbSqlServerVersion.ItemIndex]);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  cbSqlServerVersion.Items.Clear();

  cbSqlServerVersion.Items.AddObject('MSSQL 2000', TObject(st_MSSQL2000));
  cbSqlServerVersion.Items.AddObject('MSSQL 2005', TObject(st_MSSQL2005));
  cbSqlServerVersion.Items.AddObject('MSSQL 2008', TObject(st_MSSQL2008));
  cbSqlServerVersion.Items.AddObject('MSSQL 2012', TObject(st_MSSQL2012));
  cbSqlServerVersion.Items.AddObject('MSSQL 2014', TObject(st_MSSQL2014));
  cbSqlServerVersion.Items.AddObject('MSSQL 2016', TObject(st_MSSQL2016));
  cbSqlServerVersion.Items.AddObject('MSSQL 2017', TObject(st_MSSQL2017));

  cbSqlServerVersion.ItemIndex := cbSqlServerVersion.Items.Count - 2;
end;
 
function AdoConnectString(WinAuth: Boolean;
                          HostName, DbName, UserName, Password: String): String;
begin
    Result := 'Provider=SQLOLEDB;' +
                        'Initial Catalog='+DbName+';';
    if HostName <> '' then Result := Result +
                        'Data Source='+HostName+';';
    if WinAuth then
    begin
      Result := Result + 'Integrated Security=SSPI;' +
                         'Persist Security Info=False;';
    end else
    begin
      Result := Result + 'Persist Security Info=True;';
      if UserName <> '' then
        Result := Result + 'User ID=' + UserName + ';';
      if Password <> '' then
        Result := Result + 'Password=' + Password + ';';
    end;
end;

Add Feedback