TNullableDate.AssignVariant in u_dzNullableDate raises its own EConvertError (SInvalidDate) for a variant that is not a date, with ErrorHandling = ehRaiseException. The message is built with Var2Str(_v), which itself raises EVariantConvertError for a variant that cannot be converted to a string, e.g. a variant array. So for such a value the caller gets EVariantConvertError "Variant can not be converted to String" instead of the documented EConvertError.
Measured with Delphi 12 and 2007: AssignVariant(VarArrayCreate([0, 1], varVariant)) raises EVariantConvertError; with ehNoException it correctly returns False.
Fix: build the message with something that does not raise, e.g. Var2Str(_v, '', ehNoException) or DumpVariant(_v).
Found by a code review of the fix for [bugs:#65]; the behaviour is older.
Fixed in revision #2464.
The message is now built without raising: a value that can be converted to a string is shown as before, anything else, e.g. an array, as a DumpVariant dump. That also covers a conversion that raises something other than EVariantError, e.g. EInvalidOp for a varDate holding NaN in Delphi 2007, and the value is cut to 100 characters, so a BLOB field's value no longer makes the message as long as itself.