Article: Q253588
Product(s): Microsoft FoxPro
Version(s): WINDOWS:6.0
Operating System(s):
Keyword(s): kbActiveX kbContainer kbCtrl kbvfp600 kbGrpDSFox kbDSupport
Last Modified: 22-FEB-2000
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual FoxPro for Windows, version 6.0
-------------------------------------------------------------------------------
SYMPTOMS
========
When a Date and Time Picker ActiveX control is added to a form, its
ControlSource set to a date field, and the record pointer moved to a record that
contains a blank value in the date field, the following error message appears:
OLE IDispatch exception code 0 from DTPicker: A date was specified that does
not fall within the MinDate and MaxDate Properties...
When the record pointer is moved to a record that contains a NULL value in the
date field, the following error message appears:
OLE IDispatch exception code 0 from DTPicker: Invalid Property Value.
CAUSE
=====
The DateTimePicker control's Calendar interface handles adjusting the Day,
Month, and Year properties to create a valid date. If a value is assigned that
creates an invalid date, one of the error messages above appears. This behavior
occurs because the DateTimePicker control does not recognize {" / / "} as a
valid date. Likewise, the DateTimePicker control does not recognize a NULL as a
valid date.
RESOLUTION
==========
Use the EMPTY() or ISNULL() functions to determine whether the date field that
is the ControlSource for the DateTimePicker control is blank or NULL. If the
field contains a blank or NULL value, set the ControlSource property of the
DateTimePicker control to a NULL string. If the field is not blank, set the
ControlSource of the DateTimePicker control to the datefield.
IF !EMPTY(TESTDTP.DTP_DATEA)
THISFORM.DTPicker1.CONTROLSOURCE="TESTDTP.DTP_Datea"
ELSE
THISFORM.DTPicker1.CONTROLSOURCE=""
ENDIF
IF !ISNULL(TESTDTP.DTP_DATEB)
THISFORM.DTPicker2.CONTROLSOURCE="TESTDTP.DTP_Dateb"
ELSE
THISFORM.DTPicker2.CONTROLSOURCE=""
ENDIF
STATUS
======
This behavior is by design.
MORE INFORMATION
================
Steps to Reproduce Behavior
---------------------------
1. Create a program file named "DTP_DEMO" (without the quotation marks) using
the following code:
PUBLIC OX
OX=CREATEOBJECT('MYFORM')
OX.SHOW
READ EVENTS
DEFINE CLASS myform AS FORM
CAPTION = "DateTimePicker Form"
HEIGHT = 125
LEFT = 0
TOP = 0
WIDTH = 230
NAME = "myform"
ADD OBJECT DTPicker1 AS OLECONTROL WITH ;
OLECLASS="MSComCtl2.DTPicker.2",;
TOP = 5, ;
LEFT = 5, ;
HEIGHT = 25, ;
WIDTH = 100, ;
NAME = "DTPicker1"
ADD OBJECT DTPicker2 AS OLECONTROL WITH ;
OLECLASS="MSComCtl2.DTPicker.2",;
TOP = 35, ;
LEFT = 5, ;
HEIGHT = 25, ;
WIDTH = 100, ;
NAME = "DTPicker2"
ADD OBJECT commandbutton1 AS COMMANDBUTTON WITH ;
TOP=75, ;
LEFT=125, ;
HEIGHT=25, ;
CAPTION="\<Close"
NAME="commandbutton1"
PROCEDURE INIT
*!* IF !EMPTY(TESTDTP.DTP_DATEA)
THISFORM.DTPicker1.CONTROLSOURCE="TESTDTP.DTP_Datea"
*!* ELSE
*!* THISFORM.DTPicker1.CONTROLSOURCE=""
*!* ENDIF
*!* IF !ISNULL(TESTDTP.DTP_DATEB)
THISFORM.DTPicker2.CONTROLSOURCE="TESTDTP.DTP_Dateb"
*!* ELSE
*!* THISFORM.DTPicker2.CONTROLSOURCE=""
*!* ENDIF
ENDPROC
PROCEDURE commandbutton1.CLICK
RELEASE THISFORM
ENDPROC
PROCEDURE LOAD
IF !FILE('TESTDTP.DBF')
CREATE TABLE TESTDTP (DTP_DATEA D, DTP_DATEB D NULL)
INSERT INTO TESTDTP VALUES (CTOD(' / / '),(.NULL.))
ENDIF
IF !USED("TESTDTP")
USE TESTDTP IN 0
ENDIF
SELECT TESTDTP
ENDPROC
PROCEDURE UNLOAD
USE IN TESTDTP
ERASE TESTDTP.DBF
CLEAR EVENTS
ENDPROC
ENDDEFINE
2. Save and run DTP_DEMO. Note the error message that appears when the
DTPicker.ControlSource is set to a date field that contains an empty value.
3. Note the error message that appears when the DTPicker.ControlSource is set to
a date field that contains a NULL value.
4. Uncomment the commented lines of code in the Init method.
NOTE: This example uses the Init method. If you populate the ControlSource by
moving through the records of a table, you need to check for empty and NULL
fields in another event.
5. Save and run DTP_DEMO. Note that the error message does not appear.
(c) Microsoft Corporation 2000, All Rights Reserved. Contributions by John Desch,
Microsoft Corporation.
REFERENCES
==========
For additional information DTPicker ActiveX Control, click the article number
below to view the article in the Microsoft Knowledge Base:
Q189991 PRB: Error Setting DateTimePicker's Month Programmatically
Additional query words:
======================================================================
Keywords : kbActiveX kbContainer kbCtrl kbvfp600 kbGrpDSFox kbDSupport
Technology : kbVFPsearch kbAudDeveloper kbVFP600
Version : WINDOWS:6.0
Issue type : kbprb
=============================================================================