[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference iamok::dtrdig

Title:DATATRIEVE INTEREST GROUP
Notice:ADD KEYWORDS TO NOTES FOR EASY SEARCHES
Moderator:IMTDEV::KRATZER
Created:Fri Mar 21 1986
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:3011
Total number of notes:9337

3001.0. "IF-THEN causes %RDB-E-NOT_VALID " by UTRTSC::SCHOLLAERT (Think before you shrink) Fri Mar 28 1997 01:53

    Hello,
    
    Customer reports problem with STORING NULL value with Datatrieve 7.1
    in Rdb database.
      
    NULL is default value for a number of fields. This works fine
    until customer codes the following IF-THEN statement to
    prevent Datatrieve trying to store a 0 instead of NULL in the
    case a user give a 0 as input during a STORE.
    
    IF (IAD.RS_SPECME1 NE 0) THEN AF.RSSPE1 = IAD.RS_SPECME1
    
    results in :

   "%RDB-E-NOT_VALID, validation on field RSSPE1 caused operation to fail"
    
    when RS_SPECME1 is 0.
    As if a 0 is tried to be stored ?! When the IF statement is 
    not used, Datatrieve STORES, as expected, a NULL in RS_SPECME1.
    I would expect Datatrieve to do the same when the IF is false.
    
    With an ELSE is added, the statement works fine, but this is not what
    the customer needs.
    
    IF (IAD.RS_SPECME1 NE 0) THEN AF.RSSPE1 = IAD.RS_SPECME1 ELSE AF.RSSPE1 = 3
    
    Is this a bug ? Is there a workaround or some other contruction
    possible to get a NULL stored when a users input a 0 ?
    
    Regards,
    
    Jan
    
    CSC Holland 

-------------------------------------------------------------------------

DEFINE RECORD INV_AFORM_REC
!
01 TOTAAL_REC.
   03 REGNR           PIC 9(4).
   03 TOESTEM         PIC 9(1).
   03 SPECST          PIC 9(3).
   03 SPECME          PIC 9(2).
   03 ZKHUIS          PIC 9(1).
   03 WOONPLTS        PIC 9(4).
   03 GESLACHT        PIC X(1).
   03 GEBDAT          PIC X(6).
   03 HSARTS          PIC 9(3).
   03 INVUL_DAT       PIC X(6).
   03 DGN_1E          PIC 9(1).
   03 DATDGN1E.
      05 DATDGN1E_M   PIC 9(2).
      05 DATDGN1E_J   PIC 9(2).
   03 DATKON1E.
      05 DATKON1E_M   PIC 9(2).
      05 DATKON1E_J   PIC 9(2).
   03 DUUR_SYMP       PIC 9(3).
   03 RELSPEC_JN      PIC 9(1).
   03 RELSPEC1.
      05 RS_SPECME1   PIC 9(2).
      05 RS_ZKHUIS1   PIC X(3).
      05 RS_GEM1      PIC 9(4).
;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

CREATE TABLE AANM_FORM (
   REGNR      REGNR_01_DOM,
   INVULDAT   DATUM_01_DOM,
   INVOEDAT   DATUM_01_DOM,
   TOESTEM    NEEJA_01_DOM,
   SPECST     SPECST_01_DOM,
   SPECME     SPECME_01_DOM,
   ZKHUIS     ZKHUIS_01_DOM,
   GESLACHT   GESLACHT_01_DOM,
   GEBDAT     DATUM_02_DOM,
   DGNEERST   DIAGNOSE_01_DOM,
   DATDGN1M   MAAND_01_DOM,
   DATDGN1J   JAARTAL_01_DOM,
   DATKON1M   MAAND_01_DOM,
   DATKON1J   JAARTAL_01_DOM,
   DUURSYMP   AANTAL_01_DOM,
   RELSP_NJ   NEEJA_02_DOM,
   RSSPE1     SPECME_02_DOM,
   RSZKH1     ZKHUIS_02_DOM,
   RSGEM1     GEMEENTE_01_DOM,

   CONSTRAINT AF_$$PRIMKEY
      PRIMARY KEY (REGNR)
      NOT DEFERRABLE);

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

CREATE DOMAIN SPECME_02_DOM
   AS TINYINT
   DEFAULT NULL
   CHECK
   ( (SPECME_02_DOM BETWEEN  1 AND 14) OR
     (SPECME_02_DOM BETWEEN 16 AND 30) OR
     (SPECME_02_DOM BETWEEN 34 AND 35) OR
     (SPECME_02_DOM BETWEEN 60 AND 61) OR
     (SPECME_02_DOM BETWEEN 80 AND 87) OR
     (SPECME_02_DOM IS NULL) )
      NOT DEFERRABLE;
COMMENT ON DOMAIN SPECME_02_DOM IS
   'omschr : DOMain voor de SPECialisME-variabelen van het type 02;';

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

DEFINE PROCEDURE STORE_AANM_FORM
!
FINISH
!
READY INV_AFORM_DOM  READ
READY IBD_DIR.IBD    WRITE
!
DECLARE REC_TELLER PIC 9(6).
REC_TELLER = 0
DECLARE LAST_REGNR PIC 9(4).
!
FOR IAD IN INV_AFORM_DOM
BEGIN
   REC_TELLER = REC_TELLER + 1
   LAST_REGNR = IAD.REGNR
!
   STORE AF IN AANM_FORM USING
   BEGIN
!
      PRINT IAD.REGNR ON USER53:[DIMMCIBD.STORE05]STORED_IN_AF.DAT
!
      AF.REGNR    = IAD.REGNR
      AF.INVULDAT = IAD.INVUL_DAT
      AF.INVOEDAT = IAD.INVOER_DAT
      AF.TOESTEM  = IAD.TOESTEM
      AF.SPECST   = IAD.SPECST
      AF.SPECME   = IAD.SPECME
      AF.ZKHUIS   = IAD.ZKHUIS
      IF (IAD.GESLACHT = 'M') THEN AF.GESLACHT = 1 ELSE AF.GESLACHT = 2
      AF.GEBDAT   = IAD.GEBDAT
      AF.DGNEERST = IAD.DGN_1E
      AF.DATDGN1M = IAD.DATDGN1E_M
      AF.DATDGN1J = IAD.DATDGN1E_J
      AF.DATKON1M = IAD.DATKON1E_M
      AF.DATKON1J = IAD.DATKON1E_J
      AF.DUURSYMP = IAD.DUUR_SYMP
      AF.RELSP_NJ = IAD.RELSPEC_JN
      IF (IAD.RS_SPECME1 NE 0)     THEN AF.RSSPE1 = IAD.RS_SPECME1
      IF (IAD.RS_ZKHUIS1 NE '   ') THEN AF.RSZKH1 = IAD.RS_ZKHUIS1
      IF (IAD.RS_GEM1    NE 0)     THEN AF.RSGEM1 = IAD.RS_GEM1
!      IF (IAD.RS_SPECME1 NE 0)     THEN AF.RSSPE1 = IAD.RS_SPECME1 ELSE
AF.RSSPE1 = 3
!      IF (IAD.RS_ZKHUIS1 NE '   ') THEN AF.RSZKH1 = IAD.RS_ZKHUIS1 ELSE
AF.RSZKH1 = '001'
!      IF (IAD.RS_GEM1    NE 0)     THEN AF.RSGEM1 = IAD.RS_GEM1    ELSE
AF.RSGEM1 = 935
   END
END
!
COMMIT
!
FINISH
!
PRINT ""
PRINT "het laatst verwerkte rec had volgnummer : ", REC_TELLER (-)
PRINT "                               en REGNR : ", LAST_REGNR (-)
END_PROCEDURE


T.RTitleUserPersonal
Name
DateLines
3001.1Anybody home ?UTRTSC::SCHOLLAERTThink before you shrinkWed Apr 02 1997 05:597
    Can someone have a look at this customer problem ?
    
    Or should I submit an IPMT case ?
    
    Thanks,
    
    Jan
3001.2STORE, then MODIFY UTRTSC::SCHOLLAERTThink before you shrinkThu Apr 03 1997 07:0219
    Hello,
    
    Customer found a workaround. 
    
    First do a STORE without any reference to the field 
    which has DEFAULT NULL.
    
    Second do a MODIFY is the userinput is not 0.
    
    Datatrieve Engineering, do I have to submit an IPMT 
    case to get this problem fixed ?
    
    Regards,
    
    Jan