fibplus icon indicating copy to clipboard operation
fibplus copied to clipboard

FIBDataset - при включении фильтра выдает ошибку

Open Dedrasta opened this issue 8 years ago • 3 comments

Написал фильтр для датасета: filter := 'ID in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)'; При включении фильтра получаю ошибку: Variant or safearray index out of bounds

в модуле FIBDataset

procedure TFIBCustomDataSet.RefreshClientFields(ForceCalc:boolean=True); ... b:=Bookmark; try Bookmark:=b; //здесь выдает ошибку

Но если в скобках оставить только 16 чисел:

filter := 'ID in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)';

  • то работает без ошибок

Delphi 10.1 Berlin

FibPlus 7.6 http://www.sql.ru/forum/955845-12/a-chto-proekt-devrace-fibplus-uzhe-umer

Dedrasta avatar Jan 24 '17 11:01 Dedrasta

Ошибка подтверждена в парсере фильтра. Займусь когда будет время.

madorin avatar Apr 12 '17 17:04 madorin

Еще один баг в парсере DBParsers.pas при UTF-8 кодировке и использовании не русских самволов по ним не работает фильтр, например вот такая фамилия "Шуғай Мейрам" не может быть отображена с помощью фильтра как не вводи, проблема в строке 540 Result:=VarAsType(Result[0], varString); заменить на Result:=VarAsType(Result[0], {$IFDEF D2009+}varUString{$ELSE}varString{$IFEND});

SanekPro avatar Oct 28 '17 05:10 SanekPro

Проблема с фильтром обходится динамическим расширением массива Result Почему он так быстро растет не могу понять, но костыль такой:

523:                  while not VarIsEmpty(Arg1[Z]) do
524:                  begin
+++                     if VarArrayHighBound(Result, 1) < i then
+++                       VarArrayRedim(Result, i + i div 4);
525:                    Result[I] := Arg1[Z];
526:                    Inc(I); Inc(Z);
527:                  end;

shavluk avatar Jul 14 '20 13:07 shavluk