Keuzevakjes automatisch te laten veranderen als je een bepaalde keuze maakt

Status
Niet open voor verdere reacties.
Voila, dat is het...
heb het hier al tientallen keer geprobeerd...
Heel concreet:
Kies in nieuw project voor jaar = 2 en afdeling =GKM
Je ziet dat voor item 4 er geenenkel keuzevakje aangevinkt is.
Ik vink 4.1.1 aan en 4.1 en 4 worden ook aangevinkt.... perfect
doe nu het volgende
Ik vink 4.1.1 uit (is enige item dat aangevinkt was, dus alle items zijn niet aangevinkt) dus moeten 4.1 en 4 ook uit, en dat gebeurt niet....
dus, denk ik, foutje...
Ook in "primaire competenties bepalen" krijg ik een fout....
Sorry hoor, vind het zo sneu voor al je werk!!!
JP:o
 
Als dit de situatie is, dan is dat op te lossen. Sterker nog: die heb ik als zodanig opgelost. Maar ik moet natuurlijk eerst weten of je dit zoekt

Niks sneu dus, want blijkbaar wil je deze oplossing hebben... Overigens vind ik er niet zo veel logica in zitten..
Ik vink 4.1.1 uit (is enige item dat aangevinkt was, dus alle items zijn niet aangevinkt) dus moeten 4.1 en 4 ook uit, en dat gebeurt niet....
Ik zou zeggen, dat een keuze op het tweede niveau een zelfstandige keuze is, die dus zou moeten blijven staan. Maar je kent je eigen systeem uiteraard beter als ik ;)

De oplossing ligt dus in het creëren van een selectiequery die eerst controleert hoeveel records er in de 'boom' zitten. Heb je bijvoorbeeld 4.1.1 en 4.1.2 geselecteerd, dan bestaat de boom uit 4 records: 4, 4.1, 4.1.1 en 4.1.2 Bij het uitzetten van ofwel 4.1.2 of 4.1.1 blijft er één boomtak over. De vinkjes moeten dus aan blijven. Zet je het laatste vinkje uit (4.1.2 bijvoorbeeld) dan blijven er dus nog 3 records in de selectie: 4, 4.1 en 4.1.1 De truc is dus: als er 3 records in de selectie zitten, dan moeten alle vakjes worden uitgezet. Zitten er meer, dan moet de boom intact blijven.

Nu is de vraag: kun je dit zelf :)
 
eigenllijk zou het zo moeten zijn dat de gebruiker nooit de keuze maakt van een item met 1 of 2 cijfers maar altijd deze van 3 of meer....
Dus ze kiezen 4.1.1 en de hogere items gaan aan of uit naargelang....
sorry, maar NO WAY dat ik dit voor mekaar krijg....
JP
 
Dan help ik je maar even uit de brand ;)

Code:
Private Sub keuze_AfterUpdate()
Dim tmp As String, sF As String
Dim iKlas As Integer, sKlas As String
Dim i As Integer
Dim sq As Variant
Dim strSQL As String
Dim bCheck As Boolean
strSQL = ""
sF = ""
iKlas = Me.Parent!Combo_jaar.Value
sKlas = "AND klas" & iKlas & "=" & iKlas
sKlas = sKlas & " AND Afdeling='" & Me.Parent!keuze_afdeling.Value & "'"
DoCmd.SetWarnings False
If Me.Dirty Then Me.Dirty = False
Select Case Me.keuze
    Case -1
        If InStr(1, Me.code, ".") > 0 Then
            sq = Split(Me.code, ".")
            strSQL = "SELECT keuze, code from [BGV Competenties] "
            strSQL = "UPDATE [BGV Competenties] SET keuze = -1 "
            If IsNumeric(LBound(sq)) Then
                strSQL = strSQL & "WHERE ("
                For i = 0 To UBound(sq) - 1
                    sF = sF & sq(i)
                    strSQL = strSQL & "Code='" & sF & "'"
                    If i < UBound(sq) - 1 Then
                        sF = sF & "."
                        strSQL = strSQL & " OR "
                    End If
                Next i
                strSQL = strSQL & ") " & sKlas
            DoCmd.RunSQL strSQL
            If Me.Dirty Then Me.Dirty = False
            Me.Form.Requery
            Me.Form.Repaint
            End If
        End If
    Case 0
        sq = Split(Me.code, ".")
        If InStr(1, Me.code, ".") > 0 Then
            If IsNumeric(LBound(sq)) Then bCheck = True
        Else
            If IsNumeric(Me.code) Then bCheck = True
        End If
        If bCheck = True Then
            strSQL = "SELECT Code, Keuze FROM [BGV Competenties] "
            strSQL = strSQL & "WHERE ((code='" & sq(LBound(sq)) & "' OR code LIKE '" & sq(LBound(sq)) & ".*') " _
                & sKlas & " AND Keuze=-1)"
            With CurrentDb.OpenRecordset(strSQL)
                If Not .EOF Then
                    .MoveLast
                    .MoveFirst
                End If
                If .RecordCount = UBound(sq) Then
                    strSQL = "UPDATE [BGV Competenties] SET keuze = 0 "
                    strSQL = strSQL & "WHERE ((code='" & sq(LBound(sq)) & "' OR code LIKE '" & sq(LBound(sq)) & ".*') " & sKlas & ")"
                Else
                    strSQL = "UPDATE [BGV Competenties] SET keuze = 0 "
                    strSQL = strSQL & "WHERE ((code='" & Me.code & "' Or code Like '" & Me.code & ".*') " & sKlas & ")"
                End If
                .Close
            End With
            DoCmd.RunSQL strSQL
            If Me.Dirty Then Me.Dirty = False
            Me.Form.Requery
            Me.Form.Repaint
        End If
    Case Else
End Select
DoCmd.SetWarnings True
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan