Checkbox Value aanpassen

Status
Niet open voor verdere reacties.

Mooijman

Gebruiker
Lid geworden
9 nov 2008
Berichten
6
Hallo allemaal,

Bij mijn vorige vraag werd ik hier goed geholpen dus dacht zet mijn volgende vraag ook hier neer, je weet maar nooit! :)

De situatie is als volgt:

Ik heb een table genaamd tblChauffeurs waar ik de chauffeurs in heb staan die bij ons in dienst zijn. Ook zit er een field in genaamd Uitdienst.
Uitdienst is een Checkbox die aangevinkt moet worden als de chauffeur uit dienst is, op deze manier wordt word de chauffeur niet meegenomen in een query die ik gebruik in een ander gedeelte van de applicatie.

Nu is mijn vraag hoe kan ik door middel van een knop de bestaande recordbox update in de tblChauffeurs?

- cbhUitdienst is een hidden checkbox op de form die gekoppeld is aan besturingselementbron Uitdienst.
- De form heeft als recordbron tblChauffeurs
- cboGebruiker heeft als recordbron qryUitdienst

- Update tblChauffeurs
Set Me.chbUitdienst = True
where [Voornaam] & [Achternaam] = Me.cboChauffeur

- Update tblChauffeurs
Set Me.chbUitdienst = True
where [Voornaam] & [Achternaam] = Me.cboChauffeur


Ik wil dit event achter de knop btnUitdienst hebben.

Ik heb de volgende opties al geprobeerd:

Me.chbUitdienst.value = 0
Me.chbUitdienst.value = -1
Me.chbUitdienst.value = False

Code:
Option Compare Database
Option Explicit


'Bij het laden van het formulier 'frmRijstijl_Beoordeling' wordt de volgende sub routine uitgevoerd.
Private Sub Form_Load()

'Bij een onverwachte fout ga dan naar de volgende opdracht.
On Error Resume Next

'Maak het formulier 'frmOpstart' onzichtbaar.
    Forms("frmOpstart").Visible = False
    
    'Defini�ring van de variabele voor het formulier icoon.
    Dim strFormIcon As String

    'Initialisatie van de variabele.
    strFormIcon = "Beoordeling.ico"

    'Plaats het icoon op het formulier 'Uit dienst'.
    SetFormIcon Me.hWnd, Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Dir(CurrentDb.Name))) & "\" & strFormIcon

'Einde subroutine
End Sub

'Bij het klikken op de knop 'Uit dienst' wordt de volgende subroutine uitgevoerd.
Private Sub btnUitdienst_Click()
'Bij een onverwachte fout ga dan naar Err_btnUitdienst_Click.
On Error GoTo Err_btnUitdienst_Click

    'Eerst verschijnt er een MessageBox met de vraag of de chauffeur echt uit diens gemeld moet worden.
    'Indien op 'Ja' geklikt wordt, wordt de chauffeur uit dienst gemeld in 'tblUitdienst'.
    'Indien op 'Nee' geklikt wordt, wordt de subroutine be�indigd.
    
    
    'Defini�ring van de variabelen voor de MessageBox.
    Dim bericht, Stijl, Titel, Help, Ctxt, Antwoord, MijnString

    'Initialisatie van de variabelen.
    bericht = "Wilt de Chauffeur echt uit dienst melden?" & vbCrLf & "Klik dan op Ja." & vbCrLf & vbCrLf & _
        "Indien je per vergissing op deze knop hebt gedrukt," & vbCrLf & "of de chauffeur niet uit dienst wenst te melden." & _
        vbCrLf & "Klik dan op Nee."
    Stijl = vbYesNo + vbCritical + vbDefaultButton2
    Titel = "Chauffeur uit dienst melden"
    Help = "DEMO.HLP"
    Ctxt = 1000
    
     'De MessageBox wordt in de variabele 'Antwoord' geplaatst.
    Antwoord = MsgBox(bericht, Stijl, Titel)
    
    'Als op 'Ja' gedrukt wordt, wordt het nieuwe cijfer aangemaakt.
    If Antwoord = vbYes Then
        
        MijnString = "Ja"
        
        'Overrule de instelling dat geen toevoegingen worden toegestaan en sta deze nu tijdelijk toe.
        Me.AllowAdditions = True
        
        'Maak de nodige velden beschikbaar.
        Me.cboChauffeur.Enabled = True
        Me.cboChauffeur.Locked = False
        
        'Zet de focus op de keuzelijst 'Opslaan' om direct de gegevens te kunnen invoeren.
        Me.cboChauffeur.SetFocus

        'Verberg de knop 'Uit dienst melden'.
        Me.btnUitdienst.Visible = False
        
        'Maak de knop 'Opslaan' zichtbaar
        Me.btnUitdienstopslaan.Visible = True
        
        'Als op 'Nee' gedrukt wordt, wordt de sub routine afgebroken.
        Else
        
        MijnString = "Nee"
        
        Exit Sub
    
        End If
   
'Verwijder de focus op de knop 'Cijfer Toevoegen' en verlaat de sub routine.
Exit_btnUitdienst_Click:
    Exit Sub

'Bij een onverwachte fout, geef dan een foutboodschap weer met de foutmelding als omschrijving en verlaat de sub routine.
Err_btnUitdienst_Click:
    MsgBox Err.Description
    Resume Exit_btnUitdienst_Click
        
'Einde van de sub routine.
        
End Sub

'Bij het klikken op de knop 'Cijfer opslaan' wordt de volgende sub routine uitgevoerd.
Private Sub btnUitdienstopslaan_Click()
'Bij een onverwachte fout ga dan naar Err_btnRijstijlCijferOpslaan_Click.
On Error GoTo Err_btnUitdienstopslaan_Click
    
    'Update checkbox value
    Update tblChauffeurs
    Set Me.chbUitdienst.Value = True
    where [Voornaam] & [Achternaam] = Me.cboChauffeur

    'Toon een MessageBox met de melding dat de beoordeling is opgeslaan.
    
        'Defini�ring van de variabelen voor de MessageBox.
        Dim bericht, Stijl, Titel, Antwoord
    
        'Initialisatie van de variabelen.
        bericht = "Chauffeur is succesvol uit dienst gemeld."
        Stijl = vbOKOnly
        Titel = "Afgemeld"
           
        'De MessageBox wordt in de variabele 'Antwoord' geplaatst.
        Antwoord = MsgBox(bericht, Stijl, Titel)

        'Maak de knop 'Chauffeur afmelden' weer zichtbaar.
        Me.btnUitdienst.Visible = True
        
        'Blokkeer de velden weer op het form.
        Me.cboChauffeur.Enabled = False
        Me.cboChauffeur.Locked = True

        'Zet de focus op de knop 'Uit Dienst'.
        Me.btnUitdienst.SetFocus

        'Verberg de knop 'Cijfer opslaan'.
        Me.btnUitdienstopslaan.Visible = False
    
    'Verwijder de focus op de knop 'Cijfer opslaan' en verlaat de sub routine.
Exit_btnUitdienstopslaan_Click:
    Exit Sub

'Bij een onverwachte fout, geef dan een foutboodschap weer met de foutmelding als omschrijving en verlaat de sub routine.
Err_btnUitdienstopslaan_Click:
    MsgBox Err.Description
    Resume Exit_btnUitdienstopslaan_Click
    
'Einde van de sub routine.
End Sub


Alvast bedankt voor de hulp!
 
Je hebt de code zo te zien twee keer geplakt, dus ik ga er maar even van uit dat je dat per ongeluk hebt gedaan:

Code:
Update tblChauffeurs
Set Me.chbUitdienst = True
where [Voornaam] & [Achternaam] = Me.cboChauffeur

Wat mij hieraan verbaast: waarom [Voornaam] & [Achternaam], en niet ChauffeurID o.i.d.? En wat is de waarde van cboChauffeur? Meestal is dat toch een Chaufeur.ID. Dus deze constructie is bepaald niet feilloos...
Een Selectievakje heeft de waarden 0 of -1, waarbij -1 Waar is, en 0 dus Niet waar. Als de bijwerkquery niet werkt, dan komt dat niet door de waarde die je verandert, maar door een andere oorzaak. Bijvoorbeeld: de recordset is gelocked (record staat open op formulier) of de WHERE kan niet worden uitgevoerd (naam matchen op ID bijvoorbeeld).

Je code is zowiezo fout:

Code:
Update tblChauffeurs
Set Me.chbUitdienst = -1
where [Voornaam] & " " & [Achternaam] = Me.cboChauffeur
 
Laatst bewerkt:
Hallo,

De waarde van cboChauffeur is de voornaam en achternaam van de chauffeur door middel van een query.
Dit heb ik gedaan omdat men niet welke ID bij welke Chauffeur hoort.

Ik ben nog helemaal newbie op dit vlak dus ik heb op een gegeven moment gewoon wat geprobeerd.

De records zijn niet gelocked, ik heb het zo ingesteld dat je de waardes kan bewerken.

En het plakken had ik inderdaad per ongeluk gedaan.

Ik ben al even bezig met het zoeken naar een oplossing maar kom er niet uit..
 
Je hoeft in een keuzelijst ook helemaal niet de ID van de chauffeur te weten (of te zien); doorgaans baseer je een keuzelijst op een tabel met in ieder geval het sleutelveld (chauffeurID) en dan de velden Voornaam en Achternaam bijvoorbeeld. De keuzelijst krijgt dan 3 kolommen, waarvan kolom 1 de Afhankelijke kolom is (je wilt immers het sleutelveld hergebruiken). In de kolomeigenschappen geef je dan bij Kolombreedten op: 0cm;2cm;3cm.
De eerste kolom met breedte 0cm zie je derhalve niet, je ziet alleen Voornaam en Achternaam.
Altijd filteren/bijwerkqueries etc. draaien op basis van sleutelvelden!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan