Openen van een formulier, afhankelijk van controle op voorwaarden in ander formulier

Status
Niet open voor verdere reacties.

J Manussen

Gebruiker
Lid geworden
16 dec 2009
Berichten
30
Geachte leden van het forum,

Ik maak in Access 2007 een toepassing voor een beheerder v.e. kleine camping. Daarin ga ik vanuit form. "Menu" d.m.v. opdrachtknop "naar prijzen"
m.b.v. VBA naar het form. "Prijzen". In dit form. "Prijzen" kan ik via de knop "naar boekingen" naar het form. "Boekingen". Dit gebeurt echter alleen als alle prijzen zijn ingevuld.
Wat ik wil: Direct vanuit form. "Menu" via de knop "naar boekingen" naar form. "Boekingen", waarbij eerst weer wordt gecontroleerd in form. "Prijzen", of alle prijzen al zijn ingevuld.
Dus: Alle prijzen ingevuld, dan direct naar form. "Boekingen". Is dat niet het geval, dan moet form. "Prijzen" worden geopend.

Dit lukt mij echter niet.


Ter verduidelijking een stukje code bij opdrachtknop "naar boekingen" in het form. "Menu"

Private Sub Cmd_naar_boekingen_Click()
DoCmd.OpenForm "Prijzen", acNormal, "", "", , acNormal
DoCmd.Echo False
Dim LResponse, ACSIpr, kampeerplaatspr As Integer

If IsNull(ACSIpr) Then
LResponse = MsgBox("Vul a.u.b. eerst de ACSI prijs in.", , "Belangrijke controle!")
DoCmd.GoToControl "ACSIpr"
ElseIf IsNull(kampeerplaatspr) Then
LResponse = MsgBox("Vul a.u.b. eerst de prijs voor de standplaats in.", , "Belangrijke controle!")
DoCmd.GoToControl "kampeerplaatspr"

'en zo verder..
Else
DoCmd.Close
DoCmd.OpenForm "Boekingen", acNormal, "", "", , acNormal

End If
DoCmd.Echo True
End Sub

Bij deze code wordt direct het form "Boekingen"geopend. De code lijkt de voorwaarden niet te zien.

Wie kan mij hiermee helpen?

met vr. groet,

Joop Manussen
 
Joop,

Dit is lastig zonder voorbeeld maar je zou even moeten kijken naar de IsNull() formule.
Deze is alleen waar als er echt niets staat in de variabel (ACSIpr, kampeerplaatsnr).
Als dit bijvoorbeeld nummers zijn zal er standaard het cijfer 0 in staan en dan is de formule IsNull() false,
ondanks dat je nog niets hebt ingevuld, probeer eens
Code:
If ACSIpr = 0 Then

Veel Succes.
 
Goedemiddag Elsendoorn2134,

Heb je suggestie gelezen, waarvoor dank.
Het is echter niet de oplossing voor het probleem. Ook niet als je If IsNull(ACSIpr) vervangt door If "ACSIpr"= "" Then
Jammer.

Je vroeg verder om wat meer duidelijkheid. Dat is mogelijk. Ik heb een kleine, simpele Database in Access gemaakt, waarin het probleem zich voordoet.
Ik weet alleen niet hoe ik jou dat, en evt. anderen, kan laten zien.

groet,

Joop
 
Om te beginnen: je gebruikt regels met meerdere variabelen waarvan je alleen de laatste een type geeft. Vermoedelijk verkeer je in de (verkeerde) veronderstelling dat alle variabelen in dezelfde regel hetzelfde type krijgen. Dat is dus niet zo: je moet elke variabele zijn eigen type geven om hem goed te kunnen gebruiken.
Verder vind ik je opzet erg vreemd, en om dat met zekerheid te kunnen zeggen, moeten we de db erbij hebben. Die kun je comprimeren en daarna zippen, want het forum accepteert geen database extensies. Maar dus wel zip of rar.
 
Hallo OctaFish,

Heb je opmerking over het declareren van verscheidene variabelen begrepen en zal er in het vervolg rekening mee houden.
Heb verder je voorstel opgevolgd door de database te comprimeren en daarna te zippen. Daarna via (+Reageer op bericht) geprobeerd via "beheer bijlagen"
de database te uploaden. Dit werd geweigerd vanwege de overschrijding van de toegestane maximale bestandsgrootte (100 kb). Ik zit er nog ver boven, ook na splitsing van de database in delen.

Wat te doen?

Met vr. groet,

Joop Manussen
 
Je kunt met Winrar deelbestanden van 100kb maken, als de gecomprimeerde versie niet heel veel te groot is. Verder houdt een grote db doorgaans in dat er veel records in zitten, en meestal is dat voor het vinden van een oplossing niet nodig. Als dat zo is, kun je dus een hoop records weggooien. Meestal volstaat een aantal van 20-30 records wel voor de oplossing.
Wel daarna dus weer comprimeren, anders zul je merken dat de db nog net zo groot is.
Laatste (en makkelijkste) oplossing: zet de db op een fileshare als Wikisend.com. Dan hoef je hem ook niet te zippen.
 
Fijn, dat je nog steeds mee wil denken.

Ik ga de laatst aangedragen optie proberen. Zal dat zo snel mogelijk doen, heb echter vandaag niet de tijd daarvoor.
Kende de mogelijkheid trouwens niet.

Groet,
Joop
 
Zal er vanavond even naar kijken. Ben nu aan het klussen :).
 
Ik neem aan dat de twee linkjes hetzelfde zijn? Dat wordt dan alsnog weer vanavond.
 
Klopt.
Alleen is aan de laatste een verbetering aangebracht.
Ik ben benieuwd.
 
En nu mag je nog even uitleggen wat precies de bedoeling is, want ik snap er eerlijk gezegd niet zoveel van. Om te beginnen zie ik nog de verkeerde declaraties in je voorbeeldje staan, maar daar gaat het niet echt om. Wel zie ik dat je op de knop <Boeking> klikt, en het formulier <Prijzen> opent. En dat vind ik vreemd. Want dat hoeft toch alleen geopend te worden als niet alle prijzen zijn ingevuld? Dus waarom niet een check gedaan met een recordset op basis van de prijzentabel, en als een veld niet is ingevuld het formulier geopend?
 
In de huidige db moet ik eerst naar het formulier Prijzen, daarna via een knop naar het formulier Boekingen.
Uit het geopende formulier Prijzen kan ik niet eerder naar het formulier Boekingen gaan, als niet alle prijzen zijn ingevuld. ( Dat functioneert.)

Het gaat mij nu erom, deze extra stap over te slaan, als die niet nodig is. Dus ik wil vanuit het "Menu" via de knop "naar boekingen" direct naar het formulier Boekingen wanneer in het formulier Prijzen alle prijzen al zijn ingevuld.
Is dit niet het geval, dan moet een druk op de knop "naar boekingen" resulteren in een waarschuwingsbericht en moet het formulier prijzen worden geopend bij de eerste prijs die nog niet is ingevuld.
(Dit om te voorkomen dat straks een boeking wordt gedaan zonder een juiste prijsberekening.)

In de opgestuurde voorbeelddatabase heb ik al iets in die richting geprobeerd, maar het lukt me dus niet.
 
En dat zeg ik dus: waarom niet eerst via een Recordset controleren of alle prijzen zijn ingevuld? Ik zou niet eerst naar het formulier prijzen gaan, maar gelijk het formulier Boekingen openen. En daar doe je dan de check of de prijzen wel zijn ingevuld of niet.
 
Hallo OctaFish,

Wat ik heb geprobeerd:

1. Open formulier Boekingen (via knop)
2. a Controleer daar of alle prijzen zijn ingevuld m.b.v. de If isNull -conditie.
( de prijzen op het rechtergedeelte in het formulier Boekingen worden automatisch uit de Tblprices gehaald via de DLookUp-functie)
b Is dit niet het geval, dan moet na een waarschuwing formulier Prijzen worden geopend.

De code heeft echter niet het bedoelde resultaat. Ondanks niet-ingevulde prijzen wordt formulier Boekingen geopend.

Wat doe ik (nog steeds) niet goed?

Ter verduidelijking voeg ik de link naar de nieuwe testdb toe.: http://wikisend.com/download/940900/wikisend test db2.accdb

Met vr. groet,
Joop
 
Ik heb 'm voor je verbouwd (heb er geen ander woord voor) en al de (door mij gehate) DLookups er uit gegooid en vervangen door een constructie die ongeveer 600 keer sneller is. Nou ja, het gaat zo snel: het is niet meer te meten. In tegenstelling tot jouw formulier die nogal wat moeite heeft met al die DLookups. Hij staat hier. Daarnaast is uiteraard de check nu goed.
 
Dank voor je snelle antwoord.

Ik waardeer het erg, dat je me in deze kwestie geholpen hebt.

Ik denk, dat het probleem is opgelost, maar ga de toegepaste code eerst rustig bekijken en proberen te begrijpen. Voor mij geen alledaagse kost. Maar men is nooit te oud om te leren, nietwaar?

Nogmaals dank.

met vr. groet,

Joop Manussen
 
Ik zie het wel als je meer uitleg nodig hebt :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan