Toon posts:

[Delphi] Ontwerp vraag over selectie filter

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb in mijn applicatie een form met daarin een overzicht van artikelen.

Nu kan de gebruiker een filter op dat overzicht toepassen zodat hij niet alle artikelen te zien krijgt. Hij moet dus van 1 of meerdere velden selectie criteria kunnen aangeven.

Maar nu is de vraag hoe dat selectie filter het beste er uit kan zien. Is de manier hoe ze het in Access doen (Grid, waar per kolom een veld gekozen kan worden en dan de criteria ingevuld worden) een goede, gebruikersvriendelijke manier of kan je beter een andere manier doen? Zijn er bijvoorbeeld speciale componenten voor?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:50

mulder

ik spuug op het trottoir

Dat ligt aan de criteria, een textbox voor een like statement, een combobox als de criteria's voorgedefineerd zijn.

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Ik vind de manier waarop je in Access de filtercriteria van een query kunt samenstellen niet echt gebruiksvriendelijk voor de gewone gebruiker van applicaties.

Zeker als de velden waarop je kunt filteren vastliggen, is het beter om op een andere manier te werk te gaan.
Ik maak een filterscherm met daarop een aantal texboxen, comboboxen of andere controls (afhankelijk van het veld) waar de gebruiker zijn waardes waarop hij wil filteren kan ingeven.
Als er bij een bepaald veld een waarde is ingevuld of geselecteerd, dan hou ik daar rekening mee bij het opbouwen van m'n query.

https://fgheysels.github.io/


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Je moet goed kijken wat je je gebruikers wilt aanbieden. Zijn ze handig met het maken van selecties, dan is een power-toy zoals de filter van Access helemaal niet verkeerd. Je kan er echt veel mee, en ik heb gezien dat ook minder ervaren maar intelligente gebruikers met Access snel uit de voeten kunnen.
Zijn ze niet zo handig, dan kom je m.i. al snel uit op een scherm zoals beschreven door whoami. Geef een aantal velden waarin gebruikers voorwaarden kunnen typen. Dan ben je wel minder flexibel (probeer maar eens de 'operator precedence' aan te geven op zo'n scherm), maar misschien hoeven je gebruikers niet alle flexibiliteit.
Als je het op prijs stelt: ik kan van beide situaties screenshots maken. Kan je ze vergelijken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Delphi32: kommaar op met die shots. :P

https://fgheysels.github.io/


Verwijderd

Topicstarter
Delphi32: Ja ik wil ze ook wel zien

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Afbeeldingslocatie: http://www.iarchitect.com/images/cse/cse60.gif
;)

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
En wat is dat LorLarry? :? (Behalve een heel ranzig scherm met veel te veel controls?).

https://fgheysels.github.io/


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

LOL @ LordLarry. Wil je er meer, lees dan the Interface Hall Of Shame :) (url hier niet bij de hand), gegarandeerd een middagje lachen.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Ok hier is het dynamische selectiescherm (beter: de selectieschermen) wat we hier gebruiken. De hoeveelheid popups irriteert me, maar het is beter dan de Program Flags hierboven ;)
Afbeeldingslocatie: http://www.xs4all.nl/~schagend/shots/filter2.jpg

De statische selectie (de Program Flags maar dan net iets anders) heb ik thuis dus die hou je tegoed.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

whoami schreef op 14 augustus 2002 @ 09:48:
En wat is dat LorLarry? :? (Behalve een heel ranzig scherm met veel te veel controls?).
Das een poging to humor :+

Delphi32: Je raad nooit waar ik die screenshot vandaan gehaald had ;) Inderdaad, de Interface Hall of Shame website: http://www.iarchitect.com/mshame.htm

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ik gebruik het als volgt:

Een wizard om een enkele filter expressie toe te voegen. Ongeveer als het screenshot van Delphi32, maar dan in wizard vorm dus (Welk veld? Welke conditie? Welke waarde?). En dan in een lijst of boom de losse expressies aanelkaar koppelen dmv en/of.

We adore chaos because we like to restore order - M.C. Escher


  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

Delphi32 waar heb je die panel component met die kleur gekregen?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Davilex componenten gok ik :)
Waarschijnlijk intern gemaakt, maar ze zijn ook te vinden op www.torry.ru. Gradient panels

[ Voor 0% gewijzigd door LordLarry op 14-08-2002 11:10 . Reden: typo ]

We adore chaos because we like to restore order - M.C. Escher


  • Tom-my
  • Registratie: November 2000
  • Laatst online: 19-06 09:25

Tom-my

w03iz0rz

hey delphi32, werk jij voor davilex toevallig?

"Then there was the man who drowned crossing a stream with an average depth of six inches."


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Goh, hoe kom je daar nou op :)
Enne die gradients kun je idd overal vinden. Als echt programmeur vind ik die dingen natuurlijk maar overbodige ballast, dus ik ben blij dat anderen ze al gemaakt hebben.

Verwijderd

Topicstarter
Delphi32:

Als ik het goed zie, kan bij jou dus de gebruiker een aantal selecties maken die het programma bewaart (dus je gebruikt hier een aparte tabel voor?) ?

En hoe werkt dat precies met die operatoren?

Je kan dus per selectiecriterium een operator aangeven. Maar hoe verwerkt het systeem dat dan in de query.

Zet die alle EN (= AND) tussen haakjes bijv?


Want als je zoiets hebt bijv:

AND Veld1 = .... OR Veld2 = ........ OR Veld1 = ........ AND Veld3 = ........

Dan werkt dat natuurlijk niet goed

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Gebruik dan een boom structuur ipv een lijst

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Misschien kun je je laten inspireren door Tools|Message Rules in Outlook Express.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Jep, ik denk dat men het gebruik van haakjes in deze applicatie te ingewikkeld vond voor de gebruiker. Dus je kan niet aangeven (Achternaam = Jansen AND Geslacht = man) OR (Geslacht = vrouw).

Deze selecties worden idd opgeslagen in aparte tabellen.

Verwijderd

Topicstarter
Dus dit zou een redelijk gebruikersvriendelijke selectie filter zijn? (Delphi32: Ik heb dus geen aparte schermen, want jij gaf ook al aan dat dat niet echt duidelijk is)

Afbeeldingslocatie: http://www.famstuij.dyndns.org:1026/images/selectiefilter.jpg

Het enige nadeel is natuurlijk wel dat als de gebruiker steeds een ander selectie gebruikt, dat hij die dan eerst moet aanmaken en dat die in princiepe niet gebruikt wordt (dus overbodige actie). Maar ja dat hangt af van de gebruiker dus dat weet je niet.

Ik heb ook nog een vraag over die operatoren. Stel je hebt 2 selectie criteria. Een heeft als operator OR en de andere AND. Maar bij de query gebruik je er natuurlijk dan maar 1 (where veld1 > ...... OR/AND veld2 < ...........). Moet je de 1e dan nooit gebruiken?

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Eerst ff een gelofte inlossen: een voorbeeld van zeer eenvoudige selectie die direct uitgevoerd wordt.
Afbeeldingslocatie: http://www.xs4all.nl/~schagend/shots/filter3.jpg
Waar het om gaat is het gedeelte boven de lijst. Daar kan de gebruiker in verschillende velden waarden invoeren (ik heb hier als voorbeeld bij Airline KLM ingevuld), druk op Search of enter en hop, de lijst wordt bijgewerkt. In principe zijn alle velden met elkaar gekoppeld via AND operator.
Het voordeel hiervan is, dat de gebruiker weinig technische kennis nodig heeft (ik heb bewust ervoor gezorgd dat gebruik van wildcards niet nodig is). De gehele lijst van meer dan 40.000 records is heel snel bijgewerkt tot een lijstje dat in omvang door de gebruiker te managen valt. De selectie wordt niet opgeslagen, maar dat is in dit geval ook niet nodig omdat het meer gaat om een snel opzoeken van dingen.

De selectie zoals Davilex die gebruikt, en tokkie in zijn laatste image laat zien, zijn nogal bewerkelijk voor de gebruiker en vragen een hoop inzicht in hoe je een effectief filter opzet. Zeker als je de operators AND en OR wilt gaan gebruiken. Mijn advies: goed kijken hoe de gebruiker straks wil werken met het pakket, want het antwoord op die vraag bepaalt of je voor selecties à la tokkie/Davilex gaat of voor het scherm hierboven. En besef dat een gebruiker liever zoekt in een niet al te lange lijst, dan allerlei (voor hem) moeilijke selectie-mogelijkheden uit zijn hoofd moet leren. Dat hangt natuurlijk wel af van het niveau van je gebruikers.

[edit]sorry, resizing van het screenshot vergeten uit te zetten |:(

Verwijderd

Topicstarter
Het opslaan van selecties is voor mijn applicatie niet echt van belang en alleen maar weer ingewikkelder voor de gebruikers. Dus ik heb dat er maar uitgesloopt. Het zal dus uiteindelijk dit worden:

Afbeeldingslocatie: http://www.famstuij.dyndns.org:1026/images/selectiefilter2.jpg

Maar Delphi32 of iemand anders, zou je nog even naar deze vraag willen kijken:
Ik heb ook nog een vraag over die operatoren. Stel je hebt 2 selectie criteria. Een heeft als operator OR en de andere AND. Maar bij de query gebruik je er natuurlijk dan maar 1 (where veld1 > ...... OR/AND veld2 < ...........). Moet je de 1e dan nooit gebruiken?

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Je geeft het antwoord zelf al. In een where-clause kunnen één of meer voorwaarden voorkomen. Zodra het er meer dan een is, moeten de voorwaarden aan elkaar gerelateerd worden. Bij de eerste voorwaarde heb je dan geen relatiebepaler (AND/OR) nodig. Logisch, want SQL vindt 'WHERE AND veld1 > 10 OR veld2 < 5' niet leuk.

  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Dat is dus niet FOOL-PROOF (de laatste vraag), ik heb het opgebouwd in een advgrid waarbij de gebruiker per record in het grid de keuze krijgt van de kolommen waarop gezocht kan worden, de operator en de waarde en de keuze voor and / or dat zier er ongeveer zo uit:

veld oper waarde
--------------------------------------------------------------------
| artikelnummer | gelijk aan | 1012.001 | and |
-------------------------------------------------------------------
| voorraad | groter dan | 10 | |
--------------------------------------------------------------------

alles is puldown te kiezen in het grid behalve de waarde. Ik heb behoorlijk wat dingen moeten afschermen, bijvoorbeeld een witregel in het grid moet natuurlijk niet in de SQL statement terecht komen.

Je mag trouwens wel verwachten dat een eindgebruiker een beetje logisch moet nadenken wat hij invult

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb


Verwijderd

Topicstarter
Ik weet inmiddels voldoende om een "goed" selectie filter te bouwen.

Allemaal bedankt voor de ideeën.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Ik ben wel benieuwd naar je uiteindelijke resultaat, met een voorbeeldje van hoe het werkt :) Het is nooit verkeerd om van elkaar te leren, toch?

Verwijderd

Topicstarter
Dit is het eindresultaat:

Afbeeldingslocatie: http://www.famstuij.dyndns.org:1026/images/selectiefilter3.jpg

In al mijn Child forms maak ik gebruik van zo'n toolbar en listview. Dus het lijkt allemaal heel veel op elkaar kwa besturing.

Ik laat gewoon een tijdje de gebruikers het zo gebruiken. Als later nou blijkt dat er wel meervoudige operatoren (veld1 and veld2) or (veld3) nodig zijn dan komt dat nog wel (maar wordt gelijk ook een stuk meer werk voor mij ;) )

Ik vind het er vrij eenvoudig uitzien en waar de gemiddelde gebruiker zeker mee moet kunnen omgaan.

(Het lijkt dus veel op het scherm van jou (Delphi32) alleen is er geen mogelijkheid om bepaalde selecties op te slaan onder een naam en zijn er geen meerdere forms)

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Laatste vraag: waarom disable je de operator niet bij de eerste? Of heb ik nu iets niet begrepen?
Het ziet er goed uit, complimenten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Ja, 't is wel sjiek. En het wijst zichzelf ook wel een beetje uit, dus zal het wel makkelijk te leren/gebruiken zijN.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Delphi32 schreef op 16 augustus 2002 @ 00:41:
Laatste vraag: waarom disable je de operator niet bij de eerste? Of heb ik nu iets niet begrepen?
In princiepe zou je dat kunnen doen. Dat dacht ik zelf ook in eerste instantie.

Maar toch kan dat niet. Waarom? De gebruiker kan dus de criteria omhoog en omlaag verplaatsen. Dus je weet nooit wat de eerste criteria zal zijn.

  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Misschien begrijp ik het niet goed hoor maar, als je toch de criteria ergens onder elkaar in een grid zet (maakt niet uit of je dat eerst met een editbox invult of zoals ik doe rechtstreeks in een advgrid via pulldown opties) dan heb je toch altijd een regel die bovenaan staat in het grid.

Dat is dus de veld/voorwaarde(operator)/waarde die in de where clausule komt te staan.

De 2e voorwaarde als die al aanwezig is komt afhankelijk van wat de gebruiker koos bij de eerste voorwaarde in de and/or

Select from ...... where veld(regel1,kolom1) (regel1,kolom2) (regel1,kolom3) and/or
(regel2,kolom1) (regel2,kolom2) (regel2,kolom3) and/or

enz....

IK heb dus een lus in mijn code die de sqlstring opbouwd aan de hand van de recordcount in het grid.....

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb


Verwijderd

Topicstarter
marenk_vos schreef op 16 augustus 2002 @ 09:30:
Misschien begrijp ik het niet goed hoor maar, als je toch de criteria ergens onder elkaar in een grid zet (maakt niet uit of je dat eerst met een editbox invult of zoals ik doe rechtstreeks in een advgrid via pulldown opties) dan heb je toch altijd een regel die bovenaan staat in het grid.
Ja, maar bij mij kan je dus de criteria verplaatsen naar prioriteit.
Dat is dus de veld/voorwaarde(operator)/waarde die in de where clausule komt te staan.
Ja, alleen de operator voor de 1e regel gebruik je dus niet.
Pagina: 1