home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / e_to_l / edsspell / dbfilter.int < prev    next >
Encoding:
Text File  |  1996-09-15  |  4.1 KB  |  132 lines

  1. {Name:DBFilter}
  2. {Version: 1.1}
  3. {Copyright:Visual Solutions Ltd 1996}
  4. {Purpose:Interface to BDE filter language}
  5.  {V1.0 - 17/1/96
  6.     V1.1 - 5/2/96 }
  7.  {1.1 Amends FilterFunc to link directly to DSet not DSource improves
  8.  EOF/BOF handling adds GoFirst AutoActivate options}
  9. {Filters are like queries except the're fast and return live results and are
  10. independent of any exisitng index. Filter provides a standard Expression
  11. Filter, and FilterFunc allows the expresson to be a callback to a user specified
  12. function}
  13. {DBIERR_NONE
  14.  DBIERR_INVALIDHNDL
  15.  DBIERR_NOSUCHFILTER
  16.  DBIERR_NA - if Add means too complex if deact means already deact}
  17. unit DBFilter;
  18.  
  19. {$B-}{will not work with full expr eval!!!}
  20.  
  21. interface
  22.  
  23. uses
  24.     SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  25.     Forms, Dialogs, DBITypes,  DBIProcs, DBIErrs, DB, DBTables, TypInfo, ExtCtrls;
  26.  
  27. const
  28.     {FilterFunction reset message}
  29.     CM_FILTERREFRESH=WM_USER+1000;
  30.     {Filter expression constants}
  31.     EXPRSIZE = sizeof(CANExpr);{10}
  32.     NODESIZE = sizeof(CANNode);{12}
  33.     {CANEXPRVERSION Picked up from DBiTypes - currently 2}
  34.  
  35. type
  36.     StringFN = String[DBIMAXNAMELEN]; {Used for FieldName}{DBIMAXNAMELEN=31}
  37.     TFilterState = (fsPrepared,fsSet,fsActive);
  38.  
  39.     {TFilterFunc - OnFilter Event}
  40.     TFilterEvent = function(Sender:TObject; DataSet:TDataSet):Boolean of object;
  41.  
  42.     {Holder for a condition before it is prepared}
  43.     TFilterCondition = class
  44.     private
  45.     public
  46.         procedure Add(AFieldName:StringFN;AOperator:CANOp;AFieldValue:string;ANextOperator:CANOp);
  47.         property Dataset:TDataset;
  48.         property AsString:string ;
  49.         property FieldName:stringFN ;
  50.         property Operator:CANOp ;
  51.         property FieldValue:string;
  52.         property NextOperator:CANOp ;
  53.         property FieldDataType:TFieldType ;
  54.         property ValueSize:integer ;
  55.         property Partial:Boolean ;
  56.     end;
  57.  
  58.     {Currently unused "holder" for a "set" filter, it may be used in V2 or
  59.     it may go!!}
  60.     TBDEFilter = class(TObject)
  61.     private
  62.     protected
  63.     public
  64.         property hFilter:hDBiFilter;
  65.         property Name:string ;
  66.     end;
  67.  
  68.     {The FilterExpression Object}
  69.     TFilter = class(TComponent)
  70.     private
  71.     protected
  72.         { Protected declarations }
  73.     public
  74.         { Public declarations }
  75.         constructor Create(AOwner:TComponent);override;
  76.         destructor Destroy;override;
  77.         procedure DBActivateFilter(hFilter: hDBiFilter);
  78.         procedure DBDeactivateFilter(hFilter: hDBiFilter) ;
  79.         procedure DBDropFilter(var hFilter: hDBiFilter);
  80.         function     DBAddFilter:hDBiFilter;
  81.         procedure Add(AFieldName:StringFN;AOperator:CANOp;AFieldValue:string;ANextOperator:CANOp);
  82.         procedure AddFilterCondition(AFilterCondition:TFilterCondition);
  83.         procedure DeleteFilterCondition(Index:integer);
  84.         procedure ClearFilterConditions;
  85.         procedure RemoveFilter;{remove filter from Dataset}
  86.         procedure Prepare;
  87.         procedure UnPrepare;
  88.         procedure SaveToFile (Const FileName:string);
  89.         procedure LoadFromFile(const FileName:string);
  90.         property Active:Boolean 
  91.         property Prepared:Boolean 
  92.         property FilterCount:integer 
  93.         property Conditions[Index:integer]:TFilterCondition ;default;
  94.         property Handle:hDBiFilter 
  95.     published
  96.         property Dataset: TDataset 
  97.         property GoFirst:Boolean 
  98.         property AutoActivate:Boolean 
  99.         property AutoPack:Boolean 
  100.     end;
  101.  
  102.     TFilterFunc = class(TComponent)
  103.     private
  104.     protected
  105.         function DoFilter(pRecBuf:pointer;iPhyRecNo:integer):Integer;
  106.         property Buffer:PChar 
  107.         property Size:word 
  108.     public
  109.         Constructor Create(AOwner:TComponent);override;
  110.         Destructor Destroy;override;
  111.         procedure Activate;
  112.         procedure DeActivate;
  113.         property Active:Boolean 
  114.         property Handle:hDBiFilter 
  115.         procedure OnOpen(Dataset: TDataset);
  116.         procedure OnClose(Dataset: TDataset);
  117.     published
  118.         property Dataset:TDataset 
  119.         property OnFilterRecord :TFilterEvent 
  120.         property GoFirst:Boolean 
  121.         property AutoActivate:Boolean 
  122.         property AfterDatasetOpen:TDatasetNotifyEvent read FAfterDatasetOpen write FAfterDatasetOpen;
  123.         property BeforeDatasetClose:TDatasetNotifyEvent read FBeforeDatasetClose write FBeforeDatasetClose;
  124.     end;
  125.  
  126. procedure Register;
  127.  
  128. function ScanFrom(C:char ; Str:String ; StartFrom:byte): integer;
  129.  
  130. implementation
  131.  
  132.