IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
londinium
- Сообщения: 27
- Зарегистрирован: 17 апр 2006, 14:04
Сообщение
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 - получает следующую сторку данных "
-
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 компонентами как
по минному полю шагаешь.
ничего личного, только обычно люди заняты чем-то более полезным, чем копание в чужих исходниках
Без претензий
Ща как исправлю и оно как заработает
-
londinium
- Сообщения: 27
- Зарегистрирован: 17 апр 2006, 14:04
Сообщение
londinium » 28 фев 2007, 20:58
Ну вот я снова здесь
Все поправил, под 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 писал(а):Ну вот я снова здесь
А читал бы ридми или как оно там про ембеддед - не пришёл бы.
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 недопустимо. Читай релизноты!