Re: Forms 3.0 and dates again...

From: Robert Fernandes <rfernand_at_llnl.gov>
Date: Mon, 08 Jun 1998 10:02:51 -0700
Message-ID: <357C193B.10EA143A_at_llnl.gov>


Martin Anderson wrote:
>
> How do I force a user to enter in 4-digits for a year without a
> trigger? I was told by Oracle that by using FMFXDD-MON-YYYY the user
> would be forced to enter 4 digits but when I try this NO dates are
> accepted (i.e. 11-OCT-1970 is rejected). Is there a way in Forms v3.0
> to force 4 digit years or not.
>
> Thanks In Advance, Martin

Here is a stored procedure that we use in our Forms 3.0 application. This stored procedure mimics the RRRR format mask functionality (which is not available in 3.0). Set the format mask for your field to be 'MM/DD/YYYY' and place the call to the stored procedure in the ON-VALIDATE trigger for the field as 'FIX_DATE(:BLOCK.FIELD)'.
Also listed below is a small stored procedure that you can use to test the FIX_DATE routine.

The RRRR format logic uses the following matrix (taken from Oracle SQL Language Manual):

                                ENTERED YEAR                                 0 - 49 50 - 99

CURRENT YEAR	 0 - 49		Current		Previous
				Century		Century

		50 - 99		Next		Current
				Century		Century

Hope this helps.

/*************************************************************************/

/* FIX A FOUR-DIGIT YEAR DATE FIELD TO PRESUME CORRECT CENTURY IF       */
/* ONLY TWO DIGITS ENTERED AS SHORTHAND.  SEE APPENDIX B-19 OF THE      */
/* ORACLE DEVELOPERS BOOK. ADAPTED TO MIMIC RRRR FORMAT FUNCTIONALITY */ PROCEDURE FIX_DATE (FP_DATE IN OUT DATE) IS
  LV_CUR_CENTURY  NUMBER(2);
  LV_CUR_YR       NUMBER(2);
  LV_FP_DATE_YR   NUMBER(4);
  LV_WORK         VARCHAR(11);

BEGIN
LV_CUR_CENTURY := TO_NUMBER(SUBSTR(TO_CHAR(SYSDATE,'YYYY'),1,2));
LV_CUR_YR      := TO_NUMBER(TO_CHAR(SYSDATE,'YY'));
LV_FP_DATE_YR  := TO_NUMBER(TO_CHAR(FP_DATE,'YYYY'));
IF (LV_FP_DATE_YR < 100) THEN /* ONLY 2-DIGIT YEAR ENTERED */   IF (LV_CUR_YR < 50 AND LV_FP_DATE_YR >= 50) THEN
    LV_CUR_CENTURY := LV_CUR_CENTURY - 1;
  ELSIF (LV_CUR_YR >= 50 AND LV_FP_DATE_YR < 50) THEN
    LV_CUR_CENTURY := LV_CUR_CENTURY + 1;
  ELSE
    NULL;
  END IF;
  LV_WORK := TO_CHAR(FP_DATE,'DD-MON-') ||
             TO_CHAR(LV_CUR_CENTURY) ||
             LPAD(TO_CHAR(LV_FP_DATE_YR),2,'0');
  FP_DATE := TO_DATE(LV_WORK,'DD-MON-YYYY'); END IF;
END;
/*************************************************************************/

PROCEDURE TEST_FIX_DATE IS
  CUR_CENTURY_DT DATE;
  NXT_CENTURY_DT DATE;
BEGIN
  CUR_CENTURY_DT := TO_DATE('01/01/0098','MM/DD/YYYY');   NXT_CENTURY_DT := TO_DATE('01/01/0001','MM/DD/YYYY');

  DBMS_OUTPUT.PUT_LINE('ORIGINAL CURRENT CENTURY DATE OF 01/01/1998');
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(CUR_CENTURY_DT,'MM/DD/YYYY'));
  DBMS_OUTPUT.PUT_LINE('ORIGINAL NEXT CENTURY DATE OF 01/01/2001');
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(NXT_CENTURY_DT,'MM/DD/YYYY'));
  FIX_DATE(CUR_CENTURY_DT);
  FIX_DATE(NXT_CENTURY_DT);
  DBMS_OUTPUT.PUT_LINE('CORRECTED CURRENT CENTURY DATE OF 01/01/1998');
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(CUR_CENTURY_DT,'MM/DD/YYYY'));
  DBMS_OUTPUT.PUT_LINE('CORRECTED NEXT CENTURY DATE OF 01/01/2001');
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(NXT_CENTURY_DT,'MM/DD/YYYY'));
END;
/*************************************************************************/

-- 
         __________________________________________________         
        |                                                  |        
    _   |      Robert Fernandes - LLNL AIS Department      |   _    
   / )  |                                                  |  ( \   
 _( /_  |      Phone:       (925) 423-1397                 |  _) )_ 
(((\ \) |_     Fax:         (925) 423-5882                _| (/ /)))
(\\\\ \_/ )    LLNL Email:  rfernand_at_llnl.gov            ( \_/ ////)
 \       /                  fernandes6_at_llnl.gov           \        /
  \    _/                                                  \_     / 
  /   / |      Home Email:  rfernand_at_ainet.com             | \    \ 
 /   /  |__________________________________________________|  \    \
Received on Mon Jun 08 1998 - 19:02:51 CEST

Original text of this message