hulp gezocht met formulier maken

Status
Niet open voor verdere reacties.
Hoe kan ik een voorbeeld DB plaatsen ?
Je kunt een db het beste eerst comprimeren, en dan in een zip bestand zetten. Meestal is hij dan klein genoeg om te uploaden. Of eventueel met WinRar opslaan in deelbestanden van 100kb of 200kb. Laatste optie: zet 'm op een fileshare als Wikisend.com. Dan hoef je 'm verder ook niet in te pakken.
Antwoord op bericht #20:
De code die je daarin hebt gezet is niet de telfunctie. Die zul je aan moeten passen. Daarbij kun je volgens mij nooit op 20 uitkomen als uitkomst, want je hebt maar 3 objecten die je wilt controleren. Dus hoe kom je aan 20 als uitkomst?
 
En ja geloof graag dat de code aangepast moet worden maar ik weet niet hoe en kan er nog niks over vinden :S

Heb zoiets wel al gezien maar kan het niet terug vinden:D
 
Laatst bewerkt:
voorbeeld DB

voorbeeld gemaakt van DB met alleen datgene wat ik wil bereiken
 

Bijlagen

Als ik het goed begrijp wil je nu dus dat de velden [plaats], [lokatie], [gebied] en [aantal] verplicht moeten worden ingevuld, en slechts één van de opties [zone1], [zone2] of [zone3]? Waarom heb je überhaupt 3 velden voor die zones? Dat is slecht genormaliseerd. En waarom zou je zone1 en zone2 leeg mogen laten en gelijk zone3 invullen? Of zone1 en zone3 leeg en zone2 gevuld? Ik zie daar geen enkele logica in. Mij lijkt het dat je bij één zone die altijd in zone1 zou moeten willen hebben, is er een tweede zone dan zone2 gebruiken en pas bij 3 in te vullen zones zone3. Maar veel beter is het om deze hele constructie te verwijderen, en een koppeltabel te gebruiken.
 
zone 1 zone2 zone3 zijn hier als voorbeeld gesteld dit worden in de echte DB andere velden en komen ook uit andere tabellen maar je hebt het juist begrepen ik zoek hier dus de oplossing voor
 
Waar zoek je de oplossing voor? Het normaliseren van een tabel door het maken van een koppeltabel, of het probleem dat ik heb geschetst, en dat je een aantal velden verplicht wilt stellen, en een aantal velden facultatief waarvan er één verplicht is?
Het helpt bij een vraag nooit als je een db meestuurt die niet overeenkomt met je feitelijke bedoeling. Jíj mag dan wel weten wat uiteindelijk de bedoeling is, wij moeten ons baseren op de informatie die we van jou krijgen. EN als die niet comform de realiteit is, dan wordt het geven van zinvolle antwoorden nodeloos veel ingewikkelder. En dat kost jou extra tijd (wat mij eerlijk gezegd niet heel veel kan schelen ;) ) maar ons als helpers ook. En dat laatste vind ik dus behoorlijk zonde, want we willen graag helpen maar dan wel op basis van correcte informatie.
 
Nou ik had even een DB in elkaar gezet om mijn helpers het net makkelijker te maken en er een oplossing voor te vinden zonder alle overbodige dingen.
dat je een aantal velden verplicht wilt stellen, en een aantal velden facultatief waarvan er één verplicht is? daar zou ik graag de oplossing voor willen.
Dus zoals eerder omschreven alle velden verplicht behalve die drie daar mag er maar een van ingevuld worden.

Je wist toch zoiets met teller ....

Dacht als ik nu een teller heb die velden telt kan ik in het If checkvelden = "teller" Then cmdsluiten.Enabled = True de uitkomst zetten. dus teveel velden ingevuld te hoge waarde en indien waarde goed afsluiten

OctaFish klopt het dat jij zoiets al eens geplaatst hebt ergens op dit forum? Meen het gezien te hebben weet alleen niet meer waar :(
 
Laatst bewerkt:
Omdat je zo'n uitgebreide check hebt (velden die wel of niet ingevuld moeten zijn in verschillende combinaties, moet je op een redelijk ingewikkelde manier checken. Deze functie zou dat moeten doen:
Code:
Function CheckVelden()
Dim iTel1 As Integer, iTel2 As Integer
Dim msg As String

    msg = "Je moet de volgende aanpassingen maken in je formuliergegevens:" & vbCrLf & vbCrLf
    If Me.plaats = vbNullString Then
        iTel1 = iTel1 + 1
    End If
    If Me.lokatie & "" = "" Then
        iTel1 = iTel1 + 2
    End If
    If Me.gebied & "" = "" Then
        iTel1 = iTel1 + 4
    End If
    If Not Me.zone1 = vbNullString Then iTel2 = iTel2 + 1
    If Not Me.zone2 = vbNullString Then iTel2 = iTel2 + 2
    If Not Me.zone3 = vbNullString Then iTel2 = iTel2 + 4
    
    Select Case iTel1
        Case 1
            msg = msg & "Het veld [Plaats] is niet ingevuld." & vbCrLf
        Case 2
            msg = msg & "Het veld [Lokatie] is niet ingevuld." & vbCrLf
        Case 3
            msg = msg & "De velden [Plaats] en [Lokatie] zijn niet ingevuld." & vbCrLf
        Case 4
            msg = msg & "Het veld [Gebied] is niet ingevuld." & vbCrLf
        Case 5
            msg = msg & "De velden [Plaats] en [Gebied] zijn niet ingevuld." & vbCrLf
        Case 6
            msg = msg & "De velden [Lokatie] en [Gebied] zijn niet ingevuld." & vbCrLf
        Case 7
            msg = msg & "De velden [Plaats], [Lokatie] en [Gebied] zijn niet ingevuld." & vbCrLf
    End Select
    
    Select Case iTel2
        Case 3
            msg = msg & "Je hebt de velden [Zone1] en [Zone2] ingevuld. Je mag maar één zone invullen." & vbCrLf
        Case 5
            msg = msg & "Je hebt de velden [Zone1] en [Zone3] ingevuld. Je mag maar één zone invullen." & vbCrLf
        Case 6
            msg = msg & "Je hebt de velden [Zone2] en [Zone3] ingevuld. Je mag maar één zone invullen." & vbCrLf
        Case 7
            msg = msg & "Je hebt alle Zone velden ingevuld. Je mag maar één zone invullen." & vbCrLf
    End Select
 
    If msg <> "Je moet de volgende aanpassingen maken in je formuliergegevens:" & vbCrLf & vbCrLf Then
        MsgBox msg
        Me.cmdsluiten.Enabled = False
    Else
        Me.cmdsluiten.Enabled = True
    End If

End Function
Die roep je dan vanaf elk veld dat gecontroleerd moet worden aan:

Code:
Private Sub plaats_AfterUpdate()
    CheckVelden
End Sub

Code:
Private Sub zone1_AfterUpdate()
    CheckVelden
End Sub

etc.
 
Gloeiende Octafish dat wordt even puzzelen voor me maar ga in elk geval kijken of ik er wijs uit kan worden en er is een reden dat ik mijn DB niet online zet er zit gevoelige informatie in.
Maar als ik deze prive zou kunnen sturen had ik het wel gedaan .....Super alvast bedankt ik ga sleutelen


Lijkt wel goochelen wat daar staat :P
 
Octafish superrrrrrrrrrrrrrrrrr het werkte in de voorbeeld DB :thumb: :thumb: nu even kijken hoe ik deze in mijn eigen DB verwerkt krijg zal me wat worden :P :shocked:
 
Je mag de db wel naar mij mailen, als je dat wilt.
 
Nog even een korte uitleg: op het moment dat je verschillende tekstvakken/keuzelijsten wilt controleren, en de volgorde niet is bepaald, moet je een manier zoeken om de combinaties van de verschillende mogelijkheden uniek te maken. Die truc is er: zorg ervoor dat de optelsom van de verschillende checks altijd uniek is. Daarom gebruik ik een teller waarbij elke controle een getal toevoegt dat het dubbele is van de vorige. Tel je elke combinatie op, dan komt daar altijd een uniek getal uit. Op basis van dat getal weet je dus ook altijd hoe dat getal is samengesteld. Zo kan het getal 7 alleen uit de combinatie van 1+2+4 worden gemaakt. Dus weet je dat alle velden daarachter zijn ingevuld. Wil je meer velden controleren, dan moet je dus nieuwe regels toevoegen en dan de waarden ook weer verdubbelen. Dus de eerstvolgende check telt 8 op, en de daaropvolgende 16. En zo verder.
 
Probeer eruit te komen en als het niet lukt stuur ik de DB wel prive kan dat hier??
 
Ja hoor, je kunt mij een privébericht sturen met de db (of een link naar waar je hem neerzet).
 
Ben geen lid hier dus dat gaat niet lukken maar snap wel de opbouw van de code nu een beetje :D Mss kun jij mij even een pb sturen dat ik daarna wellicht iets terug kan sturen.
Toppie in elk geval dat het werkt ...kreeg een steeds dikker hoofd van het denken :P
 
Prive bericht gaat niet mss kun je me een ander mailadres sturen dan lukt het vast wel :)
 
Had nog een vraag waarom gebruik je in het eerste gedeelte vbnullstring en in tweede & "" = "" is daar een reden voor??

If Me.speerpunt = vbNullString Then
iTel1 = iTel1 + 1
End If
If Me.datum_controle & "" = "" Then
iTel1 = iTel1 + 2
 
Tekstvakken kunnen verschillende eigenschappen hebben, zoals wel of geen nullwaarde. Meestal gebruik ik vbNullstring om variabelen te checken. Maar bij tekstvelden werkt dat eigenlijk niet, en dan ziet de procedure een leeg veld tóch niet als leeg. Daarom heb ik alle (Alle? Nee, één check hield dapper stand) checks vervangen door de controle ="". Behalve dus plaats :). Die moet je nog veranderen naar:
Code:
    If Me.plaats & "" = "" Then
 
Mag je 'm mailen.
 
Laatst bewerkt:
Ik heb je db even snel bekeken (werk gaat toch voor gek genoeg ;) ) en een paar vreemde zaken geconstateerd. Eigenlijk iets wat ik al vanaf het stellen van de vraag vermoedde: een probleem met je normalisering. Het feit namelijk dat een gebruiker op een formulier maar één veld mag invullen van 3 beschikbare velden, duidt er op dat er minstens 2 velden teveel op je formulier staan. En dus ook in je tabel. En die conclusie kan ik nu alleen maar onderschrijven. De velden [Speedzonenummer], [lokatie/geen speedzone] (erg ongelukkig dat er een '/' in de veldnaam zit) en [roodlicht lokatie] horen m.i. in één tabel thuis, waar je dan één tabel onder hangt met daarin een algemene veldnaam, extra indicator (Gemeente bijvoorbeeld) en soort. In dit laatste veld geef je dan aan welk soort lokatie het is. Dat is dan een keuzelijst met waarden op basis van de 3 tabelnamen die je nu gebruikt.

En nu ik het toch over keuzelijsten heb: ik zou in de tabel [wish] alle keuzelijsten weggooien. Als je mijn berichten een beetje volgt, dan weet je dat ik een gruwelijke hekel heb aan keuzelijsten in tabellen als die zijn gebaseerd op tabellen. En daar heb je er nogal wat van! Heel vervelend, want nu weet je nooit wat er feitelijk is opgeslagen in de tabel. Je ziet alleen een alias namelijk. En ik vind dus dat je in een tabel altijd moet kunnen zien wat er is opgeslagen. Net zoals je een verbalisant ook vraagt om zijn masker af te zetten :).

Terug naar de normalisatie van je tabel: velden als [P/A beginnend (0-95 ugl)], [A beginnend (95-350 ugl)] en [F Beginnend (>350 ugl)] duiden er ook op dat hier eigenlijk maar één optie gekozen/ingevuld mag worden, en ook hier heb je dus een slechte normalisatie, want ook nu heb je aan één veld (met een keuzelijst met meetopties) genoeg.
Dus dat zou ik zeker allemaal eerst veranderen. Je zult zien, dat je dan gelijk die check nauwelijks meer nodig hebt.

Overigens kun je, als je één tabel met lokaties hebt, die lijst best filteren met een groepsvak. Die bevat dan de opties waarvan je er nu maar één mag invullen. Je kiest dus eerst [Speedzonenummer], [lokatie/geen speedzone] of [roodlicht lokatie] in het groepsvak, en ziet dan in de keuzelijst de betreffende records staan. Zo zou ik het althans doen.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan