Конференция "Базы" » DBgridEh ошибка фильтре Error in expression [D6, Firebird]
 
  • немо2 (19.03.09 17:34) [20]
    а если в процедуре добавить в
    --
    --

    procedure TCustomDBGridEh.SetFilterValue(DCol: Integer);
    var
     Column: TColumnEh;
    begin
     if (DCol < 0) or (DCol >= Columns.Count) then
       Exit;
     Column := Columns[DCol];
     if Column.FieldName <> ''
    --
    and Pos('(', FilterEdit.Text) > 0)
    and Pos(')', FilterEdit.Text) > 0)

    --
    then
       Column.STFilter.InternalSetExpressionStr(FilterEdit.Text);
    //    if Column.STFilter.KeyField <> ''
    //      then Column.STFilter.SetKeyListValues(FilterEdit.Text, FilterEdit.Value)
    //      else Column.STFilter.InternalSetExpressionStr(FilterEdit.Text);
    end;
  • Ulugbek (20.03.09 09:58) [21]
    Нет не помогло... Капитан НЕМО2
    в инете нашел такой способ но это тоже не работает..

    DbgridEh.pas добавил функцию function CheckFilter(AFilterEdit: string): boolean;
    наверх процедуры procedure TCustomDBGridEh.SetFilterValue(DCol: Integer);
    Этот вариант тоже не сработало почемуто или мне функцию обявить наверху?

    function CheckFilter(AFilterEdit: string): boolean;
    begin
     result := true;
     if (Length(AFilterEdit) > 0)
         and (AFilterEdit <> '(Order by ascending)') and (AFilterEdit <> '(Order by descending)')
         and (ANSIPos('(', AFilterEdit) > 0) and (ANSIPos(')', AFilterEdit) > 0) then begin
       result := false;
     end;
    end;

    procedure TCustomDBGridEh.SetFilterValue(DCol: Integer);
    var
     Column: TColumnEh;
    begin
     if (DCol < 0) or (DCol >= Columns.Count) then
       Exit;
     Column := Columns[DCol];
     if (Column.FieldName <> '') CheckFilter(FilterEdit.Text) then
       Column.STFilter.InternalSetExpressionStr(FilterEdit.Text);
    //    if Column.STFilter.KeyField <> ''
    //      then Column.STFilter.SetKeyListValues(FilterEdit.Text, FilterEdit.Value)
    //      else Column.STFilter.InternalSetExpressionStr(FilterEdit.Text);
    end;



    Или мне переходить на Ehlib 3.6
  • немо2 (20.03.09 12:30) [22]
    все-таки надо с кавычками, имхо, разобраться. С ними же работает

    или фильтрвать сам датасет
    procedure TForm1.DBGridEh1ApplyFilter(Sender: TObject);
    begin
     dataset.Filtered:=false;
     dataset.Filter:=DBGridEh1.Columns[нужный].STFilter.ExpressionStr;
     dataset.Filtered:=true;
    end;
  • Гостья-1245 © (10.07.09 15:40) [23]
    все проще, хотя может вы уже и нашли ответ,
    спасибо ВАМ - я знала что искать, так вот:

    в DbUtilsEh
    надо заремить всего одну строку
    egin
     Result := Null;
     if Pos > Length(S) then
       Exit;
     if S[Pos] = '''' then
     begin
       for i := Pos + 1 to Length(S) do
         if S[i] = '''' then
         begin
           Result := Copy(S, Pos + 1, i - Pos - 1);
           Pos := i + 1;
           Exit;
         end;
       raise Exception.Create(SQuoteIsAbsentEh + S);
     end
     else
     begin
       for i := Pos to Length(S) do
       begin
         if ((S[i] in [' ']) and CheckForOperand(S, SkipBlanks(S, i))) or
    //ВОТ ЭТУ        ((S[i] in [')', '('])) or
           (PreferCommaForList and (S[i] = ',')) then
         begin
           Result := Copy(S, Pos, i - Pos);
           Pos := i;
           Exit;
         end;
       end;
       Result := Copy(S, Pos, MAXINT);
       Pos := Length(S) + 1;
     end;
  • turbouser © (10.07.09 20:42) [24]

    > Гостья-1245 ©

    См. [19]
  • sdsk © (14.07.09 12:29) [25]
    Там еще проблема. Если фильтр выставлен лукапом, то не работает на половине полей. Все руки никак не дойдут разобраться со всеми этими глюками фильтрации ehlib. Автор компонентов эту простейшую задачу кажется не собирается исправлять.

    Кстати чего версия такая старая? 4.6 уже есть
 
Конференция "Базы" » DBgridEh ошибка фильтре Error in expression [D6, Firebird]
Есть новые Нет новых   [134473   +32][b:0][p:0.002]