Ga naar inhoud
  • 0

Opslag veld met automatische waarde


BaW01

Vraag

Hallo, heeft iemand een tip of oplossing voor het volgende probleem?

In mijn database gebruik ik een veld waarin automatisch een samengesteld nummer wordt geplaatst, afkomstig uit 3 andere velden.

Dit veld, een tekstveld, gebruikt de volgende formule: Landcode & "-" & Right ( "00000" & GetAsText ( Catnr ) ; 5 ) & CatnrToev

Op zich werkt dit prima, maar helaas pas nadat het fysiek met een knop met onderliggend script wordt bevestigd. Een feitelijk ongewenste extra handeling.

Het punt is dat het veld bij aanmaak van een record wordt gevuld en op dat moment 'slechts' kijkt naar het veld Catnr. Dit is een automatisch volgnummer. De andere 2 velden (Landcode en CatrnToev) zijn tekstvelden (waarvan Landcode een opzoekveld is) worden niet meegenomen.

Het zou dus m.i. wenselijk zijn dat het samengestelde veld pas bij het opslaan van het record wordt gegenereerd en niet bij het aanmaken.

Is dit mogelijk?

Link naar reactie

16 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Wat is er tegen om er een berekeningsveld van te maken?

 

Andere oplossing zou zijn om met If() functie te testen of alle benodigde velden gevuld zijn en dan de berekening pas te laten uitvoeren. Bij een veld met invoerberekening wordt de berekening steeds uitgevoerd zolang het veld leeg is (tenzij de optie 'Bestaande waarde niet vervangen' uit is).

 

René

Link naar reactie
  • 0

Mogelijk dat ik niet duidelijk genoeg geweest ben, maar het is een berekeningsveld waar de genoemde functie in is geplaatst. De knop met onderliggend script omvat inderdaad een if ... if else constructie. Dat werkt prima, maar ik kom er niet achter hoe deze if constructie aan het berekeningsveld geknoopt kan worden waardoor deze if ... if else automatisch wordt toegepast. Het idee hierachter is dat op basis van een x-aantal criteria voorvoegsels resp. voor of achter het catnr worden geplaatst c.q. helemaal worden weggelaten.

Link naar reactie
  • 0

Een voorbeeldbestandje maken is lastig, maar ik zal het proberen uit te leggen. Het resultaat van het berekeningsveld waar ik het over heb heeft 2 functies: het vormt een uniek catalogusnummer welke gelijktijdig als sorteernummer wordt gebruikt. Het resultaat is een samenvoeging van de waarde van 4 velden: landcode-voorvoegsel-catalogusnummer-achtervoegsel. Het veld catalogusnummer is een automatisch volgnummer. Zoals je ziet neemt de berekeningsformule Landcode & "-" & Right ( "00000" & GetAsText ( Catnr ) ; 5 ) & CatnrToev (vooralsnog) niet het veld voorvoegsel mee. De plaats van het voorvoegsel is essentieel voor sortering en groepering. De standaardwaarde van het berekeningsveld zou dus bijvoorbeeld zijn NL02632A1, waarbij A1 het achtervoegsel is. In een aantal gevallen wordt hier een artikel van een specifieke groep bijgevoegd d.m.v. een voorvoegsel, bijvoorbeeld V. Deze groep, dit voorvoegsel, hoort bij het betreffende catalogusnummer 02632 en zal dus i.v.m. groepering en sortering achter het catalogusnummer geplaatst moeten worden, dus NL02632VA1. Voor andere voorvoegsels daarentegen is het minder gewenst dat deze het catalogusnummer volgen, omdat ze een eigen unieke nummering volgen, bijvoorbeeld het catalogusnummer 00389 met voorvoegsel M. In dit geval wordt het voorvoegsel voor het catnr geplaatst: NLM00389. Het resultaat in de sortering is dan dat netjes NL02632A1 en NL02632VA1 elkaar volgen en dat na alle numerieke getallen de groepen met voorgeplaatste voorvoegsels volgen. So far, so good.

Echter, bij aanmaak van een nieuw record wordt wél het automatisch volgnummer (catnr) geplaatst, maar niet de landcode en het achtervoegsel. Logisch, omdat deze op dat moment nog niet zijn ingevuld. De berekening zou dus moeten plaatsvinden nadat deze gegevens zijn ingevuld en gebaseerd op de criteria zoals beschreven. Via de knop met het gekoppelde if ... if else script wordt dit nu geregeld, maar de vraag is of dit automatisch kan worden geregeld door bijvoorbeeld het script als berekeningsformule te koppelen aan het berekeningsveld. Mijn probleem is echter dat dit script schijnbaar niet 1 op 1 als berekeningsformule van het veld kan worden ingesteld. De if ... if else constructie van het berekeningsveld lijkt beduidend anders dan een normaal script.

Link naar reactie
  • 0

Ter aanvulling: het script ziet er zo uit:

 

If [Database::CatnrVoor = "*" or Database::CatnrVoor = "**"]

Veld instellen [Database::Landcode & "-" & Right ( "00000" & GetAsText ( Database::Catnr) ; 5 ) & Database::CatnrToev]

Else If [Database::CatnrVoor = "V"]

Veld instellen [Database::Landcode & "-" & Right ( "00000" & GetAsText ( Database::Catnr) ; 5 ) & Database::CatnrVoor & Database::CatnrToev]

Else If [Database::CatnrVoor ≠ "*" or Database::CatnrVoor ≠ "**" or Database::CatnrVoor ≠ "V"]

Veld instellen [Database::Landcode & "-" & Database::CatnrVoor & Right ( "00000" & GetAsText ( Database::Catnr) ; 5 ) & Database::CatnrToev]

End If

Link naar reactie
  • 0

Het veld CatnrVoor is een verplicht veld. Hier moet een waarde worden ingevuld. * betekent een Hoofdnummer en ** een onderverdeling van het Hoofdnummer, de catalogusnummers zouden dan normaliter bijvoorbeeld NL-*03621 en NL-**03621a worden of NL-03621* en NL-03621**a. Omdat het echter Hoofdnummers zijn, hoeven de sterretjes niet in het sorteernummer te worden opgenomen. Daarvoor zorgt de eerste voorwaarde van het script.

Link naar reactie
  • 0

Nog een aanvulling waardoor je mogelijk een beter beeld krijgt van de sortering en groepering die ik bedoel.

Het gaat om een postzegeldatabase. Informatie hieromtrent kun je inzien op https://postzegel-database.nl/gallerij.html

Het sorteernummer staat rechtsboven met 3 puntjes. De puntjes dienen om, indien gewenst, het automatisch gegenereerde nummer handmatig aan te kunnen passen. D.w.z. het voorvoegsel voor of achter het catalogusnummer te plaatsen of te verwijderen. De knop naast serie is de knop waar ik het steeds over heb. Deze vind ik dus praktisch onhandig (een extra handeling) en esthetisch niet mooi.

Link naar reactie
  • 0

Dat voorvoegsel is niet des database maar we gaan kijken waar we komen. Vaste teksten zoals een V in een If-test zint me niet. Ik hoop niet dat je deze code gebruikt voor relaties... :-)

 

Vooralsnog als berekening gedaan omdat je dan geen knop hoeft in te drukken.

Bijgesloten een voorbeeldbestand met een paar records om uit te proberen. Werkt dit zoals bedoeld? Zo niet, hoe dan wel?

 

Mvg,

René

postzegelcode.fmp12

Link naar reactie
  • 0

Bedankt voor je moeite, maar helaas maakt het nog geen verschil. Kan het zijn dat het niet lukt omdat de waarden van landcode en voorvoegsel uit een andere tabel worden opgehaald? Overigens is de 'V' in dit geval één van de waarden van de tabel Voorvoegsel, net als het '*', enz. Hetzelfde geldt voor de landcodes.

En wat bedoel je met niet 'des database'. Het is toch heel normaal dat bij een relationele database waarden uit verschillende tabellen worden gekoppeld?

Link naar reactie
  • 0
Bedankt voor je moeite, maar helaas maakt het nog geen verschil. Kan het zijn dat het niet lukt omdat de waarden van landcode en voorvoegsel uit een andere tabel worden opgehaald? Overigens is de 'V' in dit geval één van de waarden van de tabel Voorvoegsel, net als het '*', enz. Hetzelfde geldt voor de landcodes.

En wat bedoel je met niet 'des database'. Het is toch heel normaal dat bij een relationele database waarden uit verschillende tabellen worden gekoppeld?

 

Natuurlijk is dat normaal maar dat zag ik niet in je berekening terug. Dat verklaart vermoedelijk de vaste tekst "V" in je script. Je zal meer informatie moeten geven, dit is geen raadspelletje...

Voeg aan het voorbeeld bestand maar tabellen en relaties toe waarmee je zou willen koppelen met een paar benodigde velden en records.

 

Mvg,

René

Link naar reactie
  • 0

Oké, ga vanavond even fröbelen. Zo te zien is de cruciale factor het moment van aanmaken. Bij het aanmaken van een nieuw record wordt gekeken wat de waarde is van de velden op dat moment en hiermee wordt het sorteernummer gevormd. Wijzig je wat in het nieuwe record, dan wordt dat niet geëvalueerd en dus niet opgeslagen.

Link naar reactie
  • 0
Oké, ga vanavond even fröbelen. Zo te zien is de cruciale factor het moment van aanmaken. Bij het aanmaken van een nieuw record wordt gekeken wat de waarde is van de velden op dat moment en hiermee wordt het sorteernummer gevormd. Wijzig je wat in het nieuwe record, dan wordt dat niet geëvalueerd en dus niet opgeslagen.

 

Met een knop/script wel maar met een berekeningsveld past het zich onmiddellijk aan.

Ik zie je bestandje wel verschijnen.

 

René

Link naar reactie
  • 0

Het lek is boven! Met het aanpassen van jouw bestand bleek het allemaal prima te werken, dus moest er ergens bij mij een fout zitten. En ja, hoe simpel kan het zijn. Bleek dat het vakje bestaande veldwaarde niet vervangen bij sorteernummer nog stond aangevinkt! Uitgezet en het werkt als een tierelier.

Nogmaals bedankt en toch ook weer wijzer hoe je een formule definieert bij berekende waarde. Dank!

Link naar reactie
  • 0
Bleek dat het vakje bestaande veldwaarde niet vervangen bij sorteernummer nog stond aangevinkt! Uitgezet en het werkt als een tierelier.

Aargh! Dat noemde ik in mijn eerste reactie!? :o

 

Gaat het lukken met de gerelateerde tabellen?

Ik geef trainingen in FileMaker, misschien is dat een idee? ;-)

 

René

Link naar reactie
  • 0

Ach ja, overheen gelezen denk ik of overtuigd dat daar de fout niet kon liggen :oops: Hoe dan ook, het is opgelost en weer wat wijzer.

Trainingen zouden welkom zijn, maar Weesp is een beetje uit de buurt. Maar met wat hulp hier en daar en vooral veel proberen komen we een eind.

Die database werkt in elk geval als een speer ... en met gerelateerde tabellen :D

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