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

Conference ilbbak::ibi_focus

Title:FOCUS, from INFORMATION BUILDERS
Moderator:ZAYIUS::BROUILLETTE
Created:Thu Feb 19 1987
Last Modified:Mon May 05 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:615
Total number of notes:1779

72.0. "Modified version of IBI's autordb.fex program" by CSMDBA::ZABLONSKI () Thu May 19 1988 15:07

    IBI supplies a utility program (AUTORDB.FEX) which can read data from a
VMS RDB database for a given relation and create the FOCUS Master Description
file required for Focus to read the relation. When I used this program many
problems were found.

    1) Defined fields based on a global field did not get included in the
       Focus master

    2) VMS date datatype did not convert correctly

    3) Signed Word, Longword & Quadword with a decimal scale did not convert

    I have fixed the above problems, there may have been others

    The first 3 replies to this note are copies OF the modified program and
    RDBFILE.MAS & RDBFILE.ACX
T.RTitleUserPersonal
Name
DateLines
72.1AUTORDB.FEXCSMDBA::ZABLONSKIThu May 19 1988 15:08289
-* -DEFAULTS &RDBFILE = '                                                '
-* -SET &MNAME             ='        ';
-* -SET &MNAME             = FPARSE (48, &RDBFILE, 0, 0, 'NAME ', 1, 8, &MNAME);
-* -DEFAULTS &MASTER.A8.   = &MNAME
-SET &MASTER  ='        ';
-SET &SDDNAME ='        ';
-SET &SRELNAME='                              ';
-SET &WRITE   ='   ';
-SET &FUNC    ='R';
-SET &DEFNAMES = 0;
-SET &KEYCOUNT=' ';
-SET &RDBFILE ='                                                ';
-SET &AFILE   ='                                                ';
-SET &MFILE   ='                                                ';
-SET &LOOP    =' ';
-SET &MSG1    =' ';
-SET &MSG2    =' ';
-SET &TYP_I2  = 7;
-SET &TYP_I4  = 8;
-SET &TYP_I8  = 9;
-SET &TYP_F4  = 10;
-*SET &TYP_D8  = 27;
-SET &TYP_T   = 14;
-SET &TYP_VT  = 37;
-SET &TYP_ADT = 35;
-TOP
-CRTFORM
-"<10  ---------------------------------------------------- ";
-"<10 | RELATIONAL TABLE DESCRIPTOR FACILITY FOR FOCUS/RDB |";
-"<10 |                                                    |";
-"<10 |       INFORMATION BUILDERS, INCORPORATED           |";
-"<10  ----------------------------------------------------  </3";
-"<8  RDB FILENAME  => <T.&RDBFILE  "
-"<8  RELATION-NAME => <T.&SRELNAME </2"
-"<8  MASTER FILENAME       ==> <T.&MASTER   "
-"<8  RDB RELATION-DDNAME    => <T.&SDDNAME <50 (QUOTES ARE UNNECESSARY)"
-"<8  LEVEL OF FUNCTIONALITY => <T.&FUNC    <50 (R=READ, W=WRITE) </1"
-"<7 <D.&MSG1 "
-"<7 <D.&MSG2 </1 "
-"<14 DEPRESS PF3 KEY TO TERMINATE PROCEDURE  "
SET MSG=OFF
-SET &WRITE=DECODE &FUNC('R' 'NO' 'W' 'YES' ELSE ' ');
-IF &FUNC EQ 'R' OR 'W' THEN GOTO CHKDBFIL;
-SET &MSG1='YOU HAVE CHOSEN AN INVALID "LEVEL OF FUNCTIONALITY"';
-SET &MSG2='       PLEASE CHOOSE EITHER AN "R" OR A "W"     ';
-GOTO TOP
-*
 
 
 
 
 
 
 
 
 
-CHKDBFIL
-IF (&RDBFILE EQ ' ') OR (&SRELNAME EQ ' ') THEN GOTO BLANKS;
VMS STATE &RDBFILE
-RUN
-IF &RETCODE EQ 0 GOTO CHKBLANK;
-SET &MSG1='         DBMS FILE NOT FOUND OR INVALID         ';
-SET &MSG2='              RE-ENTER RDB FILENAME             ';
-GOTO TOP
-*
 
 
 
 
 
 
 
 
 
-CHKBLANK
-SET &DEFNAMES = IF (&MASTER EQ ' ') OR (&SDDNAME EQ ' ') THEN 1 ELSE 0;
-IF (&DEFNAMES EQ 0) THEN GOTO CHKFILE;
-SET &MASTER = IF (&MASTER NE ' ') THEN &MASTER
-       ELSE FPARSE (48, &RDBFILE, 0, 0, 'NAME ', 1, 8, &MASTER);
-SET &SDDNAME = IF (&SDDNAME NE ' ') THEN &SDDNAME ELSE &MASTER;
-SET &MSG1='     DEFAULTS SELECTED FOR MASTER / DBMS DDNAMES.   ';
-SET &MSG2='             DEPRESS <ENTER> TO CONTINUE            ';
-GOTO TOP
-*
 
 
 
 
 
 
 
 
 
-BLANKS
-SET &MSG1='    PLEASE INPUT A NON-BLANK ENTRY FOR RDB FILENAME ';
-SET &MSG2='            AND RDB RELATION-NAME                   ';
-GOTO TOP
-*
 
 
 
 
 
 
 
 
 
-CHKFILE
-SET MFILE = &MASTER || .MAS;
VMS STATE &MFILE
-RUN
-IF &RETCODE NE 0 GOTO OK1;
-SET &MSG1='      THIS MASTER FILENAME EXISTS ALREADY       ';
-SET &MSG2='     CHOOSE ANOTHER OR DELETE THIS FILENAME     ';
-GOTO TOP
-*
 
 
 
 
 
 
 
 
 
-OK1
-SET AFILE = &MASTER || .ACX;
VMS STATE &AFILE
-RUN
-IF &RETCODE NE 0 GOTO OK2;
-SET &MSG1='      THIS ACCESS FILENAME EXISTS ALREADY       ';
-SET &MSG2='     CHOOSE ANOTHER OR DELETE THIS FILENAME     ';
-GOTO TOP
-*
 
 
 
 
 
 
 
 
 
-OK2
-*
-* ACCESS RDBFILE TABLE IN RDB FOR SELECTED RDB TABLE AND EXTRACT
-* INFORMATION NEEDED TO BUILD FOCUS MASTER
-*
-TYPE
-TYPE PROCESS INITIATION ... PLEASE STAND BY
FILEDEF RDBFILE DISK &RDBFILE
TABLE FILE RDBFILE
        PRINT FLD_DATATYPE FLD_LENGTH FLD_SCALE
        BY RFLD_NAME
        IF RELATION_NAM IS '&SRELNAME'
        IF FLD_DATATYPE IS &TYP_I8 OR &TYP_I4 OR &TYP_I2
                OR &TYP_T OR &TYP_VT OR &TYP_ADT
                OR &TYP_F4
        ON TABLE HOLD AS IXTEMP
        END
-RUN
-IF &RECORDS NE 0 GOTO AOK;
-SET &MSG1='  ZERO RECORDS RETRIEVED FROM RDB TABLE DEFINITION:  ';
-SET &MSG2='        RDB FILE AND/OR RELATION NAME NOT FOUND      ';
-GOTO TOP
-*
 
 
 
 
 
 
 
 
 
-AOK
-*
-* START TO BUILD FOCUS MASTER
-*
-* -TYPE 
-* -TYPE OPEN MASTER FILE
FILEDEF MAS DISK &MFILE LRECL 90 RECFM V DISP MOD
-RUN
-WRITE MAS FILE=&MASTER, SUFFIX=RDB
-WRITE MAS SEGNAME=&MASTER, SEGTYPE=S0
-*
-* SET UP DEFINES TO PARSE RDB TABLE
-*
DEFINE FILE IXTEMP
    FNAME/A12   = EDIT(RFLD_NAME,'999999999999$$$$$$');
    P12/A6      = SUBSTR(18,RFLD_NAME,13,18,6,P12);
    ANAME/A12   = IF P12 EQ '      ' THEN FNAME ELSE ' ';
    AFLEN/A7    = IF (FLD_LENGTH LT 9)
                    THEN EDIT( EDIT(FLD_LENGTH), '$$9  ')
                ELSE IF (FLD_LENGTH LT 99)
                    THEN EDIT( EDIT(FLD_LENGTH), '$99 ')
                ELSE
                    EDIT(FLD_LENGTH);
    ULEN/A7     =  IF (FLD_SCALE NE 0) AND (FLD_DATATYPE EQ &TYP_I2) 
                      THEN EDIT(FLD_SCALE, '6.$$$$9')
                   ELSE
                   IF (FLD_SCALE NE 0) AND (FLD_DATATYPE EQ &TYP_I4) 
                      THEN EDIT(FLD_SCALE, '10.$$$$9')
                   ELSE
                   IF (FLD_SCALE NE 0) AND (FLD_DATATYPE EQ &TYP_I8) 
                      THEN EDIT(FLD_SCALE, '18.$$$$9')
                   ELSE
                   IF (FLD_DATATYPE EQ &TYP_T) OR (FLD_DATATYPE EQ &TYP_VT)
                    THEN EDIT(AFLEN, '999    ')
                ELSE
                    DECODE FLD_DATATYPE (&TYP_ADT '8YYMD'
                        &TYP_I8 '12.2' &TYP_I4 '9   ' &TYP_I2 '6   '
                        &TYP_F4 '8.2 ' ELSE    '    ');
    UTYP/A1     =  IF (FLD_SCALE NE 0)
                    THEN 'D'
                   ELSE
                   DECODE FLD_DATATYPE ( &TYP_T 'A' &TYP_VT 'A' &TYP_ADT 'I'
                        &TYP_I8 'D' &TYP_I4 'I' &TYP_I2 'I'
                        &TYP_F4 'F' ELSE    ' ');
    ATYP/A1     = IF (FLD_SCALE NE 0)
                   THEN 'F'
                  ELSE
                  DECODE FLD_DATATYPE ( &TYP_T 'A' &TYP_VT 'A' &TYP_ADT 'A'
                        &TYP_I8 'I' &TYP_I4 'I' &TYP_I2 'I'
                        &TYP_F4 'F' ELSE    ' ');
    ALEN/A7     = IF (FLD_DATATYPE EQ &TYP_T) OR (FLD_DATATYPE EQ &TYP_VT)
                     OR (FLD_DATATYPE EQ &TYP_ADT)
                    THEN EDIT(AFLEN, '999    ')
                   ELSE
                    IF (FLD_SCALE NE 0) AND (FLD_DATATYPE EQ &TYP_I8) 
                      THEN '4 '
                   ELSE
                    DECODE FLD_DATATYPE (
                        &TYP_I8 '8 ' &TYP_I4 '4 ' &TYP_I2 '2 '
                        &TYP_F4 '4 ' ELSE    '  ');
LINE/A80=' FIELD='|FNAME|',' |'ALIAS='|ANAME|',' |'USAGE='|UTYP|ULEN
                |','|ATYP|ALEN|',$';
END
-RUN
 
 
 
 
 
 
 
 
 
-* CREATE THE FOCUS MASTER FIELD DEFINITIONS
-*
TABLE FILE IXTEMP
PRINT LINE
ON TABLE SAVE AS MAS
END
-*
-* CREATE RDB ACCESS FILE
-*
FILEDEF ACC DISK &AFILE LRECL 90 RECFM V DISP MOD
-RUN
-SET &TABLE1='"' || &SRELNAME || '"';
-SET &TB= &TABLE1 || ',KEYS=' || &KEYCOUNT || ',WRITE=' || &WRITE || ',$';
-WRITE ACC SEGNAME=&MASTER,TABLENAME=&TB
-*,KEYS=&KEYCOUNT,WRITE=&WRITE,$
DEFINE FILE IXTEMP ADD
LINE_ACC/A80=' FIELD='|FNAME|', ALIAS='|RFLD_NAME||' ,$';
END
TABLE FILE IXTEMP
PRINT LINE_ACC
IF ANAME IS '  '
ON TABLE SAVE AS ACC
END
-RUN
-SET &MODE=DECODE &FUNC('R' 'READ' 'W' 'WRITE');
-CRTFORM
-"<10  ---------------------------------------------------- ";
-"<10 | RELATIONAL TABLE DESCRIPTOR FACILITY FOR FOCUS/RDB |";
-"<10 |                                                    |";
-"<10 |       INFORMATION BUILDERS, INCORPORATED           |";
-"<10  ----------------------------------------------------  </3";
-"<14 THIS PROCEDURE HAS TERMINATED SUCCESSFULLY  </3 "
-"<11 FOCUS <D.&MODE FUNCTIONALITY ENABLED WITH <D.&KEYCOUNT KEY FIELDS "
-"<11 MASTER FILE DESCRIPTION = <D.&MFILE "
-"<11 ACCESS FILE DEFINITION  = <D.&AFILE </3 "
-"<7  ENTER 'Y' TO RUN THIS PROCEDURE AGAIN  ============> <T.&LOOP "
-SET &MSG1=' ';
-SET &MSG2=' ';
-IF &LOOP EQ 'Y' THEN GOTO TOP;
SET MSG=ON
-EXIT
72.2RDBFILE.MASCSMDBA::ZABLONSKIThu May 19 1988 15:1024
FILE=RDBFILE        ,SUFFIX=RDB
SEGNAME=RELATION    ,SEGTYPE=S0
FIELDNAME   =RELATION_NAM ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =RELATION_ID  ,ALIAS=       ,I5       ,I2       ,$
FIELDNAME   =DBKEYLEN     ,ALIAS=       ,I5       ,I2       ,$
SEGNAME=RELFLDS     ,SEGTYPE=S0         ,PARENT=RELATION
FIELDNAME   =RFLD_RELNAME ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =RFLD_NAME    ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =RFLD_SOURCE  ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =RFLD_ID      ,ALIAS=       ,I5       ,I2       ,$
SEGNAME=INDECES     ,SEGTYPE=S0         ,PARENT=RELATION
FIELDNAME   =IDX_RELNAME  ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =IDX_NAME     ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =IDX_SEGCNT   ,ALIAS=       ,I5       ,I2       ,$
FIELDNAME   =IDX_UNIQUE   ,ALIAS=       ,I5       ,I2       ,$
SEGNAME=IDXFLDS     ,SEGTYPE=S0         ,PARENT=INDECES
FIELDNAME   =IXFLD_IDXNAM ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =IXFLD_NUMBER ,ALIAS=       ,I5,      ,I2       ,$
FIELDNAME   =IXFLD_NAME   ,ALIAS=       ,A31      ,A31      ,$
SEGNAME=FIELDS     ,SEGTYPE=S0          ,PARENT=RELFLDS
FIELDNAME   =FLD_NAME     ,ALIAS=       ,A31      ,A31      ,$
FIELDNAME   =FLD_DATATYPE ,ALIAS=       ,I2       ,I2       ,$
FIELDNAME   =FLD_LENGTH   ,ALIAS=       ,I3       ,I2       ,$
FIELDNAME   =FLD_SCALE    ,ALIAS=       ,D5       ,I2       ,$
72.3RDBFILE.ACXCSMDBA::ZABLONSKIThu May 19 1988 15:1127
SEGNAME=RELATION   ,TABLENAME='RDB$RELATIONS',$
FIELD       =RELATION_NAM ,'RDB$RELATION_NAME'     ,$
FIELD       =RELATION_ID  ,'RDB$RELATION_ID'       ,$
FIELD       =DBKEYLEN     ,'RDB$DBKEY_LENGTH'      ,$
SEGNAME=RELFLDS    ,TABLENAME='RDB$RELATION_FIELDS',
KEYFLD=RELATION_NAM ,IXFLD=RFLD_RELNAME,$
FIELD       =RFLD_RELNAME ,'RDB$RELATION_NAME'     ,$
FIELD       =RFLD_NAME    ,'RDB$FIELD_NAME'        ,$
FIELD       =RFLD_SOURCE  ,'RDB$FIELD_SOURCE'      ,$
FIELD       =RFLD_ID      ,'RDB$FIELD_ID'          ,$
SEGNAME=FIELDS     ,TABLENAME='RDB$FIELDS',
KEYFLD=RFLD_SOURCE   ,IXFLD=FLD_NAME,$
FIELD       =FLD_NAME     ,'RDB$FIELD_NAME'        ,$
FIELD       =FLD_DATATYPE ,'RDB$FIELD_TYPE'        ,$
FIELD       =FLD_LENGTH   ,'RDB$FIELD_LENGTH'      ,$
FIELD       =FLD_SCALE    ,'RDB$FIELD_SCALE'       ,$
SEGNAME=INDECES     ,TABLENAME='RDB$INDECES',
KEYFLD=RELATION_NAM ,IXFLD=IDX_RELNAME,$
FIELD       =IDX_RELNAME  ,'RDB$RELATION_NAME'     ,$
FIELD       =IDX_NAME     ,'RDB$INDEX_NAME'        ,$
FIELD       =IDX_SEGCNT   ,'RDB$SEGMENT_COUNT'     ,$
FIELD       =IDX_UNIQUE   ,'RDB$UNIQUE_FLAG'       ,$
SEGNAME=IDXFLDS     ,TABLENAME='RDB$INDEX_SEGMENTS',
KEYFLD=IDX_NAME     ,IXFLD=IXFLD_NAME,$
FIELD       =IXFLD_IDXNAM ,'RDB$INDEX_NAME'        ,$
FIELD       =IXFLD_NUMBER ,'RDB$FIELD_POSITION'    ,$
FIELD       =IXFLD_NAME   ,'RDB$FIELD_NAME'        ,$