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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2012, 14:14   #1
brednew
Пользователь
 
Регистрация: 10.09.2012
Сообщений: 24
Восклицание копирование БД с датой и временем в имени

помогите плиз, искал везде, наткнулся на темку, где все написано, но подставив к себе в программу нажимая на кнопку копировать копирование не происходит


Код:
function TForm9.GetName: String;
var
ye, mo, da : Word; //для даты
ho, mi, se, ms : Word; //для времени
st : String[2]; //для добавления нуля, например 05
begin
DecodeDate(Date, ye, mo, da); //декодируем на составные дату
DecodeTime(Time, ho, mi, se, ms); //декодируем время
//теперь собираем строку:
Result:= IntToStr(ye); //добавили год
st:= IntToStr(mo); //получаем и добавляем месяц:
if Length(st) = 1 then st:= '0' + st; //если 1 символ, добавим спереди 0
Result := Result + st; //получаем и добавляем день:
st:= IntToStr(da);
if Length(st) = 1 then st:= '0' + st;
Result := Result + st;//теперь получаем и добавляем час:
st:= IntToStr(ho);
if Length(st) = 1 then st:= '0' + st;
Result := Result + st; //получаем и добавляем минуты:
st:= IntToStr(mi);
if Length(st) = 1 then st:= '0' + st;
Result := Result + st; //получаем и добавляем секунды:
st:= IntToStr(se);
if Length(st) = 1 then st:= '0' + st; Result := Result + st + '_';
//теперь функция вернет префикс имени файла, например: //20100205_010012_
end;

procedure TForm9.BackupCopy;
var s : String; //для получения префикса файла
begin
//получим префикс:
s:= GetName();
//очистим Memol, если там что то есть:
Memo1.Clear;
//задаем параметры компонента IBBackupService:
ibbs.DatabaseName:=edit1.Text;
IBBS.LoginPrompt:= False;
IBBS.Params.Add('user name=sysdba');
IBBS.Params.Add('password=masterkey');
IBBS.Active := True;
//начинаем копирование try
IBBS.Verbose:= True;
IBBS.BackupFile.Clear;
IBBS.BackupFile.Add('c:\DataBases\Backup\' + s + '.cdb');
IBBS.ServiceStart;
//пока не дошли до конца, записываем параллельно лог в Memo1:
while not IBBS.Eof do
Memo1.Lines.Add(IBBS.GetNextLine);
finally
IBBS.Active:= False;
end;
//сохраним лог в файл:
Memo1.Lines.SaveToFile('c:\DataBases\Backup\' + s + 'first.log');
end;


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.09.2012 в 14:43.
brednew вне форума Ответить с цитированием
Старый 12.09.2012, 14:45   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Хм, в смысл кода выше не вникал, но первое, что приходит на ум с именем файла

Код:
File_name:= FormatDateTime('yyyymmdd_hhnnss', Now)+'_first.log';
Не?
_SERGEYX_ вне форума Ответить с цитированием
Старый 12.09.2012, 15:39   #3
nikleon
Новичок
Джуниор
 
Регистрация: 09.07.2010
Сообщений: 2
По умолчанию

обратите внимание какое имя бд вы передаете:

ibbs.DatabaseName:=edit1.Text;
повидимому нет конекта с базой от сюда нет копии и пустой лог

попробуйте так
Код:
try
IBBS.Verbose:= True;
IBBS.BackupFile.Clear;
ibbs.DatabaseName := 'c:\DataBases\DbName.gdb';
IBBS.BackupFile.Add('c:\DataBases\Backup\' + s + '.cdb');
IBBS.ServiceStart;
//пока не дошли до конца, записываем параллельно лог в Memo1:
while not IBBS.Eof do
Memo1.Lines.Add(IBBS.GetNextLine);
finally
IBBS.Active:= False;
end;
nikleon вне форума Ответить с цитированием
Старый 12.09.2012, 15:57   #4
brednew
Пользователь
 
Регистрация: 10.09.2012
Сообщений: 24
По умолчанию

проблема с резервным копированием решена, теперь проблема в том, чтобы указывать папку, куда будет сохранена копия бд. еще суть в том, что при создании копии, я изменял ее расширения(задачка препода) можно ли сделать так чтобы возвращать эту бд в обратное состояние?
brednew вне форума Ответить с цитированием
Старый 12.09.2012, 21:03   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Пишете под interbase? Там есть собственные утилиты резервного копирования. Я когда-то примерно так реализовывал резервное сохранение БД:

Код:
  params:=PChar(' -b '+DM.Server+':'+DM.DBDir+'\service.gdb '+arch+' -user SYSDBA -pass masterkey -v'+log);
  ShellExecute(0,nil,PChar('C:\Program Files\Borland\InterBase\bin\gbak.exe'),params,PChar(''),0);
log в данном случае - переменная, в которую записывается име результирующего файла.

Соответственно, восстановление базы:

Код:
  params:=PChar(' -c '+arch+' '+DM.Server+':'+DM.DBDir+'\service.gdb'+' -user SYSDBA -pass masterkey -v'+log);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование файла с датой в имени random_name Общие вопросы C/C++ 2 15.09.2012 21:47
Работа с Датой и Временем Dmitriy_B C++ Builder 1 03.04.2012 00:06
VB 6.0 проблема с временем и датой Vovka91 Помощь студентам 5 19.12.2011 06:24
Работа с датой-временем SwiP Общие вопросы Delphi 12 28.04.2011 08:01
Манипуляции с датой и временем. Tatyana БД в Delphi 16 29.06.2007 19:19