-
немо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; -
все проще, хотя может вы уже и нашли ответ,
спасибо ВАМ - я знала что искать, так вот:
в 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] -
Там еще проблема. Если фильтр выставлен лукапом, то не работает на половине полей. Все руки никак не дойдут разобраться со всеми этими глюками фильтрации ehlib. Автор компонентов эту простейшую задачу кажется не собирается исправлять.
Кстати чего версия такая старая? 4.6 уже есть