keuzevak vullen met veld uit query en dit automatisch opslaan in record

Status
Niet open voor verdere reacties.

impulsief

Gebruiker
Lid geworden
10 dec 2017
Berichten
46
Hallo

ik heb een formulier waarin de gast zelf een nasi maaltijd kan bestellen, om fouten te voor komen wordt er vanuit een query het veld consumptie datum automatisch gevuld met de datum van de komende week, tot zover werkt het, maar het lukt me niet die datum ook in het record op te slaan, dat gaat wel als je klikt op het veld, maar ik zoek een manier waarop de gast dit niet hoeft te doen, want het vraagt om fouten en een leeg veld, de datum is belangrijk voor het rapport dat op de datum van consumptie uitgedraaid wordt voor de keuken en uitgifte.

Iemand een goed idee, bij voorkeur zonder VBA code
Zie ook de uitgeklede test database
Met vriendelijke groet,

Peter
 

Bijlagen

  • test2.zip
    45,4 KB · Weergaven: 26
De opzet van je formulier is redelijk verkeerd, vrees ik. Als je een bestelformulier wilt maken, moet je dat formulier baseren op de tabel [Bestelling]. In die tabel heb je velden die je nodig hebt om de bestelling te verwerken, zoals 'wie bestelt' (de [Gast ID]), 'wat bestelt' (ArtikelID) en wanneer. Al die gegevens zitten wel in je tabel, maar niet in de query die je voor de bestelling gebruikt. Daarnaast gebruik je een keuzelijst voor de selectie van de consumptiedatum, en dat lijkt mij ook een hele rare oplossing, omdat je een datum toch veel makkelijker met een DatePicker kan laten kiezen? Ook het automatisch vullen van dat veld is met de eigenschap <Standaardwaarde> heel simpel te doen.

Gezien de opzet van je tabellen zou je het formulier ook nog kunnen baseren op de tabel [Nasi], zodat alle velden daarin gevuld worden. De overige velden op het formulier zijn dan gekoppelde velden. Wat je in ieder geval niet mag doen, is een sleutelveld uit de gekoppelde velden gebruiken, want dan kun je de query en het formulier niet meer gebruiken om nieuwe (nasi)bestellingen op te nemen. Dus: het formulier (de query) moet gebaseerd zijn op de tabel die je wilt gebruiken om alle recordss op te slaan, en daarnaast mag je in de query ook velden uit andere tabellen zetten, mits dat geen sleutelvelden zijn in die tabel.

Ik heb je al eerder gezegd dat je een in min ogen hopeloze opzet gebruikt, en daar blijf ik bij :). Ik raad je echt aan om het hele systeem op een rustig moment (als dat er is) eens goed tegen het licht te houden, en met een goed opgezette database te gaan werken. Dat kost wat extra tijd en inspanning, plus wat frustraties omdat je al best een eind bezig bent, maar uiteindelijk gaat het je veel meer gemak opleveren dan de ellende die je nu hebt, en die je zult blijven hebben met deze opzet.
 
Hoi Octavisch
Ik ga de database nog wel opnieuw bouwen maar daar is nu aan het begin van het seizoen geen tijd voor
Een DatePicker is vast een goed idee voor een programmeur maar voor mij te hoog gegrepen, Daar komt bij dat ik de beheerder het menu voor de komende week aan moet kunnen passen, kolom 2 is nu de consumptie datum, in kolom 3 komt straks het gerecht te staan

Even terug naar mijn vraag! is het mogelijk om bij bijvoorbeeld bij focus het veld op te slaan in het nieuwe record ja of nee en zo ja wat moet dan de opdracht regel bij op focus zijn

alle ideeen zijn welkom

mvg
 
Een DatePicker is vast een goed idee voor een programmeur maar voor mij te hoog gegrepen
Hoe kom je daar nu bij? Een Datepicker krijg je automatisch te zien bij een tekstveld mits dat een datumveld is. En dáár ligt jouw probleem: jij hebt datumvelden gedefinieerd als tekstvelden. Daar zul je hopelijk over nagedacht hebben en er dus een goede reden voor kunnen hebben (ik heb hem nooit kunnen vinden), maar in mijn ogen is dat dus totaal onhandig. Datums zijn getallen en met getallen kun je rekenen. Als ik een datumveld heb, en ik wil daar automatisch een vervolgdatum op kunnen baseren (reserveringen voor de volgende dag bijvoorbeeld) dan wil ik dat kunnen doen met een formule: =[Reserveringsdatum]+1 bijvoorbeeld, of Expr1: DateAdd("d";2;[Reserveringsdatum]) om maar wat te noemen.

Dus: voor een DatePicker hoef je helemaal niets te programmeren; je gebruik een datumveld, Access herkent dat en als je in het veld klikt krijg je automatisch een knopje waarmee je de DatePicker opent. En iedereen kan op een knop klikken en een datum kiezen.

Wat betreft je eigenlijke vraag: als het formulier op een correcte wijze is gekoppeld aan de juiste tabel, dan sla je de gegevens al op en is er dus geen extra handeling nodig. Als je het record niet op kunt slaan, dan heeft dat dus een oorzaak die niets met het record te maken heeft, maar ligt die elders. In jouw formulier/query gebruik je sleutelvelden die je niet mag gebruiken waardoor er geen record is op te slaan. Als je dat niet oplost, ga je dat ook niet oplossen met een code.
 
hoi,

het record slaat wel op maar de datum die via de query in de keuzelijst getoond wordt, wordt pas opgeslagen in het veld consumptiedatum van het nieuwe record als het aangeklikt wordt in het formulier, die laatste stap wil ik overslaan, dus de getoonde informatie in het keuzevak moet automatich in het record opgenomen worden bij opslag, zie de meegeleverde voorbeeld database

Anders uitgelegd, het is een keuze lijst, dus normaal zou je een keuze moeten maken en die wordt dan in het record opgeslagen, ik bied in de keuzelijst maar 1 mogelijkheid aan en die zou zonder te kiezen opgeslagen moeten worden in het record
 
Laatst bewerkt:
Nogmaals: als je het formulier aan de juiste tabel/query hangt, heb je dit probleem niet. En een datumveld gebruiken, en die keuzelijst weggooien!
 
Nogmaals: als je het formulier aan de juiste tabel/query hangt, heb je dit probleem niet. En een datumveld gebruiken, en die keuzelijst weggooien!

Nogmaals geen idee hoe ik dat aan zou moeten pakken (mijn beperkingen heb ik al een keer uitgelegd), en kan op dit moment ook niet alles omgooien, wat jij simpel noemt bij de datumpicker sloot je af met 3 mogelijke programmeer regels, dat is voor mij te hoog gegrepen, ik ben echt afhankelijk van wat access in eigen basis heeft, soms met een probleempje dat ik dan hier voor leg, waarbij ik er niets aam heb te horen wat ik allemaal fout doe, en anders zou moeten, ik heb ook uitgelegd dat de beheerder de datum aan moet kunnen vullen met het menu van de dag in hetzelfde veld, ik heb dus niets aan een datumveld

Daarom opnieuw de vraag ook aan de andere mee lezers.
het record slaat wel op maar de datum die via de query in de keuzelijst getoond wordt, wordt pas opgeslagen in het veld consumptiedatum van het nieuwe record als het aangeklikt wordt in het formulier, die laatste stap wil ik overslaan, dus de getoonde informatie in het keuzevak moet automatich in het record opgenomen worden bij opslag, zie de meegeleverde voorbeeld database

Anders uitgelegd, het is een keuze lijst, dus normaal zou je een keuze moeten maken en die wordt dan in het record opgeslagen, ik bied in de keuzelijst maar 1 mogelijkheid aan en die zou zonder te kiezen opgeslagen moeten worden in het record
 
Nogmaals geen idee hoe ik dat aan zou moeten pakken (mijn beperkingen heb ik al een keer uitgelegd)
De werkwijze is simpel, maar je moet hem even weten want het kan voor zover ik niet weet via een menu of knop maar alleen met de rechter muisknop. Je klikt dus op de keuzelijst die je nu hebt met de rechtermuis, en kiest dan uit het snelmenu <Wijzigen in>. Vervolgens kies je voor Tekstvak. Meer is het niet. Zoals ik al eerder ook zei: in je tabellen gebruik je voor de datums tekstvelden wat in mijn ogen heel slecht en onhandig is. Maak daar in de tabellen alsnog datumvelden van (zal geen probleem opleveren als er geen rare dingen (lees: echte tekst) in staan en je formulier is dan ook gelijk opgelost: het tekstvak bevat nu de DatePicker als je in het tekstveld gaat staan. En vanaf dat moment kun je dus probleemloos datums selecteren op een manier die vele malen logischer is als via die keuzelijst.

wat jij simpel noemt bij de datumpicker sloot je af met 3 mogelijke programmeer regels, dat is voor mij te hoog gegrepen
Nee, dat is nergens voor nodig: er wordt totaal niet bij geprogrammeerd. Dat kán wel, als je bij het klikken in een tekstveld al gelijk de datumpicker geopend wilt hebben. Dat vind ik iets vriendelijker voor een gebruiker, die hoeft dan maar één keer te klikken.

Die drie regels? Als je een macro maakt, krijg je automatisch een beginregel (Private Sub) en een eind regel: End Sub. Dat zijn er al twee van de drie. Daartussen staat dan inderdaad één regel code. Die is ook nog eens generiek, dus die kun je naar alle tekstvelden (met datum uiteraard) kopiëren. Je brengt het steeds alsof ik de meest gruwelijke moeilijke oplossingen aandraag, maar dat is dus echt niet zo :).
De 'oplossing' die je nú nodig hebt, is vele malen ingewikkelder en vraagt veel meer code en brengt je dus alleen maar verder in de ellende.

ik ben echt afhankelijk van wat access in eigen basis heeft
Nogmaals: wat ik beschrijf is standaard Access functionaliteit. Zit allemaal 'in de doos'
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan