Jump to content
  • 0

setfield in een zoekopdracht


Arnoud

Question

Posted

Ik weet niet waarom dit niet werkt.

 

Ik heb 4 velden gemaakt: 2 globals, 1 calculatie en 1 van het type datum.

 

gStartdatum (datum)

gEinddatum (datum)

cPeriode = gStartdatum & "..." & gEinddatum (uitkomst=tekst)

leverdatum (datum)

 

Script:

 

FindMode()

SetField("leverdatum";"cPeriode")

PerformFind(Replace Foundset)

16 answers to this question

Recommended Posts

  • 0
Posted

Nee, dat kan niet met SetField: het SetField-commando werkt uitsluitend met data die overeenkomen met het datatype van het veld. Met SetField kan je dus geen drie puntjes plakken in een datumveld!

Vroeger had FileMaker daar Paste Result voor. Nu heet dat Insert Calculated Result.

  • 0
Posted
FindMode()

SetField("leverdatum";"cPeriode")

PerformFind(Replace Foundset)

 

Dit gaat ook mis omdat een calculatie in de Findmode niet werkt. Een oplossing daarvoor is om in de browse mode het calculatieveld over te zetten naar een globaal veld en vervolgens naar de find mode gaan en gebruik te maken van het globale veld.

  • 0
Posted

Theo, hoewel je in algemeenheid gelijk hebt, had de door jou geschetste oplossing toch echt niet gewerkt in het door Arnoud vertelde probleem, omdat - en ik quote AvD:

 

het SetField-commando werkt uitsluitend met data die overeenkomen met het datatype van het veld.

 

Het is niet mogelijk om met een set-field een stukje tekst (zijnde de drie puntjes) in een datumveld te zetten. Ook niet als die tekst in een globalveld staat in zoekmodus.

  • 0
Posted

Nu probeer ik zelf over het algemeen te vermijden dat ik het klembord nodig heb (en op insert-calculated-result ben ik ook niet dol), dus wat vinden jullie van deze oplossing:

 

• Datumveld: "Datum" - een veld waarin een datum kan worden ingevoerd

 

• Calculatieveld-uitkomst-getal "_cN_Datum": [Datum] - dit levert je een calculatie op waarin de datum als nummer in vermeld staat.

 

• Global-Datumveld "_gD_DatumBegin" - een globaalveld om de te-zoeken begindatum in te vullen

 

• Global-Datumveld "_gD_DatumEind" - een globaalveld om de te-zoeken einddatum in te vullen

 

• Calculatieveld-uitkomst-tekst "_cT_DatumRange": [_gDatumBegin & "..." & _gDatumEind] - dit levert een calculatie met een getal wat de begindatum is, drie puntjes, en een getal wat de einddatum is

 

• Global-Tekstveld "_gT_DatumRange" - een globalveld om de datumrange in op te slaan

 

Het script zou als volgt kunnen zijn:

 

- Check of globalen begindatum en einddatum gevuld zijn

- Stel "_gT_DatumRange" in op "_cT_DatumRange"

- Ga naar Zoek

  # Je staat nu in zoekmodus met in een globalveld de gewenste datumrange (dankjewel Theo :-) )

- Stel "_cN_Datum" in op "_gT_DatumRange"

- Voer zoekbewerking uit

 

Volgens mij heb je dan wat je wilt zonder knip/plak.

  • 0
Posted

Ben geen ervaren FM-gebruiker, doch met veel vallen en opstaan, heb ik iets kunnen formuleren waardoor men records via een script kan opzoeken. In dit geval betreft het alle records van de vorige maand, bijvoorbeeld december 2003, en waarbij ik slechts één veld gebruik nl datum.

Als ik het goed voor heb, dient Arnaud alle leverdatums tussen een bepaalde periode te zoeken. Misschien is dit bestand voor hem wel de oplossing of toch de weg er naar toe. :)

Records vorige maand.fp5

  • 0
Posted
en op insert-calculated-result ben ik ook niet dol

Waarom niet, Sanne?

 

dus wat vinden jullie van deze oplossing

Om eerlijk te zien: veel ingewikkelder dan nodig. Wat in die korte Tip 16 staat werkt perfect. Je hebt geen 6 maar 2 velden nodig en ook het script lijkt me eenvoudiger voor de beginner: niet nodig iets naar globals te brengen. Maar natuurlijk, met FileMaker is er nooit één enkele manier. :D

Ik ben wel nieuwsgierig naar het antwoord op de eerste vraag want ik vermoed dat ik iets ergs over het hoofd zie (iets zoals hetgeen overkwam aan zij die lege velden zochten met ="" tot bleek dat dat niet meer werkte :cry: ).

  • 0
Posted

Voor de scriptstap "Insert calculated result" MOET het veld waarin de calculatie wordt gezet aanwezig zijn op de layout.

 

Dat kun je niet garanderen.

 

Als je dus een layout aanpast en het betrokken veld verwijdert, dan zal het zoek-script niet meer werken.

 

FileMaker staat je toe om een veld van een layout te verwijderen. Er zal geen melding komen dat er dan een procedure niet meer zal werken.

 

"Insert calculated result" zal overigens voor de meeste FileMaker-toepassing prima werken.

 

Ik probeer zo "veilig" mogelijk te programmeren. Hou er rekening mee dat ik werk met complexe toepassingen die door meerdere programmeurs zijn gemaakt en worden onderhouden.

 

Mijn voorbeeld geeft je inderdaad een complexere, maar veiliger methode. Het kan als alternatief voor "Insert calculated result" gebruikt worden. Het zorgt ervoor dat je niet afhankelijk bent van de aanwezigheid van het veld op de actieve layout.

  • 0
Posted

Zo in die context heb je natuurlijk volkomen gelijk. Als je zelf niet als enige op de commandobrug staat...

Dan heeft het misschien ook geen zin te pleiten voor een aparte lay-out die default alle velden bevat, maar verder nooit actief getoond wordt.

  • 0
Posted

Zo, ik heb weer wat losgemaakt merk ik.

Het voorbeeldje van Sanne is een goede toepassing van het feit dat de datatypen van de SETFIELD opdracht gelijk dienen te zijn.

Ik heb eerst ook met globals en calculaties zitten goochelen maar wist niet waarom het niet goed ging. Tja waarom zou je de FMP Help consulteren als AvD binnen 5 minuten, tegen middernacht reageert.

Bedankt allemaal!.

 

Arnoud

  • 0
Posted
Dan heeft het misschien ook geen zin te pleiten voor een aparte lay-out die default alle velden bevat, maar verder nooit actief getoond wordt.

 

Integendeel, in al mijn toepassingen bevat elke tabel (database) een layout genaamd "Alle velden"/"All fields".

 

Werken met FileMaker betekent dat je er toch niet onderuit komt om stappen als "Insert calculated result" en erger: "Paste" of "Replace" te gebruiken. Dat is nou eenmaal het gereedschap waar je als FileMaker-programmeur mee werkt.

 

Voorafgaand aan deze scriptstappen ga ik naar de layout "Alle velden". Altijd.

 

En voor het in dit onderwerp betrokken voorbeeld is "Insert ..." voorafgegaan door een "Go to layout [Alle velden]" natuurlijk ook prima: bijvoorbeeld als je het aantal velden in je database zo klein mogelijk wenst te houden.

 

Overigens, natuurlijk betekent een layout die "Alle velden" heet, nog niet dat alle velden er ook daadwerkelijk op staan ... :lol:

  • 0
Posted
In dit geval betreft het alle records van de vorige maand, bijvoorbeeld december 2003, en waarbij ik slechts één veld gebruik nl datum.

 

Stamper, ik zie dat je hier gebruik maakt van de functie "Today". Je kunt in plaats van "Today" ook de functie "Status(CurrentDate)" gebruiken.

 

En ik zie dat je in de calculatie gebruik maakt van het scheidingsteken "/". Maar als ik een kloon van deze database opsla op een (bijvoorbeeld) Nederlands systeem, dan wordt de datum opgeslagen als "25-12-2003" (ongeacht hoe je op de layout aangeeft hoe het eruit moet zien). Het script zal dan niet meer werken.

 

In plaats van de tekst die je nu calculeert kun je een calculatie maken met de functies Date() en DateToText(). De calculatie wordt dan wat "steviger" voor gebruik onder verschillende omstandigheden.

 

En zo kan ik nog wel uren doorgaan over werken met datum-gegevens in FileMaker ... :-)

  • 0
Posted
PPPPFFFFFFFFFFFF, mijn vraag heeft wel wat teweeg gebracht.

Maar helaas (met alle respect) nog geen antwoord op mijn vraag.

Over welke vraag heeft Tjico30 het? En waarom blijft zijn toetsenbord hangen op de P en de F? :?:o

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...