Checking for null date
Steve Albin
steve at steve-albin.com
Sun Mar 29 14:12:50 CDT 2009
On Sunday, March 29, 2009 sunshine at public.kherson.ua (Ruslan Zasukhin) wrote:
>On 3/29/09 9:58 PM, "Steve Albin" <steve at steve-albin.com> wrote:
>
>>>> I'm using V4RB 4 and I need to know how to tell if a date field in a cursor
>>>> is
>>>> null.
>>>>
>>>> I tried this:
>>>>
>>>> if VDateTime(cursor.Field(27)).Value <> nil then
>>>> Return VDateTime(cursor.Field(27)).Value
>>>> else
>>>> Return nil
>>>> end
>>>>
>>>> This returns a date field, but an invalid date which I would expect since I
>>>> know the field is <NULL>.
>>>>
>>>> I tried this:
>>>>
>>>> if self.cursor.Field(27).GetString <> "" then
>>>> Return VDateTime(cursor.Field(27)).Value
>>>> else
>>>> Return nil
>>>> end
>>>>
>>>> This returns nil as expected.
>>>>
>>>> I can easily change my code to check the string value, but it seems that the
>>>> first way should work. What am I doing wrong?
>>>
>>> Much more easy
>>>
>>> if curs.Field(27).IsNull
>>
>> That is easier. Thanks!
>>
>> But, the question was why doesn't VDateTime(cursor.Field(27)).Value return
>> nil. Is is becasue casting the date causes a date field to be created with
>> unpredictable results? This is probably an RB question more than a Valentina
>> question...
>
>No,
>
>This is because WE did not promise you this !! :-)
>
>Valentina PATTERN of work with NULL and value is:
>
> IF you know that you have NULLABLE field THEN
>
> * you MUST at first check
> fld.IsNull() <<< this read ONE BIT from bitset file
>
> * then only if not NULL, you can touch
> fld.Value <<<< reads from VALUE file,
> this can be many bytes ...
>
>
I understand now.
In other words, you can only cast to VDateTime is you know that you have a valid VDateTime. RB will allow casting to a null date, but the result is garbage.
Thanks!
Steve
--
Steve Albin - Montclair, NJ
http://www.jazzdiscography.com/
http://www.steve-albin.com/
More information about the Valentina
mailing list