Let me see if I got this right... You need the value of the checkbox to change, run validation code, then commit to the DB, right? If so, you'll definately want to break your validation out into its own function instead of calling the validate event twice (once by VB and once by you), and unbind the control:
------------------------------------
Private Sub Check1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'value has changed
If ValidateEntries = True Then
UpdateDatabase
Else
MsgBox DescriptiveErrorMessage
End If
End Sub
Private Sub ValidateEntries() As Boolean
If AllDataIsGood
ValidateEntries = True
Else
ValidateEntries = False
End If
End Sub
--------------------------------------
I suppose another way of doing this is assume the value of the checkbox in the validate event will be opposite what your validation code is expecting. In other words, if it's vbChecked and the user clicks it, Validate will show that it's still vbChecked, but treat it like it's vbUnchecked since that's what it's going to be anyway. The pitfall there, though is if the user clicks and drags off the control, having changed his/her mind about the action, it could cause problems. By default, VB would not change the checkbox's value, but your code will have validated based on an incorrect value for the checkbox.
Hope that's what ur looking for!
~Mike
Any man willing to sacrifice liberty for security deserves neither liberty nor security.
-Ben Franklin