1
0
Files
applications
bindings
components
acs
beepfp
cmdline
epiktimer
fpspreadsheet
gradcontrols
jvcllaz
manualdock
mplayer
multithreadprocs
onguard
orpheus
powerpdf
rgbgraphics
richmemo
richview
rtfview
rx
Demos
docs
images
languages
lib
WinXP.manifest
WindowsXP.RES
WindowsXP.rc
autopanel.pas
boxprocs.pas
curredit.pas
dateutil.pas
dbdateedit.pas
dbutils.pas
dcl_rx_ctrl.lpk
dcl_rx_ctrl.pas
duallist.pas
exsortfb.pas
exsortmds.pas
exsortzeos.pas
fduallst.lfm
fduallst.lrs
fduallst.lrt
fduallst.pas
folderlister.pas
pagemngr.pas
pickdate.lrs
pickdate.pas
register_rxctrl.pas
registerrx.pas
registerrxdb.pas
rx.inc
rx.lrs
rxappicon.pas
rxapputils.pas
rxceeditlookupfields.pas
rxclock.pas
rxconst.pas
rxctrls.pas
rxcustomchartpanel.pas
rxdbcomb.pas
rxdbctrls.pas
rxdbgrid.lrs
rxdbgrid.pas
rxdbgrid_columsunit.lfm
rxdbgrid_columsunit.lrs
rxdbgrid_columsunit.lrt
rxdbgrid_columsunit.pas
rxdbgrid_findunit.lfm
rxdbgrid_findunit.lrs
rxdbgrid_findunit.pas
rxdbspinedit.pas
rxdbtimeedit.pas
rxdconst.pas
rxdice.inc
rxdice.pas
rxfilterby.lfm
rxfilterby.lrs
rxfilterby.lrt
rxfilterby.pas
rxhistory.pas
rxiconv.pas
rxlogin.lfm
rxlogin.lrs
rxlogin.pas
rxlookup.pas
rxmemds.pas
rxnew.lpk
rxnew.pas
rxpopupunit.pas
rxsortby.lfm
rxsortby.lrs
rxsortby.lrt
rxsortby.pas
rxsortmemds.pas
rxspin.lrs
rxspin.pas
rxstrutils.pas
rxswitch.inc
rxswitch.pas
rxtbrsetup.lfm
rxtbrsetup.lrs
rxtbrsetup.lrt
rxtbrsetup.pas
rxtimeedit.pas
rxtoolbar.pas
rxxpman.pas
seldsfrm.lfm
seldsfrm.lrs
seldsfrm.lrt
seldsfrm.pas
tooledit.lrs
tooledit.pas
vclutils.pas
svn
tparadoxdataset
tvplanit
virtualtreeview
virtualtreeview-new
xdev_toolkit
examples
lclbindings
wst
lazarus-ccr/components/rx/rxfilterby.pas

350 lines
9.1 KiB
ObjectPascal
Raw Normal View History

unit rxfilterby;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, db;
type
{ TrxFilterByForm }
TrxFilterByForm = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
ComboBox1: TComboBox;
ComboBox10: TComboBox;
ComboBox11: TComboBox;
ComboBox12: TComboBox;
ComboBox13: TComboBox;
ComboBox14: TComboBox;
ComboBox15: TComboBox;
ComboBox16: TComboBox;
ComboBox17: TComboBox;
ComboBox18: TComboBox;
ComboBox19: TComboBox;
ComboBox2: TComboBox;
ComboBox20: TComboBox;
ComboBox21: TComboBox;
ComboBox22: TComboBox;
ComboBox23: TComboBox;
ComboBox24: TComboBox;
ComboBox25: TComboBox;
ComboBox26: TComboBox;
ComboBox27: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
ComboBox6: TComboBox;
ComboBox7: TComboBox;
ComboBox8: TComboBox;
ComboBox9: TComboBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ComboBoxChange(Sender: TObject);
procedure EditChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Combo_1 : Array[1..9] of TComboBox;
Combo_2 : Array[1..9] of TComboBox;
Edit_1 : Array[1..9] of TEdit;
Combo_3 : Array[1..9] of TComboBox;
Table : TDataSet;
procedure ClearALL(adoTable : TDataSet);
function FindCombo(CB:TComboBox):Integer;
function FindEdit(ED:TEdit):Integer;
public
function Execute(adoTable : TDataSet; Var FilterStr : String; Var LastFilter : TstringList):Boolean;
end;
var
rxFilterByForm: TrxFilterByForm;
implementation
uses rxdconst;
{ TrxFilterByForm }
procedure TrxFilterByForm.Button2Click(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TrxFilterByForm.Button3Click(Sender: TObject);
begin
ClearALL(Table);
end;
procedure TrxFilterByForm.ComboBoxChange(Sender: TObject);
Var
CBN : Integer;
CB : TComboBox;
begin
CB := (Sender AS TComboBox);
CBN := FindCombo(CB);
if CBN=0 Then Exit;
if (CB.Text=' IS NULL ') Or (CB.Text=' IS NOT NULL ') Then
Begin
Edit_1[CBN].Text := '';
Edit_1[CBN].Enabled := False;
Edit_1[CBN].Color := clInactiveCaption;
End
Else
Begin
Edit_1[CBN].Enabled := True;
Edit_1[CBN].Color := clWindow;
End;
end;
procedure TrxFilterByForm.EditChange(Sender: TObject);
Var
EDN : Integer;
ED : TEdit;
begin
ED := (Sender AS TEdit);
EDN := FindEdit(ED);
if EDN=0 Then Exit;
if ED.Text='' Then Combo_1[EDN].ItemIndex:=-1;
end;
procedure TrxFilterByForm.FormCreate(Sender: TObject);
begin
Label1.Caption:=sRxFilterFormSelectExp;
Label2.Caption:=sRxFilterFormSelectExp;
Label3.Caption:=sRxFilterFormOperaion;
Label4.Caption:=sRxFilterFormCondition;
Label5.Caption:=sRxFilterFormOperand;
Label6.Caption:=sRxFilterFormEnd;
Button3.Caption:=sRxFilterFormClear;
Button2.Caption:=sRxFilterFormCancel;
Button1.Caption:=sRxFilterFormApply;
end;
procedure TrxFilterByForm.Button1Click(Sender: TObject);
begin
ModalResult := mrOK;
end;
procedure TrxFilterByForm.ClearALL(adoTable : TDataSet);
var
X : Integer;
begin
//*****************************************************************************
Combo_1[1].Items.Clear;
Combo_1[1].Items.Add('');
For X := 0 To adoTable.FieldCount-1 do
Begin
if (adoTable.Fields[X].FieldKind=fkData) And (adoTable.Fields[X].Visible) Then
Combo_1[1].Items.Add(adoTable.Fields[X].FieldName);
End;
Combo_1[1].ItemIndex := 0;
For X := 2 To 9 do
Begin
Combo_1[X].Items.Assign(Combo_1[1].Items);
Combo_1[X].ItemIndex := 0;
End;
Combo_2[1].Items.Clear;
Combo_2[1].Items.Add(' = ');
Combo_2[1].Items.Add(' > ');
Combo_2[1].Items.Add(' < ');
Combo_2[1].Items.Add(' >= ');
Combo_2[1].Items.Add(' <= ');
Combo_2[1].Items.Add(' <> ');
Combo_2[1].Items.Add(' LIKE ');
Combo_2[1].Items.Add(' IS NULL ');
Combo_2[1].Items.Add(' IS NOT NULL ');
Combo_2[1].ItemIndex := 0;
for X := 2 To 9 do
begin
Combo_2[X].Items.Assign(Combo_2[1].Items);
Combo_2[X].ItemIndex := 0;
end;
for X := 1 To 9 do
begin
Combo_3[X].ItemIndex := 0;
end;
for X := 1 To 9 do Edit_1[X].Text := '';
//*****************************************************************************
end;
function TrxFilterByForm.Execute(adoTable : TDataSet; Var FilterStr : String; Var LastFilter : TstringList):Boolean;
Var
X : Integer;
P : Integer;
S : String;
SD : String;
FF : TField;
Begin
Result := False;
//*****************************************************************************
Combo_1[1]:= ComboBox1;
Combo_1[2]:= ComboBox4;
Combo_1[3]:= ComboBox7;
Combo_1[4]:= ComboBox10;
Combo_1[5]:= ComboBox13;
Combo_1[6]:= ComboBox16;
Combo_1[7]:= ComboBox19;
Combo_1[8]:= ComboBox22;
Combo_1[9]:= ComboBox25;
Combo_2[1]:= ComboBox2;
Combo_2[2]:= ComboBox5;
Combo_2[3]:= ComboBox8;
Combo_2[4]:= ComboBox11;
Combo_2[5]:= ComboBox14;
Combo_2[6]:= ComboBox17;
Combo_2[7]:= ComboBox20;
Combo_2[8]:= ComboBox23;
Combo_2[9]:= ComboBox26;
Combo_3[1]:= ComboBox3;
Combo_3[2]:= ComboBox6;
Combo_3[3]:= ComboBox9;
Combo_3[4]:= ComboBox12;
Combo_3[5]:= ComboBox15;
Combo_3[6]:= ComboBox18;
Combo_3[7]:= ComboBox21;
Combo_3[8]:= ComboBox24;
Combo_3[9]:= ComboBox27;
Combo_3[9].Visible := False;
Edit_1[1] := Edit1;
Edit_1[2] := Edit2;
Edit_1[3] := Edit3;
Edit_1[4] := Edit4;
Edit_1[5] := Edit5;
Edit_1[6] := Edit6;
Edit_1[7] := Edit7;
Edit_1[8] := Edit8;
Edit_1[9] := Edit9;
//*****************************************************************************
Table := adoTable;
ClearALL(Table);
if LastFilter.Count > 0 Then
Begin
For X := 0 To LastFilter.Count-1 do
Begin
S := LastFilter.Strings[X];
P := Pos('|||',S);
if P > 0 Then
Begin
Combo_1[X+1].ItemIndex := Combo_1[X+1].Items.IndexOf(System.Copy(S,1,P-1));
System.Delete(S,1,P+2);
End;
P := Pos('|||',S);
if P > 0 Then
Begin
SD:=System.Copy(S,1,P-1);
Combo_2[X+1].ItemIndex := Combo_2[X+1].Items.IndexOf(System.Copy(S,1,P-1));
System.Delete(S,1,P+2);
if (SD=' IS NULL ') or (SD=' IS NOT NULL ') Then
Begin
Edit_1[X+1].Text := '';
Edit_1[X+1].Enabled := False;
Edit_1[X+1].Color := clInactiveCaption;
End;
End;
P := Pos('|||',S);
if P > 0 Then
Begin
Edit_1[X+1].Text := System.Copy(S,1,P-1);
System.Delete(S,1,P+2);
End;
Combo_3[X+1].ItemIndex := Combo_3[X+1].Items.IndexOf(S);
if Combo_3[X+1].ItemIndex = -1 Then Combo_3[X+1].ItemIndex := 0;
End;
End;
ShowModal;
if ModalResult=mrOK Then
Begin
Result := True;
FilterStr := '';
LastFilter.Clear;
For X := 1 to 9 Do
Begin
if (Combo_1[X].Text <> '')
And (Combo_2[X].Text <> '') Then
Begin
if (Edit_1[X].Enabled=False) or (Edit_1[X].Text <> '') Then
Begin
if X>1 Then
FilterStr := FilterStr+Combo_3[X-1].Text+' ';
FF := Table.FindField(Combo_1[X].Text);
Case FF.DataType of
ftDateTime ,
ftDate : FilterStr := FilterStr+'('+Combo_1[X].Text+Combo_2[X].Text+Char(39)+Copy(Edit_1[X].Text,7,4)+Copy(Edit_1[X].Text,3,4)+Copy(Edit_1[X].Text,1,2)+Copy(Edit_1[X].Text,11,9)+Char(39)+') ';
ftUnknown : FilterStr := FilterStr+'('+Combo_1[X].Text+Combo_2[X].Text+Edit_1[X].Text+') ';
ftTime,
ftString,
ftMemo : FilterStr := FilterStr+'('+Combo_1[X].Text+Combo_2[X].Text+Char(39)+Edit_1[X].Text+Char(39)+') ';
else
FilterStr := FilterStr+'('+Combo_1[X].Text+Combo_2[X].Text+Edit_1[X].Text+') ';
End;
LastFilter.Add(Combo_1[X].Text+'|||'+Combo_2[X].Text+'|||'+Edit_1[X].Text+'|||'+Combo_3[X].Text);
End;
End;
End;
End;
End;
Function TrxFilterByForm.FindCombo(CB:TComboBox):Integer;
Var
X : Integer;
Begin
Result :=0;
For X := 1 to 9 do
Begin
if Combo_2[X]=CB Then
Begin
Result := X;
Exit;
End;
End;
End;
Function TrxFilterByForm.FindEdit(ED:TEdit):Integer;
Var
X : Integer;
Begin
Result :=0;
For X := 1 to 9 do
Begin
if Edit_1[X]=ED Then
Begin
Result := X;
Exit;
End;
End;
End;
initialization
{$I rxfilterby.lrs}
end.