Synchronize Firebird DB structures via FireDAC

 
This example shows how to synchronize a FireBird database structure via the FireDAC library.
 
 
procedure TForm2.btnCompareClick(Sender: TObject);
begin
  memResult.Lines.Clear;

  DBComparer1.CompareDatabases();
  memResult.Lines.BeginUpdate();
  DBComparer1.SQLExec.GetScript(memResult.Lines);
  memLog.Lines.Add('<Compare Finished>');
  memResult.Lines.EndUpdate();
end;

procedure TForm2.btnExtractClick(Sender: TObject);
begin
  memLog.Clear();
  memResult.Clear();

  DBCConnection1.Connected := True;
  DBCConnection2.Connected := True;
  try
    DBStructure1.Clear();
    DBStructure2.Clear();
    memLog.Lines.Add('Open ' + edtMasterDbName.Text + ' DataBase');
    IBDBExtract1.ExtractDatabase();
    memLog.Lines.Add('Open ' + edtTargetDbName.Text + ' DataBase');
    IBDBExtract2.ExtractDatabase();
    DBStructure1.Metadata.ExtractMetadata(memResult.Lines);
    DBStructure2.Metadata.ExtractMetadata(memResult.Lines);
    memLog.Lines.Add('<Extract Finished>');
  finally
    DBCConnection1.Connected := False;
    DBCConnection2.Connected := False;
  end;
end;

procedure TForm2.btnUpdateClick(Sender: TObject);
begin
  IBSQLExec.ExecuteScript();
end;
 
procedure TForm2.DBCConnection1BeforeConnect(Sender: TObject);
begin
  FDPhysFBDriverLink1.VendorLib := edtClientLibrary.Text;

  FDConnection1.Params.Clear();
  FDConnection1.DriverName := 'FB';
  FDConnection1.Params.Add('Database=' + edtMasterDbName.Text);
  FDConnection1.Params.Add('User_Name=' + edtMasterUser.Text);
  FDConnection1.Params.Add('Password=' + edtMasterPassword.Text);

  DBStructure1.IBServerOptions.SQLServerVersion :=
    TIBSQLServerVersionType(cbSqlServerVersion.Items.Objects[cbSqlServerVersion.ItemIndex]);
end;

procedure TForm2.DBCConnection2BeforeConnect(Sender: TObject);
begin
  FDPhysFBDriverLink1.VendorLib := edtClientLibrary.Text;

  FDConnection2.Params.Clear();
  FDConnection2.DriverName := 'FB';
  FDConnection2.Params.Add('Database=' + edtTargetDbName.Text);
  FDConnection2.Params.Add('User_Name=' + edtTargetUser.Text);
  FDConnection2.Params.Add('Password=' + edtTargetPassword.Text);

  DBStructure2.IBServerOptions.SQLServerVersion :=
    TIBSQLServerVersionType(cbSqlServerVersion.Items.Objects[cbSqlServerVersion.ItemIndex]);
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
  cbSqlServerVersion.Items.Clear();

  cbSqlServerVersion.Items.AddObject('Firebird 1.5', TObject(st_FireBird_15));
  cbSqlServerVersion.Items.AddObject('Firebird 2.0', TObject(st_FireBird_20));
  cbSqlServerVersion.Items.AddObject('Firebird 2.1', TObject(st_FireBird_21));
  cbSqlServerVersion.Items.AddObject('Firebird 2.5', TObject(st_FireBird_25));
  cbSqlServerVersion.Items.AddObject('Firebird 3.0', TObject(st_FireBird_30));

  cbSqlServerVersion.ItemIndex := cbSqlServerVersion.Items.Count - 1;
end;

procedure TForm2.btnUpdateClick(Sender: TObject);
begin
  IBSQLExec.ExecuteScript();
end;

Add Feedback