snel naar een letter springen in een lijst

Vraag en antwoord over FileMaker Pro 9

snel naar een letter springen in een lijst

Berichtdoor Bachje » 13 okt 2009 10:44

Vele programma's hebben de functie als je op een van de letters op je toetsenbord drukt dat er in een lijst gesprongen wordt naar het record, de regel die begint bij die lijst (total commander - waar ik veel mee werk - kan dat bijvoorbeeld)
in filemaker heb ik die functie in de lijst overzichten nooit gevonden.
Ik heb dat in een database (ooit nog met versie 5 ofzo) met veel adres gegevens eens geprobeerd door knoppen te maken van a t/m z en dan aan elke knop een script te hangen dat een selectie maakt op de eerste letter van de achternaam, en vervolgens de zaak sorteert. Dan heb je echter een selectie en zijn alle records die met andere letters beginnen niet meer zichtbaar.
Mogelijk heeft iemand anders dat al eens op briljante wijze opgelost maar mijn script kennis is iets te beperkt om er een fatsoenlijke oplossing voor te maken.
Wie heeft er suggesties?

Franc
Avatar gebruiker
Bachje
 
Berichten: 67
Geregistreerd op: 04 apr 2005 22:31

Re: snel naar een letter springen in een lijst

Berichtdoor edc » 13 okt 2009 12:03

Het is niet volledig wat je bedoelt, maar misschien is het toch nuttig.
Je kunt in de recente versies bij de veldopties "Automatisch aanvullen met eerder ingevoerde waarden" aanvinken. Als je dan een zoekopdracht ingeeft krijg je ongeveer het effect waarover je het hebt.
edc
 
Berichten: 513
Geregistreerd op: 04 jun 2003 12:28
Woonplaats: Oostduinkerke

Re: snel naar een letter springen in een lijst

Berichtdoor fmwebshop » 13 okt 2009 12:42

script

zoekopdracht:eerste lettervan de naam
records sorteren op naam
ga naar eerste record
alle records tonen
records sorteren

Vr groet
Harry
Avatar gebruiker
fmwebshop
 
Berichten: 528
Geregistreerd op: 18 sep 2008 17:12

Re: snel naar een letter springen in een lijst

Berichtdoor andries » 13 okt 2009 13:04

Harry: nadeel is dat je dan je current foundset kwijt bent...

Ik heb iets geprobeerd, op zich werkt het, maar het is ongeloofelijk traag ( en ik bedoel echt traag -> niet te gebruiken ), maar het is mss wel een mogelijke denkpiste indien iemand een manier vindt om dit sneller te doen gaan.

Voorbeeldje heeft wel FM10 nodig !
Je hebt niet de vereiste permissies om de aan dit bericht toegevoegde bestanden te zien.
andries
FileMaker 9..14 Certified Developer
 
Berichten: 1303
Geregistreerd op: 15 feb 2008 14:09
Woonplaats: Boortmeerbeek

Re: snel naar een letter springen in een lijst

Berichtdoor Bachje » 13 okt 2009 13:24

fmwebshop schreef:script
zoekopdracht:eerste lettervan de naam
records sorteren op naam
ga naar eerste record
alle records tonen
records sorteren

Beste Harry

Iets dergelijks heb ik gedaan in mijn oude versie. Het nadeel is dat hij dan niet goed sorteert. Ik heb er bijvoorbeeld getrouwde vrouwen in zitten met een herhalend veld voor de tweede achternaam (daar moet op gezocht kunnen worden)
als je dan sorteert neemt hij dat mee. (ik weet het je kunt het uitzetten en allen op de eerste herhaling sorteren maar jammer genoeg werkt dat niet perfect)

dit is wat ik gedaan heb

Zoekopdracht uitvoeren [ Opgegeven zoekopdrachten: Records zoeken; Criteria: Themadagen::ACHTERNAAM: “a”]
[ Herstellen ]
Records sorteren [ Opgegeven sorteervolgorde: Themadagen::ACHTERNAAM; oplopend
Themadagen::VOORNAAM; oplopend ]
[ Herstellen; Geen dialoogvenster ]
Ga naar record/verzoek/pagina
[ Eerste ]
Alle records tonen
Records sorteren [ Opgegeven sorteervolgorde: Themadagen::ACHTERNAAM; oplopend
Themadagen::VOORNAAM; oplopend]

De dubbele sortering was nodig om te zorgen dat "cursor"op de eerste kaart van de letter (a in dit geval) na de sortering bovenaan stond
Het nadeel is tevens dat hiervoor dus 26 scriptjes moet maken voor elke letter van het alfabet één.
Ik was op zoek naar een snellere manier, iets met een variabele? en het zou handig zijn als dat kon via de letter op het toetsen bord.
Avatar gebruiker
Bachje
 
Berichten: 67
Geregistreerd op: 04 apr 2005 22:31

Re: snel naar een letter springen in een lijst

Berichtdoor Bachje » 13 okt 2009 13:26

andries schreef:Harry: nadeel is dat je dan je current foundset kwijt bent...

Ik heb iets geprobeerd, op zich werkt het, maar het is ongeloofelijk traag ( en ik bedoel echt traag -> niet te gebruiken ), maar het is mss wel een mogelijke denkpiste indien iemand een manier vindt om dit sneller te doen gaan.

Voorbeeldje heeft wel FM10 nodig !


Beste Andries

heb nog geen FM10 :oops:

Franc
Avatar gebruiker
Bachje
 
Berichten: 67
Geregistreerd op: 04 apr 2005 22:31

Re: snel naar een letter springen in een lijst

Berichtdoor andries » 13 okt 2009 14:26

hier een andere methode ( met een iets gecompliceerder script )

een voorbeeldje voor FM10 en FM9



GoToLetterFM10.fp7


GoToLetter.fp7
Je hebt niet de vereiste permissies om de aan dit bericht toegevoegde bestanden te zien.
Laatst bijgewerkt door andries op 13 okt 2009 14:40, in het totaal 1 keer bewerkt
andries
FileMaker 9..14 Certified Developer
 
Berichten: 1303
Geregistreerd op: 15 feb 2008 14:09
Woonplaats: Boortmeerbeek

Re: snel naar een letter springen in een lijst

Berichtdoor andries » 13 okt 2009 14:31

Bachje schreef:en het zou handig zijn als dat kon via de letter op het toetsen bord.


Dan zal je toch naar FM10 moeten...
andries
FileMaker 9..14 Certified Developer
 
Berichten: 1303
Geregistreerd op: 15 feb 2008 14:09
Woonplaats: Boortmeerbeek

Re: snel naar een letter springen in een lijst

Berichtdoor Bachje » 13 okt 2009 15:01

Andries,

bedankt. Het gaat inderdaad in de richting van wat ik zocht.

Kun je uitleggen wat je doet?
Met name het stuk achter ga naar record/ verzoek enzovoort kan ik niet helemaal volgen
De loop snap ik maar ik begrijp niet goed waarom je dat doet. Dat zal wel met de vorige script stap te maken hebben neem ik aan?

Franc
Avatar gebruiker
Bachje
 
Berichten: 67
Geregistreerd op: 04 apr 2005 22:31

Re: snel naar een letter springen in een lijst

Berichtdoor andries » 13 okt 2009 15:07

Eerst gok ik waar die letter zich zou bevinden. Hiervoor heb ik een zeer basis algoritme gemaakt. Bijvoorbeeld:

Als je 2600 records hebt en de letter is a ga dan naar de eerste record als de letter is b ga dan naar de 100ste record, enz.


Maar dit is enkel een gok, dit kan je nooit weten. Dus moet je checken waar je bent uitgekomen. En daarvoor dient de if en de loop ( dit kan allemaal veel beter, maar heb nu niet de tijd om dit te optimaliseren). De loop checkt waar we zijn uitgekomen.

Bijvoorbeeld, als we dus naar letter "B" willen gaan, zal het script je naar record 100 sturen als eerste gok en checken of dit gelijk of hoger is dan de letter B. Als we bijvoorbeeld op letter "C" al zijn uitgekomen, zal het script terugloopen tot we op de laatste record aankomen van letter "A".

Het vervolg van het script is een simpele "find/replace" op een veld die enkel de eerste letter van lastName neemt. Deze script stap zal ons naar de eerte record brengen waarvoor hij een match vindt.

Het eerste deel en de loop dient enkel en alleen om het allemaal wat sneller te doen lopen. Als je op de eerste record bent, en je doet enkel de "find/replace" script stap, en je zoekt naar "z", dan duurt het even eer hij aan het eind van de record lijst is.
andries
FileMaker 9..14 Certified Developer
 
Berichten: 1303
Geregistreerd op: 15 feb 2008 14:09
Woonplaats: Boortmeerbeek

Re: snel naar een letter springen in een lijst

Berichtdoor Bachje » 03 nov 2009 22:40

Andries en anderen,

De door jou voorgestelde optie was inderdaad erg langzaam (database met 5000 records)
Gezocht naar een andere oplossing.
ik heb nu dit
Code: Selecteer alles
Alle records tonen
Variabele instellen [ $letter; Waarde:"k" ]
If [ IsEmpty ( $letter ) ]
Script afsluiten [ ]
End If
#
Ga naar veld [ Patienten::NAAM ]
Ga naar Zoeken [ ]
Veld instellen [ Patienten::NAAM; $letter ]
Zoekopdracht uitvoeren [ ]
Records sorteren [ Opgegeven sorteervolgorde: Patienten::NAAM; oplopend Patienten::VOORNAAM; oplopend ]
[ Herstellen; Geen dialoogvenster ]
Ga naar record/verzoek/pagina [ Eerste ]
Records/verzoeken vastleggen [ Bevestiging van gegevensinvoer overslaan; Geen dialoogvenster ]
Alle records tonen
Records sorteren [ Opgegeven sorteervolgorde: Patienten::NAAM; oplopend Patienten::VOORNAAM; oplopend ]
[ Herstellen; Geen dialoogvenster ]


Dit werkt snel en goed. Hij blijft keurig op de eerste record van de letter van het alfabet staan terwijl wel alle kaarten zichtbaar blijven.
Wat ik nu wil is dat in dit script niet de letter van het alfabet hard gecodeerd is maar word opgehaald als ik een knop indruk op de layout of een toetscombinatie indruk op het toetsenbord. Bijvoorbeeld ctrl "k" o.i.d.
Ik wil dus de regel: Variabele instellen [ $letter; Waarde:"k" ] veranderd hebben in iets dat om het even welke letter van het alfabet aan het script doorgeeft.
Ik heb geprobeerd dat met een verborgen veld en veld instellen te doen, met een extra script parameter onder de knop maar dat lukt niet, ook niet met een global.
Iemand suggesties?

ik heb overigens in mijn layout een rij knopjes met het alfabet waar ik het script aan wil koppelen

Franc
Avatar gebruiker
Bachje
 
Berichten: 67
Geregistreerd op: 04 apr 2005 22:31

Re: snel naar een letter springen in een lijst

Berichtdoor JeanWM » 04 nov 2009 02:50

Een kleine aanpassing.

Je kunt 1 letter of meerdere ingeven.
Je hebt niet de vereiste permissies om de aan dit bericht toegevoegde bestanden te zien.
Laatst bijgewerkt door JeanWM op 04 nov 2009 02:55, in het totaal 1 keer bewerkt
Reden: zip file toegevoegd
Avatar gebruiker
JeanWM
 
Berichten: 1844
Geregistreerd op: 25 jun 2002 07:38
Woonplaats: Ergens, op een kruising tussen tijd en ruimte

Re: snel naar een letter springen in een lijst

Berichtdoor tackenco » 04 nov 2009 08:03

Ik wil dus de regel: Variabele instellen [ $letter; Waarde:"k" ] veranderd hebben in iets dat om het even welke letter van het alfabet aan het script doorgeeft.

Je kunt hiervoor Get ( ScriptParameter ) gebruiken. Ieder knopje verwijst naar eenzelfde script alleen de script parameter veranderd.
Als je met toescombinaties wilt werken moet je de menustructuur aanpassen. Daar moet ik wel bij aantekenen dat combinaties met control of cmd (apple) al veel door filemaker zelf gebruikt worden. Als je niet wilt dat die vedwijnen moet je een andere combinatie kiezen (bijv. control shift + letter). Knoppen op de layout lijken mij al best voldoende trouwens.
Avatar gebruiker
tackenco
 
Berichten: 301
Geregistreerd op: 08 okt 2006 17:22
Woonplaats: Amsterdam

Re: snel naar een letter springen in een lijst

Berichtdoor andries » 04 nov 2009 09:28

Bachje

het voorgestelde zal wel je huidige foundset doen verliezen... waardoor het dus niet in elke situatie kan gebruikt worden.

Maar het is idd een pak sneller :-)

Andries
andries
FileMaker 9..14 Certified Developer
 
Berichten: 1303
Geregistreerd op: 15 feb 2008 14:09
Woonplaats: Boortmeerbeek


Keer terug naar FileMaker 9



Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast