Filter Builder

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

Post Reply
User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Filter Builder

Post by AUGE_OHR »

hi,

does someone have made Filter Builder like this under harbour / HMG :?:
Filter_Builder.JPG
Filter_Builder.JPG (56.44 KiB) Viewed 2344 times
i have made it under Xbase++ for DBF and SQL

Code: Select all

   ::aPre := { { " NONE ", .T. }, ;
               { " $ ", .T. }, ;
               { " == ", .T. }, ;
               { " <> ", .T. }, ;
               { " > ", .T. }, ;
               { " >= ", .T. }, ;
               { " < ", .T. }, ;
               { " <= ", .T. } }

   ::aMid := { { " NONE ", .T. }, ;
               { " AND ", .T. }, ;
               { " OR ", .T. }, ;
               { " AND NOT ", .T. } }

   ::aPost := { { " NONE ", .T. }, ;
                { " < ", .T. }, ;
                { " <= ", .T. }, ;
                { " > ", .T. }, ;
                { " >= ", .T. } }

   ::aMore := { { " NONE ", .T. }, ;
                { " AND ", .T. }, ;
                { " OR ", .T. }, ;
                { " AND NOT ", .T. } }
have fun
Jimmy
User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: Filter Builder

Post by AUGE_OHR »

hi,

i have begin with Sample und remember what the Problem was.
i need to limit Combo Item to be select :idea:
Combo_canSelect.jpg
Combo_canSelect.jpg (27.01 KiB) Viewed 2264 times
if i choice Field "A" using "==" that no other Option for this Field in this line
if ">" is used next can be NONE or "<"

now i Demo Source i have no validation before EVAL(&cBlock)
HBFILTER.ZIP
(3.5 KiB) Downloaded 119 times
so how to implement Logic in harbour / HMG Code :idea:

p.s. i use some SP_* Function like PUBLIC which are not include in Demo Source but easy to replace
have fun
Jimmy
User avatar
dragancesu
Posts: 930
Joined: Mon Jun 24, 2013 11:53 am
DBs Used: DBF, MySQL, Oracle
Location: Subotica, Serbia

Re: Filter Builder

Post by dragancesu »

Are you doing this for you or the user?

It's nice to give them free form, but it's not bad to make some restrictions

Look at the program, field selection, allows wildcards, can be written to the command line
Attachments
filter.zip
(23.06 KiB) Downloaded 135 times
User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: Filter Builder

Post by AUGE_OHR »

hi,

you have made much more than i have think of.
i just want to make a "simple" Filter Builder

Field Selection is a other Option using PickList()
both was design for PostgreSQL to Browse a Result-Set

---

when have a FIELD Type "L" it does not make sense to have "<" or ">" Option so i want to "disable" Item.
so my Question is about ComboBox what can i do :idea:

---

under OOP it is easy to build a own CLASS FROM and add what i need.
under HMG / Extended Version i must enhance Source to add "more" ... :roll:
have fun
Jimmy
User avatar
mol
Posts: 3774
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: Filter Builder

Post by mol »

I have such a solution in my application. It's hard to cut off it and build simple sample, but I describe my idea.
I have field selector and operator based on comboboxes.
When user choose field, ONCHANGE action is testing type of this field and replaces items of operator combobox.
In my application I can compare one field with another, so there is defined second field selector and third field selector for something like: is the field in range of Value1 and Value2. These selectors are hidden for logical fields.
Here is a form code. It has ten years, from my beginning of HMG'ing. But still works.

Code: Select all

* HMG-IDE ANSI Form Designer Generated Code
* (c) Roberto Lopez - http://sites.google.com/site/hmgweb

DEFINE WINDOW TEMPLATE AT 162 , 313 WIDTH 860 HEIGHT 447 VIRTUAL WIDTH Nil VIRTUAL HEIGHT Nil TITLE "Zdefiniuj warunek" ICON NIL MODAL CURSOR NIL ON INIT Nil ON RELEASE Nil ON INTERACTIVECLOSE Nil ON MOUSECLICK Nil ON MOUSEDRAG Nil ON MOUSEMOVE Nil ON SIZE Nil ON PAINT Nil BACKCOLOR {174,215,255} ON GOTFOCUS Nil ON LOSTFOCUS Nil ON SCROLLUP Nil ON SCROLLDOWN Nil ON SCROLLLEFT Nil ON SCROLLRIGHT Nil ON HSCROLLBOX Nil ON VSCROLLBOX Nil

    DEFINE CONTEXT MENU
        MENUITEM "Usuń warunek" ACTION DeleteCondition() NAME DeleteCondition
    END MENU

    DEFINE LABEL Label_Kolumna
        ROW    40
        COL    20
        WIDTH  140
        HEIGHT 18
        VALUE "&Kolumna"
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        FONTBOLD .F.
        FONTITALIC .T.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        VISIBLE .T.
        TRANSPARENT .T.
        ACTION Nil
        AUTOSIZE .F.
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
    END LABEL

    DEFINE COMBOBOX C_Pole
        ROW    60
        COL    20
        WIDTH  180
        HEIGHT 300
        ITEMS aHeadersForFiltr
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE ZmienOperatory()
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        SORT .F.
        ONENTER Nil
        ONDISPLAYCHANGE Nil
        DISPLAYEDIT .F.
        IMAGE Nil
        DROPPEDWIDTH Nil
        ONDROPDOWN Nil
        ONCLOSEUP Nil
    END COMBOBOX

    DEFINE LABEL Label_Operator
        ROW    40
        COL    210
        WIDTH  120
        HEIGHT 18
        VALUE "&Operator"
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        FONTBOLD .F.
        FONTITALIC .T.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        VISIBLE .T.
        TRANSPARENT .T.
        ACTION Nil
        AUTOSIZE .F.
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
    END LABEL

    DEFINE COMBOBOX C_Operator
        ROW    60
        COL    210
        WIDTH  200
        HEIGHT 200
        ITEMS opcje
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE UstawFiltr_ZmianaOperatora()
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        SORT .F.
        ONENTER Nil
        ONDISPLAYCHANGE Nil
        DISPLAYEDIT .F.
        IMAGE Nil
        DROPPEDWIDTH Nil
        ONDROPDOWN Nil
        ONCLOSEUP Nil
    END COMBOBOX

    DEFINE RADIOGROUP R_Rodzaj2
        ROW    40
        COL    430
        WIDTH  130
        HEIGHT 50
        OPTIONS {'Podana wartość ','&Inna kolumna'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE ZmienRodzajCzynnika2()
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .T.
        SPACING 25
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
        READONLY Nil
        HORIZONTAL .F. 
    END RADIOGROUP

    DEFINE LABEL Label_Wartosc
        ROW    40
        COL    570
        WIDTH  140
        HEIGHT 18
        VALUE "&Wartość"
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        VISIBLE .T.
        TRANSPARENT .T.
        ACTION Nil
        AUTOSIZE .F.
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
    END LABEL

    DEFINE TEXTBOX T_Czynnik2C
        ROW    60
        COL    570
        WIDTH  200
        HEIGHT 24
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        READONLY .F.
        RIGHTALIGN .F.
        DISABLEDBACKCOLOR Nil
        DISABLEDFONTCOLOR Nil
        CASECONVERT NONE
        MAXLENGTH 200
        BACKCOLOR NIL
        FONTCOLOR NIL
        INPUTMASK Nil
        FORMAT Nil
        VALUE ""
    END TEXTBOX

    DEFINE TEXTBOX T_Czynnik2N
        ROW    60
        COL    570
        WIDTH  200
        HEIGHT 24
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .F.
        READONLY .F.
        RIGHTALIGN .F.
        DISABLEDBACKCOLOR Nil
        DISABLEDFONTCOLOR Nil
        CASECONVERT NONE
        BACKCOLOR NIL
        FONTCOLOR NIL
        INPUTMASK "999999999.9999"
        FORMAT Nil
        NUMERIC .T. 
        VALUE Nil
    END TEXTBOX

    DEFINE DATEPICKER T_Czynnik2D
        ROW    60
        COL    570
        WIDTH  120
        HEIGHT 24
        VALUE CTOD(" / / ")
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .F.
        SHOWNONE .F.
        UPDOWN .F.
        RIGHTALIGN .F.
    END DATEPICKER

    DEFINE COMBOBOX C_Pole2
        ROW    60
        COL    570
        WIDTH  200
        HEIGHT 100
        ITEMS aHeaders2
        VALUE 0
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .F.
        SORT .F.
        ONENTER Nil
        ONDISPLAYCHANGE Nil
        DISPLAYEDIT .F.
        IMAGE Nil
        DROPPEDWIDTH Nil
        ONDROPDOWN Nil
        ONCLOSEUP Nil
    END COMBOBOX

    DEFINE TEXTBOX T_Czynnik3C
        ROW    100
        COL    570
        WIDTH  200
        HEIGHT 24
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .F.
        READONLY .F.
        RIGHTALIGN .F.
        DISABLEDBACKCOLOR Nil
        DISABLEDFONTCOLOR Nil
        CASECONVERT NONE
        MAXLENGTH 200
        BACKCOLOR NIL
        FONTCOLOR NIL
        INPUTMASK Nil
        FORMAT Nil
        VALUE ""
    END TEXTBOX

    DEFINE TEXTBOX T_Czynnik3N
        ROW    100
        COL    570
        WIDTH  200
        HEIGHT 24
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .F.
        READONLY .F.
        RIGHTALIGN .F.
        DISABLEDBACKCOLOR Nil
        DISABLEDFONTCOLOR Nil
        CASECONVERT NONE
        BACKCOLOR NIL
        FONTCOLOR NIL
        INPUTMASK "999999999.9999"
        FORMAT Nil
        NUMERIC .T. 
        VALUE Nil
    END TEXTBOX

    DEFINE DATEPICKER T_Czynnik3D
        ROW    100
        COL    570
        WIDTH  120
        HEIGHT 24
        VALUE CTOD(" / / ")
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .F.
        SHOWNONE .F.
        UPDOWN .F.
        RIGHTALIGN .F.
    END DATEPICKER

    DEFINE COMBOBOX C_Pole3
        ROW    100
        COL    570
        WIDTH  200
        HEIGHT 100
        ITEMS aHeaders2
        VALUE 0
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .F.
        SORT .F.
        ONENTER Nil
        ONDISPLAYCHANGE Nil
        DISPLAYEDIT .F.
        IMAGE Nil
        DROPPEDWIDTH Nil
        ONDROPDOWN Nil
        ONCLOSEUP Nil
    END COMBOBOX

    DEFINE BUTTON P_DodajWarunek
        ROW    210
        COL    620
        WIDTH  100
        HEIGHT 40
        ACTION GetCondition()
        CAPTION "&Dodaj warunek"
        FONTNAME "Arial"
        FONTSIZE 11
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        HELPID Nil
        FLAT .F.
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        MULTILINE .T.
        PICTURE Nil
        PICTALIGNMENT TOP
    END BUTTON

    DEFINE BUTTON P_UstawFiltr
        ROW    340
        COL    620
        WIDTH  100
        HEIGHT 40
        ACTION P_UstawFiltr()
        CAPTION "&Ustaw Filtr"
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        HELPID Nil
        FLAT .F.
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        MULTILINE .T.
        PICTURE Nil
        PICTALIGNMENT TOP
    END BUTTON

    DEFINE GRID G_Conditions
        ROW    270
        COL    30
        WIDTH  570
        HEIGHT 110
        ITEMS aGridConditions
        VALUE {0,0}
        WIDTHS {470,80}
        HEADERS {"Warunek","Operator"}
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP "Użyj prawego klawisza myszy, aby usunąć warunek"
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONDBLCLICK Nil
        ONHEADCLICK Nil
        ONQUERYDATA Nil
        MULTISELECT .F.
        ALLOWEDIT .T.
        VIRTUAL .F.
        DYNAMICBACKCOLOR Nil
        DYNAMICFORECOLOR Nil
        COLUMNWHEN {{||.f.},{||!empty(this.CellValue)}}
        COLUMNVALID Nil
        COLUMNCONTROLS {{"TEXTBOX","CHARACTER"},{"COMBOBOX",{"i","lub"}}}
        SHOWHEADERS .T.
        CELLNAVIGATION .T.
        NOLINES .F.
        HELPID Nil
        IMAGE Nil
        JUSTIFY {0,2}
        ITEMCOUNT Nil
        BACKCOLOR NIL
        FONTCOLOR NIL
        HEADERIMAGES Nil
        ROWSOURCE Nil
        COLUMNFIELDS Nil
        ALLOWAPPEND .F.
        ALLOWDELETE .F.
        BUFFERED .F.
        DYNAMICDISPLAY .F.
        ONSAVE Nil
        LOCKCOLUMNS 0
    END GRID

    DEFINE LABEL Label_1
        ROW    250
        COL    30
        WIDTH  250
        HEIGHT 18
        VALUE "Tabela zdefiniowanych warunków"
        FONTNAME "Arial"
        FONTSIZE 10
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .T.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        VISIBLE .T.
        TRANSPARENT .F.
        ACTION Nil
        AUTOSIZE .F.
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
    END LABEL

    DEFINE CHECKBOX CH_WielkoscLiter
        ROW    155
        COL    570
        WIDTH  180
        HEIGHT 24
        CAPTION "Uwzględniaj wielkość liter"
        VALUE .F.
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
    END CHECKBOX

    DEFINE RADIOGROUP R_LacznikWarunku
        ROW    180
        COL    430
        WIDTH  100
        HEIGHT 28
        OPTIONS { 'i','lub'}
        VALUE 1
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        ONCHANGE Nil
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        SPACING 50
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
        READONLY Nil
        HORIZONTAL .T. 
    END RADIOGROUP

    DEFINE LABEL Label_2
        ROW    160
        COL    400
        WIDTH  160
        HEIGHT 24
        VALUE "Łącznik między warunkami"
        FONTNAME "Arial"
        FONTSIZE 9
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        HELPID Nil
        VISIBLE .T.
        TRANSPARENT .T.
        ACTION Nil
        AUTOSIZE .F.
        BACKCOLOR {174,215,255}
        FONTCOLOR NIL
    END LABEL

    DEFINE BUTTON P_WylaczFiltr
        ROW    340
        COL    730
        WIDTH  100
        HEIGHT 40
        ACTION OknoWarunek_P_WylaczFiltr()
        CAPTION "Wyłącz Filtr"
        FONTNAME "Arial"
        FONTSIZE 12
        TOOLTIP ""
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        HELPID Nil
        FLAT .F.
        TABSTOP .T.
        VISIBLE .T.
        TRANSPARENT .F.
        MULTILINE .F.
        PICTURE Nil
        PICTALIGNMENT TOP
    END BUTTON

END WINDOW

some functions:

Code: Select all

function ZmienOperatory
	private NumerPola := OknoWarunek.C_Pole.Value
	private czynnik1
	private  i, cTyp2, cTyp3

	if NumerPola == 0
		// jeszcze nie zainicjowane kontrolki w oknie	
		return
	endif
	
	if lVirtualGrid
		czynnik1 := NumerPola
		cTyp := valtype(aDaneZrodlowe[1,NumerPola])
	else
		czynnik1 := rtrim(aFieldsForFiltr[numerpola])
		cTyp := valtype((cWorkAreaForFiltr)->(&(aFieldsForFiltr[numerPola])))
	endif
	
	//msgbox("pole: "+aFieldsForFiltr[numerPola] + chr(10) + "typ: "+cTyp)
	
	aHeaders2:={}
	aFields2 := {}
	aHeaders3:={}
	aFields3 := {}

	for i:= 1 to len(aHeadersForFiltr)
		if lVirtualGrid
			cTyp2 := valtype(aDaneZrodlowe[1,NumerPola])
		else
			cTyp2 := valtype((cWorkAreaForFiltr)->(&(aFieldsForFiltr[i])))
		endif
		
		if cTyp2== cTyp
			aadd(aHeaders2,aHeadersForFiltr[i])
			aadd(aHeaders3,aHeadersForFiltr[i])
			if lVirtualGrid
				aadd(aFields2, i)
				aadd(aFields3, i)
			else
				aadd(aFields2, aFieldsForFiltr[i])
				aadd(aFields3, aFieldsForFiltr[i])
			endif
		endif
	next i
	
	do case
		case cTyp == "L"
			Opcje := {"Prawda","Fałsz","takie, jak","różne od"}
			aOperatory := {"Prawda","Fałsz","=","<>"}
		case cTyp == "N"
			Opcje := {      '    =', '   <>', '   <=', '   <', '   >=','   >','w zakresie' }
			aOperatory := {      'równa się', 'różne od', 'mniejsze od lub równe ', 'mniejsze od', 'większe od lub równe','większe od','jest w zakresie'}
		case cTyp == "C" .or. cTyp == "M"
			Opcje := {      '    =', '   <>', '   <=', '   <', '   >=','   >','w zakresie','zawiera',' puste','niepuste'}
			aOperatory := {      'równa się', 'różne od', 'mniejsze od lub równe ', 'mniejsze od', 'większe od lub równe','większe od',, 'jest w zakresie','zawiera ciąg znaków','jest pusty','jest niepusty'}
		case cTyp == "D"
			Opcje := {      '    =', '   <>', '   <=', '   <', '   >=','   >' ,'w zakresie'}
			aOperatory := {      'jest równa', 'jest różna od', 'starsza niż lub równa', 'starsza niż', 'młodsza lub równa','młodsza niż', 'jest w zakresie'}
	end case

	
	OknoWarunek.C_Operator.DeleteAllItems

	for i := 1 to len(Opcje)
		OknoWarunek.C_Operator.AddItem(aOperatory[i])
	next i

	OknoWarunek.C_Operator.Value := 1
	OknoWarunek.C_Pole2.DeleteAllItems
	OknoWarunek.C_Pole3.DeleteAllItems

	for i := 1 to len(aHeaders2)
		OknoWarunek.C_Pole2.AddItem(aHeaders2[i])
		OknoWarunek.C_Pole3.AddItem(aHeaders2[i])
	next i

	OknoWarunek.C_Pole2.Value := 1
	OknoWarunek.C_Pole3.Value := 1

	OknoWarunek.CH_WielkoscLiter.Visible := (cTyp == "C" .or. cTyp == "M")

	if OknoWarunek.R_Rodzaj2.Value == 1
		OknoWarunek.T_Czynnik2D.Visible := (cTyp == "D")
		OknoWarunek.T_Czynnik2C.Visible := (cTyp == "C" .or. cTyp == "M")
		OknoWarunek.T_Czynnik2N.Visible := (cTyp == "N")
		OknoWarunek.C_Pole2.Visible := .f.
	else
		OknoWarunek.T_Czynnik2D.Visible := .f.
		OknoWarunek.T_Czynnik2C.Visible := .f.
		OknoWarunek.T_Czynnik2N.Visible := .f.
		OknoWarunek.C_Pole2.Visible := .t.
	endif

	OknoWarunek.T_Czynnik3D.Visible := .f.
	OknoWarunek.T_Czynnik3C.Visible := .f.
	OknoWarunek.T_Czynnik3N.Visible := .f.
	OknoWarunek.C_Pole3.Visible := .f.

return
*------------------------
function UstawFiltr_ZmianaOperatora
	local cTyp
	
	//cTyp := valtype(&(cWorkAreaForFiltr+"->" +aFields[OknoWarunek.C_Pole.Value]))
	
	if lVirtualGrid
		cTyp := valtype(aDaneZrodlowe[1,OknoWarunek.C_Pole.Value])
	else
		cTyp := valtype(&(aFieldsForFiltr[OknoWarunek.C_Pole.Value]))
	endif
	
	OknoWarunek.T_Czynnik2C.Visible := (this.Value<=8 .and. cTyp=="C")
	OknoWarunek.T_Czynnik3D.Visible := (this.Value=7 .and. cTyp=="D")
	OknoWarunek.T_Czynnik3C.Visible := (this.Value=7 .and. cTyp=="C")
	OknoWarunek.T_Czynnik3N.Visible := (this.Value=7 .and. cTyp=="N")
 return
*------------------------
function ZmienRodzajCzynnika2
	OknoWarunek.T_Czynnik2D.Visible := .f.
	OknoWarunek.T_Czynnik2C.Visible := .f.
	OknoWarunek.T_Czynnik2N.Visible := .f.
	OknoWarunek.C_Pole2.Visible := .f.
	
	OknoWarunek.T_Czynnik3D.Visible := .f.
	OknoWarunek.T_Czynnik3C.Visible := .f.
	OknoWarunek.T_Czynnik3N.Visible := .f.
	OknoWarunek.C_Pole3.Visible := .f.

//msgbox("Zmienrodzajczynnika2: ctyp: "+ cTyp)
	if OknoWarunek.R_Rodzaj2.Value == 1
		// filtr wg wartości stałej
		do case
			case cTyp == "N"
			
				OknoWarunek.T_Czynnik2D.Visible := .f.
				OknoWarunek.T_Czynnik2C.Visible := .f.
				OknoWarunek.T_Czynnik2N.Visible := .t.
				
				OknoWarunek.T_Czynnik3D.Visible := .f.
				OknoWarunek.T_Czynnik3C.Visible := .f.
				OknoWarunek.T_Czynnik3N.Visible := (OknoWarunek.C_operator.Value == 7)
				
			case cTyp == "C" .or. cTyp == "M"
			
				OknoWarunek.T_Czynnik2D.Visible := .f.
				OknoWarunek.T_Czynnik2C.Visible := .t.
				OknoWarunek.T_Czynnik2N.Visible := .f.

				OknoWarunek.T_Czynnik3D.Visible := .f.
				OknoWarunek.T_Czynnik3C.Visible := (OknoWarunek.C_operator.Value == 7)
				OknoWarunek.T_Czynnik3N.Visible := .f.
				
			case cTyp == "D"

				OknoWarunek.T_Czynnik2D.Visible := .t.
				OknoWarunek.T_Czynnik2C.Visible := .f.
				OknoWarunek.T_Czynnik2N.Visible := .f.

				OknoWarunek.T_Czynnik3D.Visible := (OknoWarunek.C_operator.Value == 7)
				OknoWarunek.T_Czynnik3C.Visible := .f.
				OknoWarunek.T_Czynnik3N.Visible := .f.

		end case
	else
		OknoWarunek.C_Pole2.Visible := .t.
		OknoWarunek.C_Pole3.Visible := (OknoWarunek.C_operator.Value == 7)
	endif
	
return
*------------------------
franco
Posts: 877
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Location: Canada

Re: Filter Builder

Post by franco »

What I do is use temporary indexes much faster on larger files.
Like
select table
oldrec := recno
nord := indexord()
index on field for something = something to temp
** or index on field for something = something .and. something else = something else to temp
set index to temp
do your functions.
set order to nord
dbgoto(oldrec)

erase your temporary index.

I built browse functions that I send table and index parameters to That I use extensively in my programs.
Franco
All The Best,
Franco
Canada
User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: Filter Builder

Post by AUGE_OHR »

hi,

here next Version of HbFilter.
HBFILTER02.ZIP
(4.25 KiB) Downloaded 148 times
i have implement "Logic" and use LOSTFOCUS to activate re-fill of Combobox with allowed Items.

Power-User can use EDITBOX direct and press EVAL else it will work menu-driven.
when work with Keyboard ENTER will "SetFocus" to next "Entry".

have fun
have fun
Jimmy
User avatar
dragancesu
Posts: 930
Joined: Mon Jun 24, 2013 11:53 am
DBs Used: DBF, MySQL, Oracle
Location: Subotica, Serbia

Re: Filter Builder

Post by dragancesu »

I guess something like this is required
I'm not sure it's for the end user
Legend:
dbf - structures,
oper - operators for fields

Done with data in dbf, it would be better if it was in array, this was faster for me, and easier to analyze how it works

Probably someone will write that the rules of the memo field are missing, it can be easily added

The conditions LIKE and BETWEEN are for SQL databases, dbf does not support it, so it is simulated
Attachments
filter2.zip
(3.63 KiB) Downloaded 133 times
Post Reply