madorin / fibplus

FibPlus Library for Delphi and C++Builder. Data access components for Firebird & Interbase.
165 stars 57 forks source link

TFIBDatabase.AttachmentID некорректный после восстановления коннекта #34

Open bvsoft opened 5 years ago

bvsoft commented 5 years ago

Приветствую! Свойство TFIBDatabase.AttachmentID не проинициализируется заново, если случился разрыв коннекта у базы данных, и мы заново его восстанавливаем (ведь TFibDatabase.close не выполнился, а инициализация vAttachmentID происходит либо в Create, либо в Close). Исправится, если в TFibDatabase.Open перед обращением к свойству AttachmentID вставить инициализацию переменной vAttachmentID:

  ...
  vInternalTransaction.Timeout      :=1000;  
  FStreammedConnectFail:=False;
  vAttachmentID    :=-1; //<--- here
  AttachmentID;
  DPB:=FDPB;
  ...
walxo commented 5 years ago

Можно показать более подробно, где и как это должно быть размещено.

bvsoft commented 5 years ago

Модуль FibDatabase.pas, функция procedure TFIBDatabase.Open(RaiseExcept:boolean = True); строка 2050

walxo commented 5 years ago

Спасибо!

madorin commented 10 months ago

@bvsoft , @walxo , наверное лучше сделать сброс vAttachmentID в DoOnLostConnect ? Здесь: https://github.com/madorin/fibplus/blob/cad23f81a9e6994fdac502c1857625efa2700991/pFIBDatabase.pas#L571 В этом случае AttachmentID будет невалидный и до вызова Open, сразу после потеря соединения

madorin commented 10 months ago

Сделал изменение в этом брэнче, можете протестировать https://github.com/madorin/fibplus/compare/34-attachement-id

VladimirBorzov commented 3 months ago

Да, конечно, здесь тоже обязательно. Лучше и там, и там оставить...