Tekstfuncties

Status
Niet open voor verdere reacties.

HannesDC

Gebruiker
Lid geworden
12 jun 2018
Berichten
6
Hallo iedereen

Overmorgen heb ik een examen Access. Samen met enkele medestudenten probeerden we reeds om tot de oplossing te komen van het proefexamen, maar dit zonder succes. Ik zal hieronder per vraag overlopen wat wij reeds probeerden. Het opgavebestand heb ik toegevoegd aan deze post. Het zou schitterend zijn mocht iemand ons kunnen helpen.

Vraag 4
Reeds gewerkt met Left, LCase, jokertekens, IIf-functie. Geen van deze zaken hadden een positief effect.
Ik vermoed dat het een IIf-functie zal zijn, maar dan waarschijnlijk een iets complexere?

Vraag 5
Volgende functie ingegeven: Aantal dagen: DateDiff("d";[Graad sinds];Now()) maar ook zonder resultaat...
Het resultaat hiervan vermenigvuldigen we dan met het loon vermoed ik?

Vraag 6 en 7
Eerlijk gezegd: geen idee hoe hier aan te beginnen...
Een formulier maken lukt uiteraard wel, maar met enkel en alleen specifiek die scrambles in lukt niet... :(

Hartelijk dank voor de hulp!

Groeten
Hannes
 

Bijlagen

  • Opgave.pdf
    705,6 KB · Weergaven: 50
Laatst bewerkt:
Een Access bestand moet je eerst zippen, gewoon uploaden kan niet. Ik snap vraag 4 eerlijk gezegd niet, ik vermoed dat je het veld [Afkorting] moet vullen op basis van de functie? En dat je de afkortingen niet voor elkaar krijgt in de selectiequery? Dat snap ik nog wel, want het is een lastige formule.

Omdat dit overduidelijk een schoolopdracht is, mag ik geen concrete hulp geven, maar ik mag je wel in de goede richting zetten. De complexiteit zit hem er in dat de functie op verschillende manieren bekeken moet worden. Om te beginnen: als hij met een cijfer begint, moet de afkorting leeg blijven. Dat kun je doen door te kijken of het eerste teken een cijfer is of tekst. Dat doe je dan met de functie ASC in combinatie met Left([Functie];1). Je kunt vergelijken op de ASCII waarden voor cijfers, of voor tekst. Dat maakt voor de functie niet uit. Cijfers is makkelijker, omdat letters verschillende waarden kennen voor hoofdletters en kleine letters. Maar dat kun je met LCase terugbrengen tot één vergelijking.
Een IIF kent een TRUE variant (1e teken is cijfer) en een FALSE (geen cijfer). Voor de FALSE moet je nog een IIF maken (nesten) die controleert of er in de functienaam een “-” voorkomt of niet. Dat kun je met INSTR doen. Dat levert 0 op als er geen koppelteken is (functienaam met 4 tekens) of wel (3 tekens + - + 2 tekens). Daar heb je dus de TRUE en FALSE opties voor de geneste IIF.
En volgens mij ben je er dan met vraag 4. Dat geheel zet je dan in een UPDATE query om het veld te vullen.
 
Voor vraag 5 geef je een beetje weinig informatie, maar in essentie is dat een makkelijke. Met DateDiff kun je uitrekenen hoeveel maanden iemand werkt. Maar dan miet je niet “d” gebruiken, maar “m”. Daar rolt dan een aantal maanden uit dat iemand in functie is, en dat getal vermenigvuldig je dan met het salaris.
 
Vraag 6 snap ik, op basis van je pdf-je, ook niet. Vluchten invoeren kan makkelijk via een formulier, maar een trainingsvlucht is in essentie hetzelfde als een scramble; je hebt een datum, een toestel en een piloot nodig. Alleen vul je geen kosten in bij een trainingsvlucht. In de tabel moet je dan aangeven welk type vlucht je invoert. Maar ik vermoed dat er aparte tabellen zijn voor scrambles en trainingsvluchten, en dan bestaat dat probleem natuurlijk niet. Dan is elke ingevulde vlucht in tblScrambles automatisch een scramble. Ik vermoed dat je de kostprijs op moet slaan (vanwege de historie van de kostprijs) en dat dat een probleem is. Hoeft niet; je koppelt het veld aan het tabelveld, en gebruikt een OnChange op het veld [Duur] om de prijs uit te rekenen. Tenminste: dat zou ik doen. Verder zie ik hier niet zoveel problemen.
 
Vraag 7 lijkt mij een kwestie van een rapport maken, en dat groeperen op het veld [Categorie]. Daarbij staan zowel [Categorie] als [Graad] in de detailsectie, dus je moet op het veld [Categorie] een specifieke eigenschap aanpassen zodat de waarde maar één keer getoond wordt per categorie. Maar die vind je denk ik wel.
 
Een Access bestand moet je eerst zippen, gewoon uploaden kan niet. Ik snap vraag 4 eerlijk gezegd niet, ik vermoed dat je het veld [Afkorting] moet vullen op basis van de functie? En dat je de afkortingen niet voor elkaar krijgt in de selectiequery? Dat snap ik nog wel, want het is een lastige formule.

Omdat dit overduidelijk een schoolopdracht is, mag ik geen concrete hulp geven, maar ik mag je wel in de goede richting zetten. De complexiteit zit hem er in dat de functie op verschillende manieren bekeken moet worden. Om te beginnen: als hij met een cijfer begint, moet de afkorting leeg blijven. Dat kun je doen door te kijken of het eerste teken een cijfer is of tekst. Dat doe je dan met de functie ASC in combinatie met Left([Functie];1). Je kunt vergelijken op de ASCII waarden voor cijfers, of voor tekst. Dat maakt voor de functie niet uit. Cijfers is makkelijker, omdat letters verschillende waarden kennen voor hoofdletters en kleine letters. Maar dat kun je met LCase terugbrengen tot één vergelijking.
Een IIF kent een TRUE variant (1e teken is cijfer) en een FALSE (geen cijfer). Voor de FALSE moet je nog een IIF maken (nesten) die controleert of er in de functienaam een “-” voorkomt of niet. Dat kun je met INSTR doen. Dat levert 0 op als er geen koppelteken is (functienaam met 4 tekens) of wel (3 tekens + - + 2 tekens). Daar heb je dus de TRUE en FALSE opties voor de geneste IIF.
En volgens mij ben je er dan met vraag 4. Dat geheel zet je dan in een UPDATE query om het veld te vullen.

Heel erg bedankt voor je hulp. Ik ga dit morgen zeker eens proberen. Ik snap nu wel elk onderdeeltje, maar het zal toch zoeken worden om het in elkaar te krijgen... Maar al een hele grote dank je wel! ;)
 
Nog een tip: de QUOTE knop is precies dat: een knop om (een stukje van) een bericht te quoten. Het is geen antwoordknop, daarvoor heb je de (ook nog eens veel grotere) knop <Reageer op bericht>. Of je gaat gelijk in het tekstvak <Snel reageren> aan de slag. Quotes zijn lelijk, overbodig en maken draadjes nodeloos lang waardoor jij en ik straks met een ongewenste muisarm rondlopen :).
 
Daar ga op letten in het vervolg, OctaFish! ;)

Wat betreft die vraag van die tekstfuncties… Ik kom er eerlijk gezegd niet op uit hoe het moet. Ik heb reeds dit ingegeven qua functie: Afkorting: IIF(Asc(Left([Graad];1). Maar hoe je allemaal die parameters moet ingeven en er één functie van maakt is en blijft voor mij een raadsel...
 
Bij de oefening waarbij ik het loon moet bepalen, wilde ik eerst het aantal maanden berekenen. In mijn query zijn er twee kolommen, nl.: [Graad Sinds] met de begindatum en de kolom [Vandaag] waarin ik de functie now() geplaatst heb. Het verschil wilde ik berekenen adhv volgende functie: Verschil: DateDiff("m";[Graad sinds];[Vandaag]). Hier geeft hij wel een cijfer, maar niet het correcte aantal... :confused:
 
Een IIF heeft altijd een vergelijking en twee uitkomsten. Jij hebt nu alleen de vergelijking ingevuld. En daar dus nog eigenlijk geen vergelijking van gemaakt. Probeer eerst dit maar eens:
PHP:
Expr1: Asc(Left([Graad];1))
En dan snap je wellicht hoe je daar een vergelijking van kan maken:
PHP:
Expr2: IIf(Asc(Left([Graad];1))>=49 And Asc(Left([Graad];1))<=57;"";"Geen getal als start")
 
Ik heb het intussen gevonden: LCase(IIf(InStr([Graad];"1e")>0;Null;IIf(InStr([Graad];"-")>0;Left([graad];3) & "-" & Mid([graad];InStr([graad];"-")+1;2);Left([graad];4))))
Het rapport maken is intussen ook gelukt, maar ik krijg telkens alle categorieën. Ik heb ook eens bij de opties gekeken, maar ik vind niet meteen welke eigenschap het is die ervoor kan zorgen dat je elke categorie één keer ziet...
 
En toch is het een eigenschap van het tekstveld :). Kijk nog maar eens goed bij de eigenschappen van het veld.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan