powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при работе с компонентами interbase
25 сообщений из 61, страница 2 из 3
Ошибка при работе с компонентами interbase
    #39526257
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234YuRock, Guest7777 - а может дадите ссылки, где мне почитать о ваших решениях, чтобы и у меня работало как часы?
Одно из костыльных решений
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TfrmMain.OnAppException(Sender: TObject; E: Exception);
begin
  if E is EIBError then begin
    Log( 'Ошибка базы данных: ' + E.Message, 1 );
    if IsCriticalIBError( ( E as EIBError ).IBErrorCode ) then
      ReconnectAllOnCriticalDBError;
  end else
    Log( 'Неопределенная ошибка: ' + E.Message, 1 );
end;


ф-ция IsCriticalIBError выглядит примерно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
function IsCriticalIBError( iscErrorCode: Integer ): Boolean;
const
  MAX_IBCRITICAL_ERROR = 14;
  anIBCriticalErrors: Array[ 1..MAX_IBCRITICAL_ERROR ] of Integer = (
    isc_lost_db_connection,
    isc_net_init_error,
    isc_network_error,
    isc_net_connect_err,
    isc_net_connect_listen_err,
    isc_net_event_connect_err,
    isc_net_event_listen_err,
    isc_net_read_err,
    isc_net_write_err,
    isc_io_create_err,
    isc_io_open_err,
    isc_io_close_err,
    isc_io_read_err,
    isc_io_write_err
  );
var
  i: Integer;
begin
  for i := 1 to MAX_IBCRITICAL_ERROR do if iscErrorCode = anIBCriticalErrors[ i ] then begin
    Result := True;
    Exit;
  end;

  Result := False;
end;


в ReconnectAllOnCriticalDBError делаешь
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
if db.Connected then
  db.ForceClose;

db.Connected := True;

// И со своими препарированными запросы надо Unprepare/Prepare;
// И свои открытые датасеты надо переоткрыть
// (для чего, естественно, транзакцию опаять стартовать)
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526273
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234Вашему вниманию текущая проба решить проблему

Говно какое-то.
А почему ты не делаешь то, что я тебе говорил? 20821298
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526354
Гость1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock

В данном случае, если я правильно понял, ты просто запускаешь свой обработчик поиска ошибки, и потом, запускаешь

Код: pascal
1.
2.
3.
4.
if db.Connected then
  db.ForceClose;

db.Connected := True;


я видать уже совсем дымлюсь, но ошибка уже есть и у меня уже проходит коннект по новой, и транзакция по новой запускается, но как только я обращаюсь к ibquery, мне выдает "Dataset open", хотя я его и фалзил, и слозил...

чччД

Так то это и есть минимальное приложение, повторяющее проблему...

Я запускаю приложение, нажимаю BitBtn1 - вижу нормальное открытие, затем в панели инструментов останавливаю и запускаю по новой Службу FireBird и нажимаю Button2....
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526365
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234...
чччД

Так то это и есть минимальное приложение, повторяющее проблему...
...
Ну вот сам его с листа и компилируй, и ошибку сам ищи.
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526377
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234,

дык, тебе что надо-то в итоге? Датасет открыть? Или написать чего-то?
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526384
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234ты просто запускаешь свой обработчик поиска ошибки
Нет, я устанавливаю общий обработчик необработанных исключений Application.OnException := OnAppException.


Гость1234но как только я обращаюсь к ibquery, мне выдает "Dataset open", хотя я его и фалзил, и слозил
Не знаю, что такое "фалзил, и слозил". Его надо на всякий сделать Dataset.Active := False; Dataset.Active := True; и думаю должно заработать. Если нет - установить в какой строке ошибка и исправлять её.
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526386
Гость1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччД

Что сделать? Приложить архив папки с исходниками? могу...

Док

я хочу после проблем с сервером переоткрыть 3 компоненты IBdatabase, IBTrasaction и IBQuery...
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526387
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234я хочу после проблем с сервером переоткрыть
А если не получится переоткрыть, что ты собираешься делать?
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526393
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234чччД

Что сделать? Приложить архив папки с исходниками? могу...

Док

я хочу после проблем с сервером переоткрыть 3 компоненты IBdatabase, IBTrasaction и IBQuery...
Не, трэш у тебя там какой-то.

Почитай: http://www.ibase.ru/ibx/
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526395
Гость1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock

ну вот и не получается этот Dataset переоткрыть. У меня его даже удалить не получается ...

Что буду делать - дерево трясти (из анекдота)
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526416
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234,

сделано на Лазаре, но в дельфях то же самое
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
procedure TForm1.Button1Click(Sender: TObject);
const
  DBPath: String = 'localhost/3302:d:\temp\Employee.fdb';
  ChrSet: String = 'UTF8';
  LibName: String = 'd:\Portable_program\Firebird_server\Firebird_3_0_2\fbclient.dll';
  UsrNm: String = 'sysdba';
  PW: String = 'cooladmin';
var
  Dbase: TIBDataBase;
  ReadTrans: TIBTransaction;
  Qry: TIBQuery;
  DS: TDataSource;
begin
  Dbase:= TIBDataBase.Create(Application);
  ReadTrans:= TIBTransaction.Create(Application);
  Qry:= TIBQuery.Create(Application);
  DS:= TDataSource.Create(Application);
  try
    with Dbase do
    begin
      DatabaseName:= DBPath;
      DefaultTransaction:= ReadTrans;
      LoginPrompt:= False;
      LibraryName:= LibName;
      Params.Add('lc_ctype=' + ChrSet);
      Params.Add('user_name=' + UsrNm);
      Params.Add('password=' + PW);
    end;

    with ReadTrans do
    begin
      Params.Add('read');
      Params.Add('read_committed');
      Params.Add('rec_version');
      Params.Add('nowait');
      DefaultDatabase:= Dbase;
    end;

    with Qry do
    begin
      Database:= Dbase;
      Transaction:= ReadTrans;
      AutoFetchAll:= True;
      SQL.Text:= 'SELECT COUNTRY, CURRENCY FROM COUNTRY';
    end;

    DS.DataSet:= Qry;
    DBGrid1.DataSource:= DS;

    try
      if not Dbase.Connected then Dbase.Connected:= True;
      try
        ReadTrans.Active:= True;
        try
          Qry.Active:= True;
        except
          on E:EIBError do //uses IB
          begin
            ShowMessage(E.Message);
            Exit;
          end;
        end;
      except
        on E:EIBError do
        begin
          ShowMessage(E.Message);
          Exit;
        end;
      end;
    except
      on E:EIBError do
      begin
        ShowMessage(E.Message);
        Exit;
      end;
    end;

    ShowMessage('Connected!');
  finally
    FreeAndNil(DS);
    FreeAndNil(Qry);
    FreeAndNil(ReadTrans);
    FreeAndNil(Dbase);
  end;
end;                                      

...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526422
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234ну вот и не получается этот Dataset переоткрыть
Не понимаю тогда, как у меня за минуту получилось тестовый пример сделать, в котором всё получилось.
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526427
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доксделано на Лазаре, но в дельфях то же самое
О, а давно в IBX появилась возможность писать
Код: pascal
1.
Dbase.LibraryName:= LibName;


?
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526478
Гость1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док

Проблемы создать, соединиться и после работы удалить нет.
В твоем случае попробуй, пожалуйста, во время коннекта остановить и запустить сервер и не удаляй созданные компоненты, а переконектись ими к базе по новой...
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526479
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockО, а давно в IBX появилась возможность писатьВ ХЕ3 (IBX 17.17) LibraryName нет, но есть ServerType. Суть - зерегистрированный список строк. К каждой строке привязана своя реализация IGDSLibrary. В этой реализации можно менять клиентскую библиотеку
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526505
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234остановить и запустить сервер и не удаляй созданные компоненты, а переконектись ими к базе по новой
Ты хочешь то, что в моём примере делает нажатие кнопки ReOpenQuery после перезапуска службы сервера?
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526523
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockДоксделано на Лазаре, но в дельфях то же самое
О, а давно в IBX появилась возможность писать
Код: pascal
1.
Dbase.LibraryName:= LibName;



?
Я форк юзаю от -Rik- а-ля фибы.
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526533
Гость1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,

Да срабатывает, но почему то у меня после двойного нажатия на ReOpenQuery )))

В любом случае прикольно - спасибо)) Попробую разобраться со своим хозяйством ))
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526534
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость1234В твоем случае попробуй, пожалуйста, во время коннекта остановить и запустить сервер и не удаляй созданные компоненты, а переконектись ими к базе по новой...
Я потому и спрашивал, чего тебе надо, так как ты внятно не можешь объяснить суть проблемы.
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526537
Guest7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_YuRockО, а давно в IBX появилась возможность писатьВ ХЕ3 (IBX 17.17) LibraryName нет, но есть ServerType. Суть - зерегистрированный список строк. К каждой строке привязана своя реализация IGDSLibrary. В этой реализации можно менять клиентскую библиотеку
А сам-то реально пробовал таким макаром привязать к IBX что-то фаербердовское, а не интербейзовское или пока что чисто теоретические построения?
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526565
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest7777А сам-то реально пробовал таким макаром привязать к IBX что-то фаербердовскоеДа. Именно таким макаром привязал FB и FBEmbedded. Единственный минус - Эмбаркадера засунула свою реализацию IGDSLibrary в implementation. Поэтому вместо простого наследования пришлось копировать всю реализацию
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526601
Guest7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

т.е. в свойстве ServerType после этого появилась пара новых позиций, соответствующих FB и соотв. образом функциональных?
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526630
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest7777т.е. в свойстве ServerType после этого появилась пара новых позиций, соответствующих FBДа
Guest7777и соотв. образом функциональных?С этим сложнее. Т.к. мне кроме выбора библиотеки ничего больше не было нужно. Т.е. я скопировал реализацию IGDSLibrary для IB и просто заменил библиотеку. Никаких особых FB-фич мне не требовалось. А так да - я выбираю ServerType и гружу нужного мне клиента.
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526639
Guest7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Понял, учту. Ибо сам под XE5 счел необходимым править непосредственно исходники IBX для достижения примерно того же функционала, не найдя с наскоку способа сделать это по-человечески надстройкой сверху. Хотя тоже действовал через дополнительную реализацию IGDSLibrary.
...
Рейтинг: 0 / 0
Ошибка при работе с компонентами interbase
    #39526648
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest7777,

Дарю 20543220
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при работе с компонентами interbase
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]