Ken een veld een waarde toe afhankelijk van een waarde

Status
Niet open voor verdere reacties.

hausi

Gebruiker
Lid geworden
17 jan 2010
Berichten
84
Goedenacht deskundigen,

Uit het tijdstip van deze post blijkt dat ik na lang zoeken het antwoord op mijn vraag nog steeds niet heb gevonden.
De situatie is als volgt;
In mijn receptendatabase wil ik recepten kunnen kiezen op basis van vleessoort. Ik wil daarbij kunnen zien hoe vaak ik dat recept al gebruikt heb en wanneer dat voor het laatst was.
Nu heb ik een subformulier gemaakt gebaseerd op een query. Dit subformulier plaats ik in een hoofdformulier met een combobox waaruit ik een selectie kan maken (vleessoort) die vervolgens een query start waarvan de resultaten worden gepresenteerd in het subformulier.
Tot zover gaat alles goed. Het subform is een doorlopend formulier en de resultaten worden keurig onder elkaar gepresenteerd.
In het subformulier heb ik een tekstveld geplaatst dat me verteld of ik het recept al eerder heb gebruikt en wanneer dat voor het laats was. Die tekst is afhankelijk van een numeriek veld dat in de query opgenomen is.
Is dat veld groter dan 0 dan staat er: je hebt het recept al zo vaak gebruikt en de laatste keer was op "datum" en anders: je hebt het nog nooit gebruikt
Het probleem zit erin dat als ik de query heb gestart, alleen voor het eerste resultaat de vergelijking wordt gecontroleerd en de bijbehorende tekst vervolgens bij elk resultaat wordt gepresenteerd en dat zou natuurlijk voor elk resultaat van de query verschillend moeten zijn.
Ik hoop dat ik duidelijk heb kunnen maken wat ik wil en wat er gebeurt.
Ik zou de database wel willen bijvoegen maar die is 30 MB groot en ik weet niet hoe ik dat doen moet.

Groeten,
Hans
 
Laatst bewerkt:
Uit het tijdstip van deze post blijkt dat ik na lang zoeken het antwoord op mijn vraag nog steeds niet heb gevonden.
...
Ik zou de database wel willen bijvoegen maar die is 30 MB groot en ik weet niet hoe ik dat doen moet.
Of het zegt dat je op dat moment de verkeerde dingen aan het doen bent :)
De database is toch wel handig om erbij te hebben; je kunt hem eerst comprimeren, en vervolgens zippen bijvoorbeeld. Als de zip >100kb is, kun je eventueel WinRar gebruiken, waarmee je deelbestanden kunt maken. Is ook prima als je dan niet al teveel deelzipjes hebt. Of, nog makkelijker, je kunt de db op een fileshare zetten (mijnbestand.nl bijvoorbeeld). Kunnen we hem daar gelijk afhalen en gebruiken.

Het probleem zit erin dat als ik de query heb gestart, alleen voor het eerste resultaat de vergelijking wordt gecontroleerd en de bijbehorende tekst vervolgens bij elk resultaat wordt gepresenteerd en dat zou natuurlijk voor elk resultaat van de query verschillend moeten zijn.
Een doorlopend formulier dat gebruik maakt van een niet-afhankelijk tekstvak voor een formule, geeft het effect dat je beschrijt, dus ik krijg het sterke vermoeden dat je de formule in een niet-gebonden tekstvak hebt gemaakt. Maar volgens mij hoeft dat niet wat zo'n formule(uitkomst) kun je makkelijk ook in de onderliggende query maken, en dan koppel je het tekstvak aan die formule en is je probleem weg.
 
Hoi Octafish,

Eerlijk gezegd wachtte ik al op jouw bericht :)
Ik heb het bestand ge-upload naar mijnbestand.nl, het is hier te vinden.
Ik denk dat het beter is dat je het eens bekijkt.
Het gaat om het formulier "frmRecepten" je ziet daar in ontwerpweergave een niet-afhankelijk tekstveld. De gebeurtenis wordt gestart voor bijwerken formulier.
Alles is nog in ontwikkeling dus een beetje ruw nog.
Alvast bedankt voor het meedenken.

Groeten,
Hans
 
Laatst bewerkt:
Ik loop nu al een tijdje te zoeken op je formulier, maar een niet-gebonden tekstveld heb ik nog niet gevonden :). Welke naam moet dat veld hebben?
Wél vond ik dat je code (ik zeg 'je', maar ik vermoed dat je hem gevonden hebt) om de sterren zichtbaar te maken een stuk slimmer kon, dus die heb ik wat ingekort.

Code:
Const Sterren As Integer = 5
Code:
Public Function SetRating(frm As Object, ctl As Access.Control)
'Code: by Michel de Rooij
On Error GoTo Err_handler
Dim i As Integer, x As Integer
Dim strStar As String
strStar = CurrentProject.Path & Star
x = ctl.Value
Select Case ctl.Value
    Case Is = 0
        For i = 1 To Sterren
            frm("Ster" & i).Visible = False
        Next i
    Case Else
        For i = 1 To x
            frm("Ster" & i).Visible = True
        Next i
        For i = x + 1 To 5
            frm("Ster" & i).Visible = False
        Next i
End Select

Exit_err:
    Exit Function

Err_handler:
    MsgBox Err.Number & " " & Err.Description

End Function
Maar ik ben erg benieuwd naar dat tekstvak :)
 
Hoi Michel,

Ik zal de code van jou dadelijk proberen, hartstikke bedankt.
De bijgevoegde afbeelding laat het beruchte tekstvak zien dat heet "MeldingGebruik"

frmZoekRecepten.PNG

Hans
 
Als je de weg in Rotterdam wilt weten, moet je die niet in Utrecht vragen :)
Het gaat om het formulier "frmRecepten" je ziet daar ...
En wat zie ik in je plaatje? het formulier frmZoekRecepten :). Maar ik zal daar ook een lichtje op laten schijnen.
 
En wat zie ik in je plaatje? het formulier frmZoekRecepten :). Maar ik zal daar ook een lichtje op laten schijnen.

Oops..............................
Thanks man.
 
Je doet iets vreemds, in mijn ogen. In de tabel [tblRecepten] heb je een veld [LaatsteKeer] en een veld [AantalKeerGebruikt]. Dit zijn gegevens die je normaal gesproken berekent, en zeker niet opslaat in je tabel, want die is niet dynamisch en een query wél. Maar wat vreemder is: als een ingrediënt 0 keer gebruikt is, hoe kan de laatste datum dan 26-4-2014 zijn? Dat moet je maar eens verklaren... Ik heb nog nooit een bank beroofd; de laatste keer was op 26-4-2014. Nou jij...
 
Je hebt natuurlijk gelijk maar zoals ik al zei, het is een nogal ruwe opzet. Als ik het selectieveld aanvink komt de datum in het vak "Vandaag" te staan. Deze waarde wordt overgenomen door het vak "LaatsteKeer" "AantalKeerGebruikt" zou standaard op "0" moeten staan en met "1" vermeerderen bij het aanvinken van het "SelectieVeld" en ook met "1" verminderen als je van gedachten verandert. Maar dat deel is nog in ontwikkeling, je kunt nu in het vak "AantalKeerGebruikt" nog gewoon een waarde invullen.
Het ziet er raar uit maar is wel wel verklaarbaar.
Als je het "SelectieVeld" aanvinkt verschijnt ook het vak "AantalPersonen" maar dat heeft ook her probleem dat het in alle query resultaten verschijnt.

Hans
 
Weet je wat, ik gooi er nog één tussendoor :)
Zoals ik in bericht #2 al zei, kan je het makkelijk in de onderliggende query oplossen. Daar zet je dan deze formule:
Code:
Melding: IIf([AantalKeerGebruikt]=0;"Dit recept is nog nooit gekozen";"Je hebt dit recept in totaal" & " " & [AantalKeerGebruikt] & " " & "keer gekozen, de laatste keer was op" & [LaatsteKeer])
En het tekstvak op je formulier koppel je dan aan dit berekende veld.
 
Hoi Michel,

Hartstikke bedankt voor je oplossing, het werkt probleemloos.
Ik nooit enige vorm van onderwijs gehad voor wat VBA betreft maar ik kan het meeste wel begrijpen door m'n ervaring. Wat ik nog niet helemaal begrijp is de public function. Ik geloof dat dat een functie is die niet afhankelijk is van een specifiek formulier en in de hele DB kan worden aangeroepen. Nu begin je je functie met const (constante?), waar moet ik die kwijt? In het formulier vanwaar ik de functie aanroep?
En dan heb je de volgende regel geschreven:
strStar = CurrentProject.Path & Star
Die variabele vind ik daarna niet terug, is dat de verwijzing naar de plek waar mijn afbeelding van de ster staat? Dat is naar mijn idee niet noodzakelijk omdat de afbeeldingen in het formulier zelf zijn opgenomen.
Er zijn voor de sterwaardering drie modules waarvan ik de modRatingClick moet vervangen door jouw code zoals ik het begrijp, blijven die twee andere modules wel nodig?

Je ziet het, ik moet nog veel leren :D

Hans
 
Het onderwerp 'scope van een variabele/functie' is te breed om in een berichtje te zetten, maar hier en hier vind je wat informatie die je op weg kan helpen. De Microsoft pagina behandelt wel Excel, maar de informatie geldt ook voor Access. Enige toevoeging daarbij is, dat Formulieren hun eigen modules hebben, en dat de scope daarvan dus in beginsel alleen voor dat formulier werkt. (is niet helemaal zo, maar hou het daar voor het gamak maar even bij).
Constanten (Inderdaad, definieer je met CONST) zijn variabelen met een vaste waarde. Die kun je binnen een procedure zetten, dan werken ze alleen binnen de procedure. Heb je ze ruimer nodig, dan zet je ze in het algemene blok van de (formulier)module. Wil je ze altijd en overal, dan maak je hem public in een (aparte) module. Maar de plek is wel duidelijk als je de linkjes leest.
De variabele Star in de regel c is de verwijzing naar de afbeelding. In mijn geval heb ik in de map met de db een mapje Afbeelding gemaakt, met een plaatje Golden_Star.png. Star bevat dus de tekst "\Afbeelding\Golden_Star.png". Ik was vergeten die regel in de functie te zetten. Ik zou nooit afbeeldingen in een formulier zelf zetten, maar altijd buiten de db, en dan koppelen als het nodig is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan