DBgridEh and Server filtering

Вопросы стыковки визуальных компонент (DataControls, EhGrid, VirtualTreeView, DevExpress и т.п.) с данными из БД.

Модераторы: kdv, CyberMax

Ответить
joolio
Сообщения: 31
Зарегистрирован: 09 июл 2005, 14:23
Контактная информация:

DBgridEh and Server filtering

Сообщение joolio » 08 июл 2006, 11:05

Привет всем.
Задал вопрос в некоторых местах, ну все таки задам и здесь.

Работаю с DBGridEh, у него есть свойтсво сортировать и фильтровать данные автоматически с использованием специальной библиотеки. В моем случае EhlibFIB. Не работает фильтрация на уровне сервера, все сделал и настроил как надо(Включил библ. EhlibFIB.pas, STFilter.Local:=False, SqlSelect:='...... where /*FILTER*/ 1=1'). Но никакой реакций, хотя локальная фильтрация работает нормально.

Никто не знает в чем проблема? :(
Последний раз редактировалось joolio 10 июл 2006, 16:48, всего редактировалось 1 раз.

joolio
Сообщения: 31
Зарегистрирован: 09 июл 2005, 14:23
Контактная информация:

Сообщение joolio » 10 июл 2006, 16:48

проблему решил.
Оказывается

Код: Выделить всё

/*FILTER*/
должно идти первой после , и еще с новой строки без пробелов. :lol:

dragon_art
Сообщения: 18
Зарегистрирован: 20 сен 2006, 09:18
Откуда: Зарафшан

Re: DBgridEh and Server filtering

Сообщение dragon_art » 20 сен 2006, 09:49

...EhlibFIB.pas, STFilter.Local:=False, SqlSelect:='...... where /*FILTER*/ 1=1'). Но никакой реакций, хотя локальная фильтрация работает нормально.

Никто не знает в чем проблема? :(
...

дело в том что в стандартной библиотеке нету фильтрации!
где - не помню, но кое что нашел.
ОГРАМНОЕ СПАСИБО АВТОРУ.

Код: Выделить всё

{*******************************************************}
{                                                       }
{                       EhLib v3.6                      }
{    Register object that sort data in TpFIBDataset     }
{                                                       }
{      Copyright (c) 2005 by Roman V. Babenko           }
{ e-mail: romb@interbase-world.com                      }
{                                                       }
{*******************************************************}

{*******************************************************}
{ Add this unit to 'uses' clause of any unit of your    }
{ project to allow TDBGridEh to sort data in            }
{ TpFIBDataset automatically after sorting markers      }
{ will be changed.                                      }
{ TFIBDatasetFeaturesEh will sort data locally          }
{ using DoSort procedure of TpFIBDataset                }
{ [+] SortLocal                                         }
{ [+] FilterLocal                                       }
{ [+] SortServer                                        }
{ [+] FilterServer                                      }
{*******************************************************}

unit EhLibFIB;

interface

{$I EhLib.Inc}

implementation

uses
 DBUtilsEh, pFIBDataSet, DB, DBGridEh, Classes;

type
 TpFIBDatasetFeaturesEh = class( TDatasetFeaturesEh )
 public
  procedure ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
  procedure ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override;
 end;


{ TpFIBDatasetFeaturesEh }

procedure TpFIBDatasetFeaturesEh.ApplyFilter(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
var
 vDBGridEh   : TCustomDBGridEh;
 vFIBDataSet : TpFIBDataSet;
begin
 if ( Sender is TDBGridEh )
 then begin
       if ( Sender as TDBGridEh ).STFilter.Local
       then begin
             { ToDO Debug 'Expr1 and Expr2' }
             TpFIBDataSet( DataSet ).Filter :=
               GetExpressionAsFilterString( ( Sender as TCustomDBGridEh ),
                GetOneExpressionAsLocalFilterString, nil );
             TpFIBDataSet( DataSet ).Filtered := True;
            end
       else begin
             ApplyFilterSQLBasedDataSet( ( Sender as TCustomDBGridEh ), nil,
              IsReopen, 'SelectSQL' );
            end;
      end;
end;

procedure TpFIBDatasetFeaturesEh.ApplySorting(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);
var
 Sort   : array of boolean;
 I, J   : integer;
 Grid   : TCustomDBGridEh;
 Fields : TStrings;
begin
 if ( Sender is TCustomDBGridEh )
 then begin
       if ( Sender as TCustomDBGridEh ).SortLocal
       then begin
             Grid:=TCustomDBGridEh(Sender);
             J := Grid.SortMarkedColumns.Count;
             Fields := TStringList.Create;
             Setlength( Sort, J );
             for i:=0 to J - 1 do
              begin
               Fields.Add( Grid.SortMarkedColumns[i].FieldName );
               Sort[ I ]:=Grid.SortMarkedColumns[i].Title.SortMarker=smDownEh;
              end;
             TpFIBDataSet( DataSet ).DoSortEx( Fields, Sort );
            end
        else begin
              ApplySortingForSQLBasedDataSet( ( Sender as TCustomDBGridEh ),
               TpFIBDataSet( DataSet ), True, IsReopen, 'SelectSQL' );
             end;
       end;
end;

initialization
 RegisterDatasetFeaturesEh( TpFIBDatasetFeaturesEh, TpFIBDataSet );
end.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость