Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 4 of 4 total
Thread Load updates / replication problem
Fri, Jun 20 2014 7:33 PMPermanent Link

Charalampos Michael


Hello,
  I have 2 identical databases which i want to duplicate the
  changes each other. The problem is that the the first database
  is exporting the changes into a file (as i can from the size)
  but when i load it and try it to apply it into the other
  database it does NOTHING. I use the below code to do that:

//Save the updates from the database to a store and export to file

procedure actSaveUpdatesExecute(Sender: TObject);
var
  vStream: TFileStream;
  vFileName: String;
  vFormatSettings: TFormatSettings;
begin
  vFormatSettings.DateSeparator :=3D '_';
  vFormatSettings.TimeSeparator :=3D '_';
  vFileName :=3D FormatDateTime('dd_mm_yyyy_hh_nn_ss', Now, vFormatSetting=
s);

  dlgSaveUpdates.FileName :=3D vFileName;

  if dlgSaveUpdates.Execute then
  with DatabaseModule, qrQuery, SQL do
  begin
    Screen.Cursor :=3D crHourGlass;
    Clear;

    Add('BACKUP DATABASE "Cards" AS "' + vFileName +
      '" TO STORE "Local" COMPRESSION 9');

    ExecSQL;
    Clear;

    vStream :=3D TFileStream.Create(dlgSaveUpdates.FileName, fmCreate);
    dbSession.SaveStoreFileToStream('Local', ChangeFileExt(vFileName,
'.EDBBkp'), vStream);
    FreeAndNil(vStream);

    Add('DELETE FILE "' + ChangeFileExt(vFileName, '.EDBBkp') +
      '" FROM STORE "Local"');

    ExecSQL;
    Clear;

    {
    Clear;

    Add('SAVE UPDATES FOR DATABASE "Cards" AS "' + vFileName +
      '" TO STORE "Local" COMPRESSION 9');

    ExecSQL;
    Clear;

    vStream :=3D TFileStream.Create(dlgSaveUpdates.FileName, fmCreate);
    dbSession.SaveStoreFileToStream('Local', ChangeFileExt(vFileName,
'.edbupd'), vStream);
    FreeAndNil(vStream);

    Add('DELETE FILE "' + ChangeFileExt(vFileName, '.edbupd') +
      '" FROM STORE "Local"');

    ExecSQL;
    Clear;
    }

    Screen.Cursor :=3D crDefault;
    ShowMessage('Export changes done!');
  end;
end;


//Load updates from file, put it on store and apply it into the database

procedure actLoadUpdatesExecute(Sender: TObject);
var
  vStream: TFileStream;
  vFileName: String;
begin
  if dlgLoadUpdates.Execute then
  with DatabaseModule, qrQuery, SQL do
  begin
    Screen.Cursor :=3D crHourGlass;

    //DatabaseModule.dbDatabase.Open;
    //DatabaseModule.dbSession.Open;
    //OpenDatabase(False);

    vFileName :=3D
ChangeFileExt(ExtractFileName(dlgLoadUpdates.FileName), '.EDBBkp');

    vStream :=3D TFileStream.Create(dlgLoadUpdates.FileName, fmOpenRead);
    dbSession.SaveStreamToStoreFile('Local', vFileName, vStream);
    FreeAndNil(vStream);

    DatabaseModule.dbEngine.Close;

    Clear;

    Add('RESTORE DATABASE "Cards" FROM "' + ChangeFileExt(vFileName, '') +=

      '" IN STORE "Local"');

    ExecSQL;
    Clear;

    Add('DELETE FILE "' + vFileName + '" FROM STORE "Local"');

    ExecSQL;
    Clear;

    DatabaseModule.CloseDatabase;
    DatabaseModule.OpenDatabase;

    Screen.Cursor :=3D crDefault;
    ShowMessage('Import changes done!');

  end;
end;


Any helps ?

Thanks

---
=CE=91=CF=85=CF=84=CF=8C =CF=84=CE=BF email =CE=B5=CE=AF=CE=BD=CE=B1=CE=B9 =
=CE=B1=CF=80=CE=B1=CE=BB=CE=BB=CE=B1=CE=B3=CE=BC=CE=AD=CE=BD=CE=BF =CE=B1=
=CF=80=CF=8C =CE=B9=CE=BF=CF=8D=CF=82 =CE=BA=CE=B1=CE=B9 =CE=BA=CE=B1=CE=BA=
=CF=8C=CE=B2=CE=BF=CF=85=CE=BB=CE=BF =CE=BB=CE=BF=CE=B3=CE=B9=CF=83=CE=BC=
=CE=B9=CE=BA=CF=8C, =CE=B5=CF=80=CE=B5=CE=B9=CE=B4=CE=AE =CE=B5=CE=AF=CE=BD=
=CE=B1=CE=B9 =CE=B5=CE=BD=CE=B5=CF=81=CE=B3=CE=AE =CE=B7 =CF=80=CF=81=CE=BF=
=CF=83=CF=84=CE=B1=CF=83=CE=AF=CE=B1 avast! Antivirus.
http://www.avast.com
Fri, Jun 20 2014 7:36 PMPermanent Link

Charalampos Michael

My apologies, wrong code in the first post

procedure actSaveUpdatesExecute(Sender: TObject);
var
  vStream: TFileStream;
  vFileName: String;
  vFormatSettings: TFormatSettings;
begin
  vFormatSettings.DateSeparator :=3D '_';
  vFormatSettings.TimeSeparator :=3D '_';
  vFileName :=3D FormatDateTime('dd_mm_yyyy_hh_nn_ss', Now, vFormatSetting=
s);

  dlgSaveUpdates.FileName :=3D vFileName;

  if dlgSaveUpdates.Execute then
  with DatabaseModule, qrQuery, SQL do
  begin
    Screen.Cursor :=3D crHourGlass;
    Clear;

    Clear;

    Add('SAVE UPDATES FOR DATABASE "Cards" AS "' + vFileName +
      '" TO STORE "Local" COMPRESSION 9');

    ExecSQL;
    Clear;

    vStream :=3D TFileStream.Create(dlgSaveUpdates.FileName, fmCreate);
    dbSession.SaveStoreFileToStream('Local', ChangeFileExt(vFileName,
'.edbupd'), vStream);
    FreeAndNil(vStream);

    Add('DELETE FILE "' + ChangeFileExt(vFileName, '.edbupd') +
      '" FROM STORE "Local"');

    ExecSQL;
    Clear;

    Screen.Cursor :=3D crDefault;
  end;
end;

procedure TCardsForm.actLoadUpdatesExecute(Sender: TObject);
var
  vStream: TFileStream;
  vFileName: String;
begin
  if dlgLoadUpdates.Execute then
  with DatabaseModule, qrQuery, SQL do
  begin
    Screen.Cursor :=3D crHourGlass;

    Clear;

    vFileName :=3D
ChangeFileExt(ExtractFileName(dlgLoadUpdates.FileName), '.edbupd');

    vStream :=3D TFileStream.Create(dlgLoadUpdates.FileName, fmOpenRead);
    dbSession.SaveStreamToStoreFile('Local', vFileName, vStream);
    FreeAndNil(vStream);

    Add('LOAD UPDATES FOR DATABASE "Cards" FROM "' +
ChangeFileExt(vFileName, '') +
      '" IN STORE "Local"');

    ExecSQL;
    Clear;

    Add('DELETE FILE "' + vFileName + '" FROM STORE "Local"');

    ExecSQL;
    Clear;
  end;
end;


---
=CE=91=CF=85=CF=84=CF=8C =CF=84=CE=BF email =CE=B5=CE=AF=CE=BD=CE=B1=CE=B9 =
=CE=B1=CF=80=CE=B1=CE=BB=CE=BB=CE=B1=CE=B3=CE=BC=CE=AD=CE=BD=CE=BF =CE=B1=
=CF=80=CF=8C =CE=B9=CE=BF=CF=8D=CF=82 =CE=BA=CE=B1=CE=B9 =CE=BA=CE=B1=CE=BA=
=CF=8C=CE=B2=CE=BF=CF=85=CE=BB=CE=BF =CE=BB=CE=BF=CE=B3=CE=B9=CF=83=CE=BC=
=CE=B9=CE=BA=CF=8C, =CE=B5=CF=80=CE=B5=CE=B9=CE=B4=CE=AE =CE=B5=CE=AF=CE=BD=
=CE=B1=CE=B9 =CE=B5=CE=BD=CE=B5=CF=81=CE=B3=CE=AE =CE=B7 =CF=80=CF=81=CE=BF=
=CF=83=CF=84=CE=B1=CF=83=CE=AF=CE=B1 avast! Antivirus.
http://www.avast.com
Sat, Jun 21 2014 7:08 AMPermanent Link

Uli Becker

Charalampos,

your code looks quite complicated Smile

Personally, I prefer to do that stuff using a stored procedure, here a
code snippet:

EXECUTE IMMEDIATE 'SET UPDATES STORE TO "' + ClientInStore + '"';

         PREPARE SelectedUpdateFilesStmt FROM 'SELECT * FROM
Configuration.UPDATES ORDER BY CreatedOn';
         OPEN SelectedUpdateFilesCursor;

         FETCH FIRST FROM SelectedUpdateFilesCursor ('Name') INTO
CurrentFileName;

         WHILE NOT EOF(SelectedUpdateFilesCursor) DO

            EXECUTE IMMEDIATE 'LOAD UPDATES FOR DATABASE "' +
CurrentDatabase + '"
                               FROM "' + CurrentFileName + '" IN STORE
                               "' + ClientInStore + '"';

            -- If successful, delete from store

            EXECUTE IMMEDIATE 'DELETE FILE "' + CurrentFileName +
'.EDBUpd" FROM STORE
                               "' + ClientInStore + '"';

            FETCH NEXT FROM SelectedUpdateFilesCursor ('Name') INTO
CurrentFileName;

         END WHILE;

Apart from that, your problem could be the file extension. EDB expects
the filename without exension. Have a look here:

http://tinyurl.com/mpsrafj

Uli
Sat, Jun 21 2014 11:32 AMPermanent Link

Uli Becker

Sorry, I didn't read your code carefully enough: you did change the extension.

Uli
Image