Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2014, 13:46   #1
SunnyCrash
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 45
Печаль Создание архивных копий базы

В интернете (http://pblog.ru/lab/?p=360) нашел код где показано что копии будут создаваться после 5ти изменений в таблице но ничего не рработает может кто то поможет?
Код:
procedure LookDir(StartDir, Mask : String; List : TStringList);
var
SearchRec : TSearchRec;
begin
if Mask = '' then Mask := '*.*';
if StartDir[Length(StartDir)] <> '' then StartDir := StartDir + '\';
if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
begin
repeat
if (SearchRec.Attr and faDirectory) <> faDirectory then
begin
List.Add(StartDir+SearchRec.Name);
end
else
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then LookDir(StartDir + SearchRec.Name + '', Mask, List);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;

procedure BackUpBD;
var
path1,path2,fname:string;
i,colfiles:integer;
lst:tstringlist;
begin
colfiles:=5;//количество хранимых последних версий файла
path1:=extractfilepath(application.ExeName);
path2:=extractfilepath(application.ExeName)+'BackUpBD\';
if not DirectoryExists(path2) then MkDir(path2);
fname:=path2+formatdatetime('yyyy-mm-dd hh-nn-ss',now)+'-BD.mdb.back';
//BD.mdb - имя файла вашей БД
if copyfile(PChar(path1+'BD.mdb'),PChar(fname),false) = true then
begin
lst := TStringList.Create;
LookDir(path2, '*.back', lst);

if Lst.Count>colfiles then
for i:= 0 to Lst.Count - colfiles-1 do deletefile(lst.Strings[i]);

lst.Free;
end
else
showmessage('Файл с БД не найден!');
end;
может кто то покажет исходник рабочий?

Последний раз редактировалось SunnyCrash; 16.01.2014 в 13:55.
SunnyCrash вне форума Ответить с цитированием
Старый 16.01.2014, 14:42   #2
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

а не проще сделать архивацию после того как пользователь закончил работу с программой?
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 16.01.2014, 22:11   #3
SunnyCrash
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 45
По умолчанию

Есть реализация ?или исходник
SunnyCrash вне форума Ответить с цитированием
Старый 17.01.2014, 18:00   #4
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

например на событие формы OnCLoseQuery повесить такой код:
Код:
  var
    param1, param2:string;
  begin
    param1:='a -agYYYYMMDD-NN -m5 -inul d:\arxiv\baza_';
    param2:='<полный путь к базе>';
    shellexecute(0, 'open', 'winrar', PChar(param1+' '+param2), nil, sw_show);
  end;
как бы так.
<полный путь к базе> - попробуйте узнать через свойства вашего объекта которым подключаетесь к базе.
param1 - строка ключей для архиватора winrar(всё есть в хелпе)
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 20.01.2014, 17:47   #5
SunnyCrash
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 45
По умолчанию

Решил попробывать как сказано выше ничего не создает
Вин рар запускаеться но не архивирует(

Последний раз редактировалось SunnyCrash; 20.01.2014 в 17:51.
SunnyCrash вне форума Ответить с цитированием
Старый 20.01.2014, 18:23   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

WinRar имеет консольную версию. Попробуйте архивировать с её помощью через консольные команды.
В помощь: Консольные команды winrar
Streletz вне форума Ответить с цитированием
Старый 20.01.2014, 23:18   #7
SunnyCrash
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 45
По умолчанию

Ребята было бы хорошо если бы вы мне показали бы исходник, ну хоть один робочий
Решил не лентяйничать и сделать)
Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
a,b: PChar;
begin
a := Pchar('D:\dddd.rar');  //создает архив под названием дддд
b:=Pchar('D:\1\*.*');  // папка с которой берет файлы, для использования нужен ShellApi 
ShellExecute(0, 'open', 'WinRAR.exe', Pchar('a -r -ep1 '+a+' '+b),  nil,  SW_SHOW);
end;
так работает
Спасибо Dark_Spirit

Последний раз редактировалось SunnyCrash; 20.01.2014 в 23:26.
SunnyCrash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QuickReport создание двух копий на одном листе t.baychorov Общие вопросы Delphi 0 25.04.2012 18:47
Создание базы Krasav БД в Delphi 0 28.02.2012 00:22
Создание базы Darcangel БД в Delphi 3 06.01.2012 15:03
Создание копий листа и автоматическое наполнение списка. Макрос Alexey_Gorbunov Microsoft Office Excel 2 27.10.2011 13:41
Создание базы L_M SQL, базы данных 1 21.05.2009 22:28