home *** CD-ROM | disk | FTP | other *** search
- {Name:DBFilter}
- {Version: 1.1}
- {Copyright:Visual Solutions Ltd 1996}
- {Purpose:Interface to BDE filter language}
- {V1.0 - 17/1/96
- V1.1 - 5/2/96 }
- {1.1 Amends FilterFunc to link directly to DSet not DSource improves
- EOF/BOF handling adds GoFirst AutoActivate options}
- {Filters are like queries except the're fast and return live results and are
- independent of any exisitng index. Filter provides a standard Expression
- Filter, and FilterFunc allows the expresson to be a callback to a user specified
- function}
- {DBIERR_NONE
- DBIERR_INVALIDHNDL
- DBIERR_NOSUCHFILTER
- DBIERR_NA - if Add means too complex if deact means already deact}
- unit DBFilter;
-
- {$B-}{will not work with full expr eval!!!}
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, DBITypes, DBIProcs, DBIErrs, DB, DBTables, TypInfo, ExtCtrls;
-
- const
- {FilterFunction reset message}
- CM_FILTERREFRESH=WM_USER+1000;
- {Filter expression constants}
- EXPRSIZE = sizeof(CANExpr);{10}
- NODESIZE = sizeof(CANNode);{12}
- {CANEXPRVERSION Picked up from DBiTypes - currently 2}
-
- type
- StringFN = String[DBIMAXNAMELEN]; {Used for FieldName}{DBIMAXNAMELEN=31}
- TFilterState = (fsPrepared,fsSet,fsActive);
-
- {TFilterFunc - OnFilter Event}
- TFilterEvent = function(Sender:TObject; DataSet:TDataSet):Boolean of object;
-
- {Holder for a condition before it is prepared}
- TFilterCondition = class
- private
- public
- procedure Add(AFieldName:StringFN;AOperator:CANOp;AFieldValue:string;ANextOperator:CANOp);
- property Dataset:TDataset;
- property AsString:string ;
- property FieldName:stringFN ;
- property Operator:CANOp ;
- property FieldValue:string;
- property NextOperator:CANOp ;
- property FieldDataType:TFieldType ;
- property ValueSize:integer ;
- property Partial:Boolean ;
- end;
-
- {Currently unused "holder" for a "set" filter, it may be used in V2 or
- it may go!!}
- TBDEFilter = class(TObject)
- private
- protected
- public
- property hFilter:hDBiFilter;
- property Name:string ;
- end;
-
- {The FilterExpression Object}
- TFilter = class(TComponent)
- private
- protected
- { Protected declarations }
- public
- { Public declarations }
- constructor Create(AOwner:TComponent);override;
- destructor Destroy;override;
- procedure DBActivateFilter(hFilter: hDBiFilter);
- procedure DBDeactivateFilter(hFilter: hDBiFilter) ;
- procedure DBDropFilter(var hFilter: hDBiFilter);
- function DBAddFilter:hDBiFilter;
- procedure Add(AFieldName:StringFN;AOperator:CANOp;AFieldValue:string;ANextOperator:CANOp);
- procedure AddFilterCondition(AFilterCondition:TFilterCondition);
- procedure DeleteFilterCondition(Index:integer);
- procedure ClearFilterConditions;
- procedure RemoveFilter;{remove filter from Dataset}
- procedure Prepare;
- procedure UnPrepare;
- procedure SaveToFile (Const FileName:string);
- procedure LoadFromFile(const FileName:string);
- property Active:Boolean
- property Prepared:Boolean
- property FilterCount:integer
- property Conditions[Index:integer]:TFilterCondition ;default;
- property Handle:hDBiFilter
- published
- property Dataset: TDataset
- property GoFirst:Boolean
- property AutoActivate:Boolean
- property AutoPack:Boolean
- end;
-
- TFilterFunc = class(TComponent)
- private
- protected
- function DoFilter(pRecBuf:pointer;iPhyRecNo:integer):Integer;
- property Buffer:PChar
- property Size:word
- public
- Constructor Create(AOwner:TComponent);override;
- Destructor Destroy;override;
- procedure Activate;
- procedure DeActivate;
- property Active:Boolean
- property Handle:hDBiFilter
- procedure OnOpen(Dataset: TDataset);
- procedure OnClose(Dataset: TDataset);
- published
- property Dataset:TDataset
- property OnFilterRecord :TFilterEvent
- property GoFirst:Boolean
- property AutoActivate:Boolean
- property AfterDatasetOpen:TDatasetNotifyEvent read FAfterDatasetOpen write FAfterDatasetOpen;
- property BeforeDatasetClose:TDatasetNotifyEvent read FBeforeDatasetClose write FBeforeDatasetClose;
- end;
-
- procedure Register;
-
- function ScanFrom(C:char ; Str:String ; StartFrom:byte): integer;
-
- implementation
-
-