Ga naar inhoud
  • 0

Hoe leeftijd berekenen zonder script trigger?


Gido_

Vraag

In een acteurs/film database kan ik per titel in een portaal zien welke leeftijd de deelnemers ongeveer waren tijdens het maken v/d film (± jaartal - geboortejaar - 1).

FileMaker_Pro_Advanced_r6oFo5Kgq3.jpg.1b4d8cc7a075dcb63e73b93806197f6f.jpg

Helaas heb ik hiervoor een layout script trigger moeten gebruiken die het jaartal v/d film naar een globaal veld bij acteurs kopieert, waardoor ik natuurlijk makkelijk een berekend veld (per persoon) in het portaal kan opnemen...

Maar ik zou graag van deze script trigger verlost geraken...

Is dit ook mogelijk met een bepaalde extra relatie? Een ingenieus calculatieveldje? Of zie ik iets poepsimpel over het oog?

Probeerbestandje bijgevoegd...

films.fmp12

aangepast door Gido_
Link naar reactie

21 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Wat denk je van dit trucje?

Een let in een verbergconditie op de layout, die zorgt dat er een altijd correcte $$ variabele is met het focus jaar.

Vervolgens een unstored calc die de (indicatieve) leeftijd calculeert.

Beetje een hack, quick&dirty, omdat je niet aan de tussentabel wil.

Een scriptrigger blijft m.i. een slecht idee.

films Marsau.fmp12

aangepast door Marsau
aanvulling
Link naar reactie
  • 0

Als je een tussentabel hebt toegepast (wat volgens mij de enige correcte manier is om dit te doen),  is dat ook de plek om het gewenste leeftijdsveld in te brengen. 
Dat mag een opgeslagen veld zijn, omdat de betreffende gegevens in principe onveranderlijk zijn. 
 

let er op dat je calculatie nooit precies zal zijn als je de leeftijdscalculatie slechts op jaartallen baseert. 

Link naar reactie
  • 0
9 hours ago, Marsau said:

Als je een tussentabel hebt toegepast (wat volgens mij de enige correcte manier is om dit te doen),  is dat ook de plek om het gewenste leeftijdsveld in te brengen. 
Dat mag een opgeslagen veld zijn, omdat de betreffende gegevens in principe onveranderlijk zijn.

Heb dat ooit wel eens gebruikt maar moet het eens opnieuw bestuderen eerst om door te hebben hoe je het hier zou bedoelen... Als dat veel extra data moet opslaan om slechts dit probleempje op te loseen, dan gebruik ik ws ook liever een manueel knopje of zoals ik bezig ben. Dacht gewoon dat ik mss iets ingenieus over het hoofd zag...

 

Quote

let er op dat je calculatie nooit precies zal zijn als je de leeftijdscalculatie slechts op jaartallen baseert. 

Kan nooit precies zijn omdat je dikwijls niet weet welk jaar het gefilmd is (sommigen komen pas jaren later uit) en de film ook niet op één dag is gefilmd. Door één jaar af te trekken zit ik meestal genoeg in de buurt, denk ik. Voor nauwkeurige data is er de Age() functie.

Link naar reactie
  • 0
10 hours ago, Marsau said:

Als je een tussentabel hebt toegepast (wat volgens mij de enige correcte manier is om dit te doen)

Met het hudiige 2-table systeem kan ik makkelijk acteurs toewijzen en per acteur makkelijk een portaal met hun films zien.

Waar kan ik volgens jou in de problemen komen? (buiten mijn fantasietje hier)

Wat is de noodzaak van de tussentabel? (als het niet teveel uitleg vereist)

Link naar reactie
  • 0

De tussentabel (bevat ID van de film en de acteur) kun je gebruiken om de leeftijd van de acteur op het moment van de release van de film op te slaan. Die hoef je daarna ook niet meer te berekenen, want de gegevens zijn bekend en zullen niet worden gewijzigd (in ieder geval niet de geboortedatum van de acteur).

Bij het vaststellen van de leeftijd zou je eventueel, als er een releasedatum is, een exacte leeftijd kunnen berekenen. Anders is het een benadering omdat iemand in de loop van een jaar jarig is…

Link naar reactie
  • 0
8 hours ago, Gido_ said:

Wat is de noodzaak van de tussentabel? (als het niet teveel uitleg vereist)

Een acteur speelt mee in één of meer films. Je hebt dan te maken met één of meer van de gewenste leeftijden bij iedere acteur. Iedere acteur heeft echter slechts één record. Daarin kun je dan slechts één leeftijd opslaan en tonen in een portaal vanuit een filmrecord. Je dient de acteurs op een eenduidige wijze aan de betreffende film te koppelen. Een herhalend veld voor de leeftijden in een acteursrecord is daarmee ongeschikt omdat je dan niet de betreffende film kunt achterhalen.

Enige oplossing is dan een tussentabel zoals Marseau en BBW hier aangeven. Je moet immers bij iedere combinatie van acteur én film een leeftijd kunnen opslaan. Dit is een aantal gegevens dat groter is dan het aantal films én groter dan het aantal acteurs.

Link naar reactie
  • 0
55 minutes ago, bigbadwolf said:

De tussentabel (bevat ID van de film en de acteur) kun je gebruiken om de leeftijd van de acteur op het moment van de release van de film op te slaan. Die hoef je daarna ook niet meer te berekenen, want de gegevens zijn bekend en zullen niet worden gewijzigd (in ieder geval niet de geboortedatum van de acteur).

Aha, bedankt — het begint terug te komen :)  Ja dat begrijp ik wel voor mijn toepassing — 't Is enkel overkill voor mijn huidige behoefte...

Ik vraag me af wat jullie nóg kunnen verzinnen qua problemen acteurs/film in de toekomst (gezien Marsau het onmiddellijk als een must lijkt te zien...).

Quote

Bij het vaststellen van de leeftijd zou je eventueel, als er een releasedatum is, een exacte leeftijd kunnen berekenen. Anders is het een benadering omdat iemand in de loop van een jaar jarig is…

Ik vind het enkel wel leuk wanneer je ongeveer de leeftijd weet tijdens het filmen, maar dat weet je dikwijls niet, of is niet de moeite om diep op te researchen. Gezien er jaren verschil kan zijn met opname en release, trek ik er er enkel 1 jaart af. Een correctieveld kan ik ook nog toevoegen desnoods (als ik bv lees dat ie 5 jaar geleden werd opgenomen). Het is meer om te oefenen ook, geen pro toepassing.

43 minutes ago, Banach said:

[...]

Script Trigger is dan toch zo slecht nog niet. Even de vraag verleggen naar wat jullie de beste methode vinden om dit te voorkomen tijdens scripts? Ik ken bv de $$stopTriggers = 1 methode, die voor mij met beperkt aantal loop scripts wel te doen is. Maar zag laatst bv deze en interessante comments die ik nog moet uitpluizen...

A ‘Local’ Way to Suppress Script Triggers
www.teamdf.com/blogs/a-local-way-to-suppress-script-triggers

Link naar reactie
  • 0

Waarom wil je het uitvoeren van scripttriggers kunnen stoppen? Wanneer je oplossing 'klaar' is moeten deze onder alle omstandigheden goed werken. Dus je wilt zoiets hooguit tijdens het ontwikkelen kunnen doen. Daar heeft men bij Claris aan gedacht, er is een optie om de scripttriggers uit te schakelen. Ook kun je middels de Debugger dergelijke scripttriggers onderbreken of overslaan.

 

Screen Shot 2022-01-24 at 10.14.49.png

Link naar reactie
  • 0
34 minutes ago, Banach said:

Waarom wil je het uitvoeren van scripttriggers kunnen stoppen?

Vreemde vraag... Waarom zijn er dan zoveel artikels en techniekjes voor...?

Elk script met een loop erin doet telkens deze trigger afgaan (in mijn geval is het een layout trigger, dus bij elke nieuwe pagina). Ik heb tijdens een loop uiteraard geen update over de leeftijden van de acteurs nodig; dat is puur tijdverlies, en dat merk ik ook als ik vergelijk.

aangepast door Gido_
Link naar reactie
  • 0
3 hours ago, Banach said:

Nog nooit zoiets nodig gehad. Wellicht is het gebruik van een scripttrigger in die situaties onjuist. Heb je een voorbeeld?

Het vb is mijn truukje om de leeftijden te kunnen zien. Wanneer ik een film record betreed, wordt het jaartal in een global bij acteurs gezet.

Ik moet regelmatig door 800 records loopen, en dat triggert wel degelijk (te zien met debugger).

Je kan sommige dingen ook wel met List() oplossen, maar niet alles. Ga ik nog eens over denken...

1 hour ago, bigbadwolf said:

Dan vraag ik me af welke lay-out trigger je gebruikt… zolang je op de lay-out blijf zal de ‘onLayoutEnter’ niet lopen.

Ik gebruik OnRecordLoad + zie hierboven.

Alles wat het doet is een Set Field, maar als ik hem sowieso moet behouden kan het nog handig worden voor navigatiedoeleinden.

Link naar reactie
  • 0
Quote

Beetje een hack, quick&dirty, omdat je niet aan de tussentabel wil.

Wat vuil, zeg! 😜 

Nee, eerlijk gezegd lijkt het niet te werken hier. Heb je iets gebruikt dat niet compatibel is met FM 12?

Ik vind enkel...

Let ( x = $$jaar - geboortejaar; If ( x > 0 ; x ; "-" ) )

Staat er nog iets verborgen dat ik niet vind? Je doet me vaag denken aan oude truuks waar een webviewer mss een variabele definieerde ook? :)

Ik zie niet meer dan dit (en zie geen verborgen webviewer) ...

FileMaker_Pro_Advanced_7oD2nTPbrv.jpg.15550eb64cd4d77a33f44d40b18a83ee.jpg

Gevoelsmatig dacht ik wel dat er een truukje was.  Als het niet in orde komt ga ik die oude techniek nog eens opzoeken. Het is ergens ook een triggertje natuurlijk... ;)

aangepast door Gido_
Link naar reactie
  • 0

Oeps, ja. Fm12 kan idd te oud zijn. Dit is opgezet met FM19.
Geen webviewer hoor, alleen maar een truc om bij een getoonde record die variabele actueel te houden, zonder scripttriggers.

Volgens mij vanaf 13 conditioneel object verbergen op lay-outs.

Maar nogmaals: een tussentabel is de koninklijke weg, zeker als je de basis wilt leggen van serieuze data verzameling  

 

Link naar reactie
  • 0
14 minutes ago, Marsau said:

Maar nogmaals: een tussentabel is de koninklijke weg, zeker als je de basis wilt leggen van serieuze data verzameling.

Ik heb zowat alles in mijn hoofd wat ik nog wil doen (haha ;) ) en werkt al jaren naar bevrediging (buiten alles dat ik wil doen en verbeteren). Ik kan zelf geen problemen voorzien momenteel, en dat is het probleem... ;)

Als je wat argumentatieve vbn kan bedenken, hoor ik ze graag; maar voor deze specifieke toepassing.

Ondertussen werkt het met de webviewertruuk.

"data:text/html," & Let( $$jaar = films::jaar; "" )

Superbedankt om mij daar onrechtstreeks aan te doen herinneren!

Link naar reactie
  • 0

Ik snap niet waarom je geen tussentabel wilt inzetten, terwijl je de leeftijd wel op een gerelateerd record wilt berekenen. De films zijn "vaste" basisgegevens en de namen van de acteur en geboortejaren zijn dat ook. Eenmalige gegevens worden normaal gesproken altijd in een tussentabel vastgelegd. Dus daarin zouden dan per deelname aan een film de id van de acteur en die van de film worden vastgelegd. Allerlei bijkomende informatie kan dan ook daarop worden vastgelegd, zoals de rol, het salaris etc. etc.

Als je geen tussentabel gebruikt, dan is de oplossing van Marsau een hele slimme, maar als je dat een lijst van films zou willen zien, werkt die oplossing niet. Je zou dan de namen met de leeftijden op het filmrecord kunnen berekenen met een recursieve functie. Dan wordt het informatie die niet meer hoeft te worden gewijzigd/getriggerd.

films menno.fmp12

Link naar reactie
  • 0
10 hours ago, Marsau said:

Nou een argument dan: je kan de tussentabel opvatten als de film-biografie van de betreffende acteur. Dus ook een notitie/rol beschrijving meenemen. 

Zuiver de biografie kan in een portaal bij acteurs. Verder een goeie waar ik idd een probleem mee heb... Als ik bv op de pagina v/e acteur iets wil bemerken over hem/haar in een film, moet ik dat nl. in het comments veld zetten, en dat is idd niet pro...  Een ander spijtig probleem is dat ik in die portal (eerste post) de belangrijkste acteurs niet in de juiste volgorde zie (zonder een potentiële onRecordChange trigger voor extra sorteerveld), dus ook dat geraakt dan opgelost. OK, ik ben helemaal gewonnen nu  ;)

Spijtig genoeg had ik al wel pro ID nrs voor de films (genre 4-2-003934521114-6397057-15007-143562602053631), dus dit gaat vele "boekdelen" space toevoegen... ;)

Quote

De films zijn "vaste" basisgegevens en de namen van de acteur en geboortejaren zijn dat ook. Eenmalige gegevens worden normaal gesproken altijd in een tussentabel vastgelegd. Dus daarin zouden dan per deelname aan een film de id van de acteur en die van de film worden vastgelegd. Allerlei bijkomende informatie kan dan ook daarop worden vastgelegd, zoals de rol, het salaris etc. etc.

Simpele en goeie uitleg... Ik zie het licht nu.  Heb het lang geleden zelf eens gebruikt, maar tot nu toe ontging het belang mij hier (terwijl ik er "onbewust" toch al een drietal frustraties door had)...

Quote

Als je geen tussentabel gebruikt, dan is de oplossing van Marsau een hele slimme, maar als je dat een lijst van films zou willen zien, werkt die oplossing niet.

Het is toch heel simpel om op de acteurspagina een portaal te zien met al zijn/haar films? Dat is wat ik nu doe (en mss voor veel mensen voldoende). Dat is gewoon een (gefilterd) portaal verbonden aan film::IDs_tags (tags en mensen).  Maar ikzelf zou daar idd graag acteurnota's per film bij kunnen maken, juiste acteurvolgorde zien in het portaal (van 1e post), alsook de leeftijden. Dus twee van deze drie overtuigen mij.

Bedankt allemaal voor het blijven pushen :) 

Mijn enige zorg is nu of ik het gewoon kan inlassen of tonnen dingen ga moeten aanpassen die aan de huidige acteurs/tags TO hangen... Weer een harde les om altijd "te weten wat je doet" in het vervolg dan... :D

aangepast door Gido_
Link naar reactie
  • 0
21 minutes ago, Gido_ said:

Het is toch heel simpel om op de acteurspagina een portaal te zien met al zijn/haar films?

Ja, maar dat zou dan een lijst met acteurs zijn, waarop je portals laat zien met de films waarin ze hebben gespeeld. Jouw topic ging tot nu toe over films waarop je de acteurs wilt laten zien met hun leeftijd tijdens de opnamen. Dat is een ander uitgangspunt en dan heb je een andere definitie nodig :-) 

Link naar reactie
  • 0

Theoretisch ga ik er even vanuit dat wanneer ik de tussentabel letterlijk tussen films en acteurs ga zetten, er enorm veel aanpassingswerk gaat zijn... Ik vermoed dat ik ook voor een semi-pro tussenoplossing kan gaan?  Namelijk, deze tussentabel gewoon erbij plaatsen, of een extra TO van acteurs met tussentabel naar films?  Ik heb het tenslotte maar voor 2 à 3 details nodig nu.

Ik wil gerust nog eens van nul beginnen na 3 maanden harde studie en in een latere versie van FileMaker ooit, maar momenteel wil ik geen "jaar" alles liggen aanpassen.

Ik vermoed dat het ook kan werken zoals ik voorstel, en dan draait het binnen het uur? ;)

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...