Topic: [Скрипт] Автоматическое создание резервной копии базы данных

В папке "backup" создаются резервные копии базы данных вида backup_дата_время.db при входе в программу, каждые три часа и при выходе.


Проект с данным примером:
http://myvisualdatabase.com/forum/misc. … download=1



Скрипт:

var
   Timer: TTimer;
   iSeconds: integer;

procedure Form1_OnShow (Sender: string; Action: string);
begin
     CopyFile('sqlite.db', 'backup/backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');

     Timer := TTimer.Create (Form1);
     Timer.Interval := 1000;
     Timer.Enabled := True;
     Timer.OnTimer := @OnTimer;
end;

procedure Form1_OnClose (Sender: string; Action: string);
begin
     CopyFile('sqlite.db', 'backup/backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');
     Timer.Free;
end;


procedure OnTimer;
begin
     iSeconds := iSeconds + 1;
     if iSeconds > 10800 then // backup every 3 hours (10800 seconds)
     begin
          iSeconds := 0;
          CopyFile('sqlite.db', 'backup/backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');
     end;
end;


begin
end.
Dmitry.

2 (edited by wertyby 2015-03-12 11:02:59)

Re: [Скрипт] Автоматическое создание резервной копии базы данных

Подскажите пожалуйста - а как изменить скрипт в случае если файл базы вынесен из родной папки в отдельную директорию, а программой также пользуются по сети?
И еще как я понимаю в данном скрипте для запуска необходимо заменить только имя главной (стартовой) формы?

Re: [Скрипт] Автоматическое создание резервной копии базы данных

просто укажите сетевой путь к базе, например

CopyFile('\\server\share\sqlite.db', 'backup/backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');
Dmitry.

Re: [Скрипт] Автоматическое создание резервной копии базы данных

wertyby wrote:

И еще как я понимаю в данном скрипте для запуска необходимо заменить только имя главной (стартовой) формы?

Вам необходимо создать событие, если вы просто скопируете скрипт к себе и переименуете форму, работать не будет.
Как правильно создавать события, можно посмотреть здесь
http://myvisualdatabase.com/help_ru/scr … rview.html

Dmitry.

Re: [Скрипт] Автоматическое создание резервной копии базы данных

спасибо за оперативный ответ, но с логикой скрипта, и пути типа (\\server\share\sqlite.db')  уже случайно разобрался сам. :-)
не понимаю только можно ли также залить на серверный комп бэкап. Что можно сделать со строкой (backup/backup)?

Re: [Скрипт] Автоматическое создание резервной копии базы данных

Думаю должно получиться

CopyFile('\\server\share\sqlite.db', '\\server\share\backup\backup'+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');
Dmitry.

Re: [Скрипт] Автоматическое создание резервной копии базы данных

DriveSoft wrote:

В папке "backup" создаются резервные копии базы данных вида backup_дата_время.db при входе в программу, каждые три часа и при выходе.


Проект с данным примером:
http://myvisualdatabase.com/forum/misc. … download=1



Скрипт:

var
   Timer: TTimer;
   iSeconds: integer;

procedure Form1_OnShow (Sender: string; Action: string);
begin
     CopyFile('sqlite.db', 'backup/backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');

     Timer := TTimer.Create (Form1);
     Timer.Interval := 1000;
     Timer.Enabled := True;
     Timer.OnTimer := @OnTimer;
end;

procedure Form1_OnClose (Sender: string; Action: string);
begin
     CopyFile('sqlite.db', 'backup/backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');
     Timer.Free;
end;


procedure OnTimer;
begin
     iSeconds := iSeconds + 1;
     if iSeconds > 10800 then // backup every 3 hours (10800 seconds)
     begin
          iSeconds := 0;
          CopyFile('sqlite.db', 'backup/backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');
     end;
end;


begin
end.


a  kak zdelac  shtob backup saxronalsa v lokalnim diske d:\   ?

Re: [Скрипт] Автоматическое создание резервной копии базы данных

так:

CopyFile('sqlite.db', 'd:\backup '+ FormatDateTime('dd-mm-yyyy hh-nn-ss', now)+'.db');
Dmitry.

Re: [Скрипт] Автоматическое создание резервной копии базы данных

Ya dlya zashiti vam napisal. pomoyemu shtob ne kto ne smoq shtob atkric sqlite.db nada na scripte prapisat druqoy puc shtob on soxranalsa v druqom meste a ne po umalcaniyu v svayom papke. tak ne kto ne smojit nayci sqlite.db  i atkric yevo..



no yesli etit celovek atkroyet programmu i cerez nevo employees i uje atttuda smojit uvidec  na scripte kuda propisan noviy put...

ili kakta zdelac tak shtob atkric sqliye.db cerez SQlite studio  zaprashival parol i tak uje ne smojit ne znaya parol atkric i vsyo budet super

Re: [Скрипт] Автоматическое создание резервной копии базы данных

kak samu bazu sqlite.db   saxranit na diske d:

ne backup a samo sqlite. db

Re: [Скрипт] Автоматическое создание резервной копии базы данных

здравствуйте!
попробуйте сделать как я показал на картинке.

Post's attachments

Attachment icon 1.jpg 126.12 kb, 559 downloads since 2015-03-28 

Re: [Скрипт] Автоматическое создание резервной копии базы данных

Доброго времени суток!

Подскажите, а как получить путь к файлу БД, если он находится не в папке с программой? чтобы автоматически подставлялся в скрипт, а то получается, что нужно переписывать (делать изменения в скрипте) каждый раз, когда меняется путь расположения файла БД....

Re: [Скрипт] Автоматическое создание резервной копии базы данных

mr_xxl wrote:

Доброго времени суток!

Подскажите, а как получить путь к файлу БД, если он находится не в папке с программой? чтобы автоматически подставлялся в скрипт, а то получается, что нужно переписывать (делать изменения в скрипте) каждый раз, когда меняется путь расположения файла БД....

Приветствую,  пример

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    ShowMessage(GetDBFileName);
end;

function GetDBFileName: string;
var
   ini: TIniFile;
begin
     ini := TiniFile.Create( ExtractFilePath(Application.ExeName) + 'settings.ini');
     result := ini.ReadString('Options', 'server', '');
     ini.Free;
end;
Dmitry.

Re: [Скрипт] Автоматическое создание резервной копии базы данных

Мне кажется, есть ещё один нюанс с расположением файла базы данных, о котором следует упомянуть: settings.ini может находиться не только рядом с выполняемым файлом, но и в папке с данными приложений, если был использован ключ реестра \MyVisualDatabase\Configs.   


Предлагаю улучшенную версию GetDBFileName:

function GetDBFileName: string;
var
  ini: TIniFile;
  R: TRegistry;
  tmpSettingsInAppData: boolean;
  tmpSettingsDir: string;
  tmpExeName: string;
begin
  tmpExeName := ExtractFileName(Application.ExeName);
  R := TRegistry.Create;
  R.RootKey := HKEY_CURRENT_USER;
  R.Access := KEY_READ;
  if R.OpenKey('Software\MyVisualDatabaseConfigs\'+tmpExeName,False) and (R.ReadInteger('SettingsInAppData') = 1) then
    tmpSettingsDir := GetEnvironmentVariable('APPDATA')+'\MyVisualDatabase\Configs\'+tmpExeName+'\'
  else
    tmpSettingsDir := ExtractFilePath(Application.ExeName);
  R.CloseKey;
  R.Free;
  ini := TiniFile.Create( tmpSettingsDir + 'settings.ini');
  result := ini.ReadString('Options', 'server', tmpSettingsDir+'sqlite.db');
  ini.Free;
end;

которая использует другую полезную функцию для получения системных путей:

function GetFolderPath(DirName: string): string;
var
  R: TRegistry;
begin
  R := TRegistry.Create;
  R.RootKey := HKEY_CURRENT_USER;
  R.Access := KEY_READ;
  R.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
  Result := R.ReadString(DirName);
  R.CloseKey;
  R.Free;
end;

P.S. Использование ключей реестра обычно связано с созданием инсталляции приложения, чтобы установить программу в папку Program Files и обеспечить её нормальную работу, см.   http://myvisualdatabase.com/forum/viewtopic.php?id=3175

Визуальное программирование: блог и телеграм-канал.