Ga naar inhoud
  • 0

Bijzonder lijstvorm bij invoer


marcelboot

Vraag

Aanbevolen berichten

  • 0

Banach,  dit is me al bekend en dat bedoel ook niet.

Ik heb ooit een script gezien, dat na elke letter, die je invoert snel een selectie maakt van records die aan die tekst op dat moment voldoen. Zo kun je dus kiezen uit een lijst namen, waarvan er werd veel met Van beginnen, als je de Naam begint te typen. Naarmate je meer letters typt, wordt de lijst kleiner.

Ik vond dat script toen al briljant, maar ben het geheel kwijt geraakt.

Link naar reactie
  • 0

Maak een calculatieveld  Zoek = substitute ( trimall ( Text;1;1)  ; " " ; ¶ )

Maak een globaalveld voor de zoek invoer

Maak een calculatieveld op de het globaalveld:    If ( IsEmpty ( Globaal ) ; "00000000000¶zzzzzzzzzzzzzzzzz"; Globaal  & ¶ & Globaal &"zzzzzzzzzzzzzzzzzzz" ) & Left (Globaal ; 0 )

Leg een dubbele relatie met de het calculatieveld    Calc ≤ Zoek en Calc ≥ Zoek

Als je tekst in de globaal invoert krijg je jouw gewenste lijst

 

Link naar reactie
  • 0

Een razendsnel alternatief voor selectie uit lijsten is het gebruik van card window in combinatie met sql queries. 
je laadt de zoekresultaten in een global tekstveld. 
daarna gebruik je een speciale CF om de regel te selecteren. Je klikt op de tekst als ware het een hyperlink. Een getriggered script destilleert de waarde voor verdere toepassing. 

je kan op deze wijze zelfs een zoekmachine realiseren die in meerdere tabellen tegelijk zoekt en records ophaalt. Dat vergt natuurlijk wat meer uitwerking. 
 

Deze benadering is echt razendsnel; veel sneller dan het laden van een lijst lay-out met daarop toegepaste zoekopdrachten. Dus een aanrader voor grotere zoektabellen. 

Link naar reactie
  • 0

Geen voorbeeld mogelijk, maar ik help je visualiseren.

Stel je een selector schermpje voor (bedoeld als card-window)  waarin je - terwijl je typt - uit een groot aantal waarden zoekresultaten krijgt uit één of meerdere tabellen met een gecalculeerde sql-statement. Dat is gewoon een lijst van tekst die door het script in het global tekstveld wordt gezet. Dat gaat veel sneller dan records ophalen.

Vervolgens kan je op de lijst klikken. Je kan een custom functie maken om de betreffende waarde te selecteren. Dat kan omdat FileMaker de exacte positie van waar je klikt in de lijst kan laten weten: Get ( ActiveSelectionStart ) . De geselecteerde regels (waarde) kan je zo calculeren. 

Je sluit het scherm en past de geselecteerde waarde toe. 

Ik ga even niet in op de vele details, maar 'you get the idea'... Ideaal voor snelselectie uit grote lijsten, of voor het bouwen van multi-tabel zoekmodules (dat laatste kan standaard niet in FileMaker).

 

Naamloos.jpg

Link naar reactie
  • 0

Het idee is goed maar ik vraag me af hoe je de volgende zaken hebt opgelost:

In het algemeen ga je op zoek naar het ID van een record. In dit geval vind je bijvoorbeeld de naam van een relatie. Ga je dan de bijbehorende ID weer terug zoeken met SQL? Lijkt me lastig met dubbele namen.

De gebruikerservaring van scrollen in een tekstveld lijkt me niet optimaal en als de tekst te lang is staat hij deels op de volgende regel.

SQL is hoofdlettergevoelig en daar moet je ook maatregelen voor treffen.

 

 

Link naar reactie
  • 0

Zeker, Marcel. Je moet een hele goede reden hebben om deze benadering te kiezen. Sterker nog: kies altijd voor een popup-menu als deze volstaat. Als je tevreden bent over de performance, dan zeker niet voor deze techniek kiezen. 

Ari, je benoemt precies de uitdagingen, en er zijn er nog meer. Het gaat altijd om een ID, en bij multi-table zoek opdrachten ook nog eens op een tabel-specificatie, want anders kan je niet naar de gevonden record navigeren. Er zijn verschillende oplossingen of strategieën om probleem te vermijden. Per ultimo neem je de info mee in de resultaat-regels, of je splitst een presentielijst af van een ruwe lijst, - of als je uit mag gaan van unieke resultaatregels, dan gebruik je een 2e sql-statement om een id-veld op te halen.. 

Dat SQL case-sensitive is, is overigens geen probleem. Een kwestie van de juiste statements bouwen. :-)

T.a.v. scrollen: je ziet niet dat de layout heeel lang is. De kop staat op een navigatie-gedeelte, en blijft dus altijd in beeld als je naar beneden scrollt. Er zit een limiet aan natuurlijk. Maar net als bij Google, je hoeft niet de 50.000 pagina's met zoekresultaten af te gaan. Sterker nog: je wilt zo weinig mogelijk zoekresultaten; slechts één. Dus tik je een extra character tot de fuik zich sluit. 

Link naar reactie
  • 0

Haha, oke. Je had er eerder om mogen vragen.

Bijvoorbeeld:

ExecuteSQL ( "SELECT \"Displaynaam\" FROM Relaties WHERE LOWER ( \"Displaynaam\") LIKE LOWER (?)"  ; "" ; ""; "%" & zoek & "%" )

Door de resultaten te combineren met een label (een postfix of suffix labeltje, maak daar een CF voor... ) kan je ze markeren als relatie, en nog een tweede query op contactpersonen toevoegen. Je zoekt dan in meerdere tabellen tegelijk. De lijst voor presentatie even sorteren.

Vervolgens is het zaak om een aangeklikte waarde weer om te zetten in een native FileMaker zoekopdracht.

Je kan daarbij uitgaan van de getoonde waarde, maar je kan ook een constructie bedenken waarin je een ID als basis neemt, wat natuurlijk iets betrouwbaarder is.

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...