красивый backup'ер

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

красивый backup'ер

Сообщение londinium » 13 фев 2007, 11:06

Здравствуйте, Господа!
Захотелось мне сделать backup'ер для базы FireBird. Использую FireBird 1.5.3 SS, C++Builder 6 SP4, IBX 6.
По мотивам хелпа и поисков в Интернете написал такое:

Код: Выделить всё

 try
  {
    FBBackupService->Active=true;
    while(FBBackupService->IsServiceRunning)
     {
       Application->ProcessMessages();
       StatusMemo->Lines->Add(FBBackupService->GetNextLine());
     }
  }
  catch(...)
  {
    MessageBox(0,"Ошибка архивирования базы", "ОШИБКА",MB_ICONSTOP);
    FBBackupService->Detach();
    return;
  }
  StatusMemo->Lines->Add("База заархивирована");

И все даже работает. Единственная проблема - как мне показать пользователю прогресс выполнения (т.е.что-то в духе "выполнено 40% архивации) или хотя бы пописать в Memo строки как это делает gbak.
Просьба не советовать использовать FibPlus -покупать пока нет необходимости, а искать ломанный -не позволяет совесть.

С уважением, Londinium

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2007, 11:53

и при чем тут fibplus?

по поводу прогресса - кто бы знал
1. сколько времени это займет
2. сколько в базе объектов
3. какого они размера
4. какова загрузка процессора в момент бэкапа

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 13 фев 2007, 13:02

Код: Выделить всё

StatusMemo->Lines->Add(FBBackupService->GetNextLine()); 
     
Да вот эта строка тоже ничего не хочет выводить. У товарища Фаронова вычитал маловразумляющее пояснение "function GetNextLine: String - получает следующую сторку данных "

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2007, 16:01

а почему-бы не посмотреть примеры?
ссылка на пример тут
www.ibase.ru/devinfo/ibx.htm

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 13 фев 2007, 19:13

пример посмотрел, он, правда, слегка кривоватый, ну да ладно.
Теперь сделал так:

Код: Выделить всё

  StatusMemo->Lines->Add("Путь к файлу архива "+strBackupPath);
  FBBackupService->BackupFile->Clear();

  FBBackupService->BackupFile->Add(strBackupPath);
  FBBackupService->Active=false;
  FBBackupService->Verbose=true;


  try
  {

    FBBackupService->Attach();
    StatusMemo->Lines->Add("Подсоединение к базе выполнено");
    
  }
  catch(...)
  {
    MessageBox(0,"Ошибка подключения к базе","ОШИБКА",MB_ICONSTOP);
    return;
  }

  try
  {
    FBBackupService->ServiceStart();
    StatusMemo->Lines->Add("Сервис запущен");
    while (!FBBackupService->Eof)
    {
      Application->ProcessMessages();
      StatusMemo->Lines->Add(FBBackupService->GetNextLine());
    }
  }
  catch(...)
  {
    MessageBox(0,"Ошибка архивации","ОШИБКА"MB_ICONSTOP);
    FBBackupService->Detach();
    
    return;
  }

  FBBackupService->Detach();

backup получается(IBExpert восстанавливает), но проект валится с таким сообщением "Error reading data from the connection". С чего бы это??

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2007, 20:45

что пишешь в Server и Database?

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 13 фев 2007, 21:43

в DataBase - путь к базе данных так:
path="localhost:C:\DataBase\2.fdb"
в Server
servernamе="localhost"
Сервер FireBird и клиентская часть стоит на одной машине. Никакой сети нет.
Эти данные читаются из ini-файла.
Если необходимо/желательно могу выложить исходники

С уважением, Londinium

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2007, 22:14

я не случайно спросил. зачем в DatabaseName указан сервер? Ась?

кстати, и не случайно же ткнул в www.ibase.ru/devinfo/ibx.htm
там же русским языком написано:

У всех компонент Services API подключение к серверу и БД производится двумя свойствами - ServerName и DatabaseName. В отличие от TIBDatabase в свойстве DatabaseName должен быть указан только локальный путь к БД, а в ServerName - только имя сервера.

придется жирным шрифтом и красными буквами сделать....
Если необходимо/желательно могу выложить исходники
да конечно, мы тут же начнем их читать и править :-)
ничего личного, только обычно люди заняты чем-то более полезным, чем копание в чужих исходниках.

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 13 фев 2007, 22:43

я не случайно спросил. зачем в DatabaseName указан сервер? Ась?
Извиняйте, проглядел :(

придется жирным шрифтом и красными буквами сделать....
Очень правильное решение, а то с этими Services компонентами как
по минному полю шагаешь.
ничего личного, только обычно люди заняты чем-то более полезным, чем копание в чужих исходниках
Без претензий :D

Ща как исправлю и оно как заработает :D

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 28 фев 2007, 20:58

Ну вот я снова здесь :D
Все поправил, под FireBird SS 1.5.3 заработало, но возникла проблема: программа должна работать под Yaffil Embedded, а она не хочет. Подсоединение к базе не выполняется, а в логе Yaffil'a такая строка:
yaffil384 (Server) Wed Feb 28 19:58:04 2007
INET/inet_error: connect errno = 10057, address =
Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied.
Непонятно, с чего она возникает. Параметры подсоединения к серверу такие:

path="C:\ReleaseDataBase\solomenskiy.ib"
servername="localhost"
user_name="SYSDBA"
password="masterkey"

Заранее благодарен за советы/подсказки

С уважением, Londinium

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 28 фев 2007, 21:32

londinium писал(а):Ну вот я снова здесь :D
А читал бы ридми или как оно там про ембеддед - не пришёл бы.
londinium писал(а): servername="localhost"
Вота тута собака и порылась.

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 28 фев 2007, 22:52

Вота тута собака и порылась.
А если подробнее, как для тупого.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 мар 2007, 01:25

А если подробнее, как для тупого.
embedded работает только через локальный протокол. localhost - это НЕ локальный протокол, это tcp.
www.ibase.ru/ibfaq.htm

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 мар 2007, 01:33

Embedded поддерживает только локальный коннект. Соответственно, использование localhost недопустимо. Читай релизноты!

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 01 мар 2007, 08:56

так все-таки, что писать в ServerName?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 мар 2007, 09:39

servername=""

Ответить