Checkbox true op basis van waarde in tabel.

Status
Niet open voor verdere reacties.

rudy65

Nieuwe gebruiker
Lid geworden
23 okt 2022
Berichten
4
Geacht forum,

Bij het on load event van een formulier wil ik graag in een tabel (niet gerelateerd) de waarde van een checkbox opzoeken.
Als deze checkbox -1 is, dan wil ik de checkbox van dezelfde naam in het te openen formulier ook op -1 zetten.

Het form betreft een checklist met meer dan 250 checkboxes.
Het is dus niet mogelijk om deze in een query te proppen en als gegevensbron te gebruiken.

Kunt u mij verder helpen?

Vriendelijke groet,

Ruud.

Code:
Dim rs As Recordset, db As Database
Set db = CurrentDb


    For i = 1 To 10
        Set rs = db.OpenRecordset("Check50", dbOpenDynaset)
        rs.FindFirst "ID=" & Me.AdresID
        If rs.Fields("P" & i = -1) Then
'Hier loop ik vast. Misschien al eerder.
            
        End If
    Next i
 
Misschien dat een voorbeeld database helpt. Mij is in ieder geval niet duidelijk wat precies de bedoeling is. Met name waar de 10 vandaan komt en waar de 250 om de hoek zou moeten komen te kijken.
 
Hier nog iemand die er niets van snapt. Dat begint al hier:
Bij het on load event van een formulier wil ik graag in een tabel (niet gerelateerd) de waarde van een checkbox opzoeken.
Access slaat geen waarden op in checkboxen, maar in velden in een tabel. Dat veld kan een Boolean veld zijn, met de waarden True/False (of, zoals jij het ziet, -1 en 0) maar daar houdt de vergelijking wel zo'n beetje op. En als ik daarna je code bekijk, gaat het niet om één çheckbox', maar 10. Waar je met een enigszins onhandige loop doorheen loopt (waarom i=1 tot 10, als je velden Po - P9 heten? Dan kan je toch gelijk For i = 0 To 9 doen?)

En een formulier met 250 selectievakjes? Je leest er nu maar 10 in, wat moet er met de andere 240 gebeuren? Als ik in mijn glazen bol kijk, dan vermoed ik dat je voor 25 adressen elk 10 selectievakjes hebt, en dat je in de tabel Check50 voor élk adres een waarde hebt, dus per adres 10 velden Po - P9. En dat je dus een niet-afhankelijk formulier op die manier probeert te vullen met alle 250 selectiewaarden. Dus je hebt dan, als ik goed reken, 25 records gevuld met 25 x 10 velden, is 250 selectievelden.

Maar vooralsnog dus een complete gok...
 
Meer uitleg

Dank voor jullie reactie,

@Octafish: Het is prettig om te weten dat we er nu allebei niets (meer) van snappen ;-)
Ik probeer het uit te leggen.
de "1 to 10" vraag: Er zijn in het totaal 293 checkboxes. Bij het testen echter, zijn 10 voldoende.

Bij het plaatsen van mijn initiële bericht heb ik geprobeerd zakelijk en duidelijk te zijn.
Het lijkt erop dat, in elk geval het laatste, niet is gelukt.
Nog een meer uitgebreide poging dan maar.
Ik heb 293 wetsteksten in een tabel gepropt, compleet met bijbehorende 293 vragen.
Met het aanvinken van een checkbox onder een vraag, wordt er feitelijk met "nee" geantwoord.
Bij "nee" wordt dus de wetstekst en andere data uit de tabel omhoog gehaald en voor mijn doelen gebruikt.

In een tabel kunnen niet meer dan 250 velden bestaan.
Niet erg, ik heb de overige in een aparte tabel gezet voor toekomstige referentie.
De 'ongebonden' checkbox staat wel in hetzelfde formulier, maar ik laat de 'waarde' (sorry) true/false schrijven naar de aparte tabel ("Check50").
Als het formulier laadt wil ik die waarde één keer opzoeken om - bijvoorbeeld - labels bij de corresponderende checkbox te kleuren.
Hier komt de simpele loop om de hoek kijken.

De code voor de waardes in Check50 is de volgende:
Code:
    For Each ctl In Me.Controls 'Alleen inventarisatie
        For i = 1 To 157
            If TypeName(ctl) = "Checkbox" Then
                If ctl.Name = "P" & i Then
                    With ctl.Controls(0)
                        If ctl Then
                            Set rs = db.OpenRecordset("A_Check50", dbOpenDynaset)
                            rs.FindFirst "AdresID=" & Me.AdresID
                            rs.Edit
                            rs.Fields("P" & i) = True
                            rs.Update
                        Else
                            Set rs = db.OpenRecordset("A_Check50", dbOpenDynaset)
                            rs.FindFirst "AdresID=" & Me.AdresID
                            rs.Edit
                            rs.Fields("P" & i) = False
                            rs.Update
                        End If
                    End With
                End If
            End If
        Next i
    Next ctl

Mijn vraag:
Hoe refereer ik nu aan de checkboxes in de tabel zodat de corresponderende checkbox true wordt gezet bij het laden van het formulier.
En dat in een loop
voor alle checkboxes in die tabel.

Vriendelijke groet,
Ruud.
 
Als je denkt dat het nu duidelijker is, dan vergis je je helaas. Althans: voor mij. Ik snap er zelfs nog minder van dan de vorige post. Om te beginnen: het idee om twee tabellen te gebruiken voor één entiteit (wetteksten?) is natuurlijk ridicuul. Ik heb geen idee waarom je denkt dat je in een tabel maar één record mag maken, en dat dat ene record dan maar 250 velden mag hebben (feitelijk is de limiet 255). Da wil bij mij niet aanslaan. I.p.v. 250 (identieke) velden in twee identieke tabellen, kun je uiteraard volstaan met één tabel met een stuk of 4-5 velden, afhankelijk van wat je nu eigenlijk op wilt slaan van één wettekst, met een uniek volgnummer. Dan kun je in één tabel al je teksten kwijt, op een overzichtelijke manier, en die kun je dan ook op een nog veel simpelere manier weer opvragen en koppelen aan je selectievakjes.

Het idee dat je door een selectievakje te activeren een antwoord "Nee" kiest, terwijl de hele wereld weet dat als je een selectievakje aanklikt, je eigenlijk op "Ja" klikt, is nog zo'n ding :).

Daarnaast snap ik dus ook nog minder van de tabel Check50. En dan heb ik het nog niet eens gehad over je procedure, die er in mijn optiek nogal overdadig ingewikkeld (en traag) uitziet. Dat zou toch allemaal veel beter, korter, sneller en handiger moeten kunnen. Ik denk dat het tijd word voor een voorbeeldbestandje, want op deze manier zijn we volgende week nog steeds bezig met glazen bollen :).
 
Octafish, dank voor je reactie.
Ik merk dat we finaal langs elkaar heen 'praten'.
Vooral omdat ik kennelijk niet in staat ben voldoende uit te leggen waar het om draait.
Een voorbeeldbestand is lastig om te maken. Mijn 'probleem' is onderdeel van een groter geheel en wordt onvoldoende duidelijk als ik het bestand beperk tot alleen dat deel.

Misschien is het mijn enigszins non-conformistische karakter, maar ik zou toch graag zelf uitmaken hoe ik een vinkje laat interpreteren ;-)
Je smiley aan het eind verzacht toch weer een hoop.

Kun je aangeven waarom het laatste stukje code ingewikkeld en traag zou zijn.
Misschien een voorbeeld hoe het wel zou moeten?
 
Ik merk dat we finaal langs elkaar heen 'praten'.

Ik denk dat het probleem is dat je de kern van de kritiek mist c.q. negeert. Het ontwerp van je tabel(len) is ondeugdelijk en zolang je dat niet aanpakt, blijft het dweilen met de kraan open.
 
Dank hiervoor.
Zoals ik al schreef denken we al langs elkaar.
Er is niets mis met het ontwerp van mijn tabel(len). Die notie is een aanname van jullie, voornamelijk uit het antwoord van octafish.

Hoe dan ook, we komen niet verder.
Heel veel dank, ik ben wijzer geworden.
Niet voor waar het mijn probleem aangaat, maar toch.
 
Een voorbeeldbestand is lastig om te maken. Mijn 'probleem' is onderdeel van een groter geheel en wordt onvoldoende duidelijk als ik het bestand beperk tot alleen dat deel.

Het gaat er om dat we het probleem kunnen naspelen, als we een oplossing hebben voor 10 vakjes dan doet-ie het ook voor 300. Het is aan jou om het representatief genoeg te maken :).

Misschien is het mijn enigszins non-conformistische karakter, maar ik zou toch graag zelf uitmaken hoe ik een vinkje laat interpreteren ;-)
Tja, zo lust ik er ook nog wel een paar. Ik hoop voor ons dat je nooit bij de verkeersdienst gaat werken en op eigen houtje besluit om de kleuren van de verkeerslichten om te gooien, omdat jouw non-conformistische karakter dat mooier vindt. :d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan