It's 3am in the morning here. I've been going crazy for about 6 hours trying to sort out why my validation doesn't work. I've gotten to the bottom of the problem, but the history is below too. Don't bother reproducing my issue until you've looked at the whole post - may save you some time!

EDITS... removed some mistakes! Still not convinced I've nailed exactly what the bug is, but there's definitely something going on with the interaction of the mask and the validation.
_________________________________________
History:

Regional settings are for British dates dd/mm/yyyy

Access 2003, db using 2002-03 format. (apologies for the 2007 in the header - I do have 2007 but I'm running 2003 at present)

I have an unbound form (frmWorkshop) with an unbound text box (txtDateXX) on it which is input masked as:
Code:
99/00/0000;0;#
I also have a validation rule on that text box:
Code:
>=#1/01/2000# And <#1/01/2001#
(via the text box properties 'Validation rule' setting) (which, incidentally, I cut and paste right out of the MS help file - I gave up getting it to do what I really wanted it to do ages ago, and have been reduced to trying to get it to work as per the examples!)

Now, when I run the form and enter 20/10/2000 into the date field, the validation is triggered. Go figure... the date entered is greater than 1/1/2000 and less than 1/1/2001, so why it's telling me it's not, I have no idea.

So, I go into the VBA immediate window and run the following code:

Code:
? Form_frmWorkshop.txtDateXX.text>=#1/01/2000# AND Form_frmWorkshop.txtDateXX.text<#1/01/2001#
... and it returns true. As far as I can tell the VBA code is equivalent to the form validation, but the VBA is returning true while the form is returning false.

This immediate window code:
Code:
? Form_frmWorkshop.txtDateXX.text
...returns the date entered, 20/10/2000

However, this:
Code:
? Form_frmWorkshop.txtDateXX.value
...returns Null, but that's what I'd expect since the date hasn't made it past the validation yet.

Can anyone put me out of my misery?? As I said, this isn't what I wanted... I've been using 'Between' and the DateAdd function to get it to validate dynamically for a date entered within a one year window either side of today's date, and that didn't work, so I've whittled it down gradually to this, and can't even get this to work.
____________________________________

After some more playing...

Unless I be mistaken, there's a bug in here, which is what's causing my problems.

To reproduce, do this:

1) Add unbound date field to unbound form (not sure if unbound is necessary but let's assume so)
2) Input mask to default short date: 99/00/0000;0;_
3) Validation rule: >=#1/01/2000# (yes, I reduced it to just that)
4) Run the form and key in "01102000" - it validates, incorrectly


5) Now, select just the 2000 and overtype it to 2001 and tab out of the field - you will still get validation (date is now 01/10/2001)
6) Select the WHOLE field, hit delete, and re-enter 01102001 - still validates
7) Select the WHOLE field, and change every part of the date by overtyping 21022112... finally it works.

You can fascinate yourself for ages with the different combinations that do and don't cause the validation to change, but from what I can see, it looks like the control doesn't consider itself to have changed, for validation purposes, until the dd part of the date has been changed from a leading zero number (like 01) to a non-zero leading number (like 22, 30, 15), or vice-versa. You can do whatever you like to the rest of the date, but until you change that part of it, it won't register that a change has been made for validation purposes (the .value property of the field will change provided the value is considered valid - regardless of whether it is actually valid or not).

I'd be interested to see if anyone else gets this issue - is it just the combination of the dd/mm/yyyy format and the input mask, or only on Access 2003?

Can I get that 6 or so hours of my life back? Hopefully it may stop someone else going nuts.