My take on this is that we're dealing with a combination of "right church, wrong pew" and a VB coding error exacerbated by a bad practice.
Consider the following VBScript (yes, I know, but the rules are basically the same as in VB):
Code:
Dim dtVal
MsgBox "vbNull = " & CStr(vbNull)
dtVal = CDate(vbNull)
MsgBox FormatDateTime(dtVal, vbLongDate)
dtVal = CDate(vbNul)
MsgBox FormatDateTime(dtVal, vbLongDate)
dtVal = Null
If IsNull(dtVal) Then
MsgBox "dtVal is Null, VarType: " & CStr(VarType(dtVal))
Else
MsgBox FormatDateTime(dtVal, vbLongDate)
End If
Executing this with wscript.exe gives us the results:
[tt]vbNull = 1
Saturday, December 31, 1899
Saturday, December 30, 1899
dtVal is Null, VarType: 1[/tt]
Adding [tt]Option Explicit[/tt] at the head of this script gives us:
[tt]vbNull = 1
Saturday, December 31, 1899
Variable is undefined: 'vbNul' Code: 800A01F4[/tt]
So the first issue is that CDate(vbNull) yields 12/31/1899 and
not 12/30/1899.
I can only assume the 12/30/1899 date is being arrived at through a typo such as [tt]vbNul[/tt] that isn't caught because [tt]Option Explicit[/tt] is missing. That, or somebody is otherwise storing a 0 into this field in the database.
[tt]-657434.0 == Midnight 01/01/0100, local time
-1.0 == Midnight 12/29/1899, local time
0.0 == Midnight 12/30/1899, local time
1.0 == Midnight 12/31/1899, local time[/tt]
The greater error here though is trying to use [tt]vbNull[/tt] as a value for any sort of field at all! The constant [tt]vbNull[/tt] is strictly meant as a [tt]VarType( )[/tt] constant, used to identify what sort of data type is stored in a given Variant variable. It has a simple value 1 and is a member of the Enum [tt]VbVarType[/tt] in the VBA library.
When you want to store "null" data, you use [tt]Null[/tt] instead.
Access shares the same Date type with VB/VBA/VBScript. SQL Server has its own DATETIME format and others, and other DBMSs use still different representations. Each system has its own methods of storing "missing" or "null" values. Then you need to consider how you are accessing the data store itself. ODBC drivers may do one transformation, a native OLE DB provider yet another.