Veld blijft leeg na aanpassen

Status
Niet open voor verdere reacties.

timothy85

Gebruiker
Lid geworden
17 apr 2013
Berichten
6
Ik ben nu al zo kleine 2 dagen bezig en het zal vast iets simpel zijn.
Maar ik heb hier een voorbeeld van een access database waarin je 3 tabellen hebt. 1 van auto's, 1 van merken en 1 van alle type auto's
Ik heb het nu zo gemaakt als je bijvoorbeeld het merk vw kiest dat je alleen alle type vw auto's kunt zien zoals golf bora enz enz.

Maar als ik éénmaal in het formulier een type auto heb gekozen en ik besluit naar een andere record te gaan dan is 1 nog maar ingevuld alle andere records zijn leeg.
in de bijlage is een snel voorbeeld hoe ik hem in elkaar gezet heb. Normaal zit er hier en daar ook een command om de query opnieuw uit te voeren. maar ook daar stoei ik mee om die op de juiste plaatst te krijgen.
het gaat niet om de tabbelen want daar staan de waardes wel in. Maar het gaat mij om het formulier die leeg blijft na het schakelen tussen recorders

Dus ik hoop heel erg dat iemand mij hier met deze 2 problemen mij kan helpen.

Zie bijlage.

Groetjes Timothy
 

Bijlagen

Laatst bewerkt:
Je moet inderdaad de keuzelijst verversen. En wel nadat je een merk hebt gekozen (gebeurtenis "na bijwerken" op het veld merk), maar ook nadat je na een nieuw record gaat (gebeurtenis "bij aanwijzen" op het formulier).
Maar er moet meer gebeuren. Als je een (ander) merk kiest en er staat nog iets in type, dan moet het bestaande type leeg gemaakt worden. Anders loop je kans op inconsistenties.

Over mogelijke inconsistenties gesproken. Het veld merk hoort niet in de tabel auto te staan. Op deze manier leg je op twee plaatsen vast bij welk merk een type hoort.
Als je dan in de tabel type het merk bij een type wijzigt, bijvoorbeeld omdat je dat verkeerd had ingegeven, en dat type wordt al gebruikt bij een auto, dan blijft bij de auto het oude merk staan en heb je dus een inconsistentie.
In mijn voorbeeld heb ik merk dus uit de tabel auto verwijderd. Uiteraard wil je bij een auto op het formulier wel zien wat het merk is en het merk ook kunnen gebruiken om een type te kiezen, maar daarvoor gebruik je dan een niet-afhankelijk veld op het formulier.
In de eerder genoemde gebeurtenissen zorg je ervoor dat alles goed getoond wordt en de keuzelijst voor type altijd goed gevuld is. De query's heb je dan niet nodig.
 

Bijlagen

Kijk dat is wel even goed om te weten.

En ik snap wat je bedoelt.
Maar een niet onafhankelijke veld zorgt er voor dat het veld merk 1: bij elke record op het formulier het zelfde blijft. En 2: niet de juiste gegevens geladen wordt.

Waar het mij om gaat is dat als je de waarde kiest het op het formulier ook zichtbaar blijft.
Dat is in jou voorbeeld helaas niet het geval.
 
Raar???

Bij mij laat hij gewoon de juiste gegevens zien (zie print screens).
 

Bijlagen

  • A1.jpg
    A1.jpg
    13,9 KB · Weergaven: 24
  • A2.jpg
    A2.jpg
    14,1 KB · Weergaven: 20
bestand van je even opnieuw gedownload. niks aangepast. En dit is het eerste dat ik zie.
en bij het openen van de lijst zie ik ook meteen alle auto's
 

Bijlagen

  • 1.PNG
    1.PNG
    6,3 KB · Weergaven: 16
  • 2.PNG
    2.PNG
    6,3 KB · Weergaven: 17
  • 3.png
    3.png
    10,9 KB · Weergaven: 17
Laatst bewerkt:
Het lijkt erop dat de VBA-code achter de gebeurtenissen niet uitgevoerd wordt. Misschien even de verwijzingen controleren?
Ga in de ontwerpmodus van het formulier bijvoorbeeld naar het veld Merk en open de code van de gebeurtenis "Na bijwerken".
Kies in het scherm dat geopend is in het menu voor Extra -> Verwijzingen. Zie bijlage voor wat bij mij is geactiveerd.
 

Bijlagen

  • A3.jpg
    A3.jpg
    85 KB · Weergaven: 24
oooh je werkt met VBA code.
Ik wil daar liever niet mee werken. (mede omdat ik daar niet mee overweg kan) :(
 
Laatst bewerkt:
Ik wil daar liever niet mee werken. (mede omdat ik daar niet mee overweg kan) :(
Da's dn jammer, want sommige zaken kunnen niet zonder dat je dat met VBA (of macro's, maar begin daar bij voorkeur nooit aan) doet. In dit geval zijn het simpele code's die je, als je het eenmaal doorhebt, heel gemakkelijk op andere projecten kunt toepassen. Ik ga overigens een heel eind mee met de oplossing van xps, al gruwel ik van het gebruik van keuzelijsten op basis van tabellen in een tabel. Die horen daar dus absoluut niet in thuis, maar op formulieren. In een tabel wil je altijd de opgeslagen waarde kunnen terugzien. Dat is, ook in dit voorbeeld, dus onmogelijk, want je ziet niet het MerkID, maar het autotype. En bij afhankelijke keuzelijsten gebruik ik altijd de Click gebeurtenis, nooit AfterUpdate. Die werkt alleen maar vertragend. Maar de oplossing an sich werkt dus prima.
 
ik ben wel erg dankbaar wat je voor mij hebt gedaan.
Ben er even goed voor gaan zitten en snap de regel wel een beetje nu
Om het zelf te maken zal nog heel lang gaan duren :confused:

Maar kan je mij misschien nog 1x keer uit de brand helpen?
Het is een verplicht veld. Ik krijg daar nu een fout op.

Heb je misschien een idee wat ik zou kunnen doen?
 
Is moeilijk te zeggen zonder verdere informatie.
Over welk veld heb je het?
Wat heb je gedaan?
Welke fout krijg je?

Voor verplichte velden die in een tabel staan kan je in de tabeldefinitie aangegeven dat ze verplicht zijn.
Als je merk niet invult bij een nieuwe auto kan je als het goed is ook geen (verplicht) type kiezen. Dat gaat dus vanzelf goed.
 
Het gaat om veld type.
Als die door de vba leeg gemaakt wordt omdat je een ander merk kiest krijg ik foutmelding.

Ik ben nu niet thuis. Dus kan je de fout nu niet laten zien.
Maar als je eigen bestand het veld type in database auto verplicht maakt en kiest iets anders zou je het moeten zien volgens mij.
 
Ik snap je probleem niet. Als je een ander merk kiest, en de keuzelijst Type dus leeg wordt gemaakt (zoals het hoort), dan staat je formulier/record in de bewerkingsmodus. Je krijgt dan nooit een foutmelding. (welke trouwens?). Een verplicht veld wordt pas gevalideerd bij het opslaan van het record, bijvoorbeeld als je naar het volgende/vorige record gaat. Dus áls je een foutmelding krijgt, is dat omdat je het formulier niet goed invult. Maar het is allemaal niet zo lastig, lijkt mij.
 

Bijlagen

De opmerking van AccessGuru dat verplichte velden pas bij opslaan gevalideerd worden klinkt logisch en aannemelijk. Toch blijkt het niet zo te werken. Ik maakte het type verplicht in de tabel auto. Nadat ik bij een bestaande auto een ander merk had gekozen en op tab klikte om naar het type te gaan, kreeg ik een foutmelding over het niet ingevuld zijn van het type. Ik snap dat niet goed, maar het is wel zo.

De oplossing die
AccessGuru kiest vind ik niet helemaal netjes. Hij zet een ongeldige waarde in typeID (nul) waardoor je daarover een melding krijgt bij het opslaan van het record. Voor de gebruiker is dat een onlogische melding. Hij heeft immers geen fout type ingevuld, maar geen type ingevuld.

Ik heb nu een workaround gemaakt. Het typeID is niet meer verplicht in de tabeldefinitie. Ik controleer in de (formulier)gebeurtenis "voor bijwerken" of het type is ingevuld. Om het invullen te stimuleren doe ik bovendien een dropdown op het type nadat een merk is gekozen.
 

Bijlagen

Ik heb nu een workaround gemaakt. Het typeID is niet meer verplicht in de tabeldefinitie.
Slecht plan; je moet het veld natuurlijk gewoon verplicht laten. Die check op het correct invullen van het formulier lijkt mij logisch, en zou ik zelf ook inbouwen. Ik demonstreer slechts de techniek hoe je het werkend kan krijgen. Als ik iets moet gaan bouwen​, dan stuur ik doorgaans ook een (vette) rekening :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan