####################################################################### # SISTEMA : DOCUMENTACION DE SISTEMA # PROGRAMA : DSPRMT004.4GL # OBJETIVO : Creacion y Documentacion de Tablas. # AUTOR : Tadeo A. Ferreras F. # FECHA : JUNIO 10, 1995 ######################################################################## DATABASE rayovac GLOBALS "dsprgb000.4gl" FUNCTION dsprmt004() OPTIONS FORM LINE 8, ERROR LINE 23, PROMPT LINE 23 CALL pantalla() OPEN FORM dsfmmt004 FROM "dsfmmt004" DISPLAY FORM dsfmmt004 DISPLAY "dsprmt004" AT 4,3 ATTRIBUTE(RED) DISPLAY "Creacion y Documentacion de Tabla" AT 6,23 ATTRIBUTE(BLACK) MENU "OPCION" COMMAND "Adicionar-Documentar" "Presione para Grabar Para Cancelar" LET int_flag = FALSE CLEAR FORM CALL dsprad004() COMMAND "Consulta-Modificar" "Presione para Actualizar Para Cancelar" LET int_flag = FALSE CLEAR FORM CALL dsprmd004() COMMAND "Salir" EXIT MENU END MENU END FUNCTION FUNCTION dsprad004() LET dstb05.tabla = NULL LET dstb05.descripcion = NULL INPUT BY NAME dstb05.* WITHOUT DEFAULTS AFTER FIELD tabla IF dstb05.tabla IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tabla END IF LET dstb05.tabla = dstb05.tabla CLIPPED SELECT UNIQUE a.created INTO dstb05.fecha_creacion FROM systables a WHERE a.tabname = dstb05.tabla IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tabla END IF SELECT UNIQUE a.tabla FROM dstb00005 a WHERE a.tabla = dstb05.tabla IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD tabla END IF LET tab_1 = dstb05.tabla[1,2] LET tab_1 = UPSHIFT(tab_1) SELECT a.desc_sistema INTO dstb03.desc_sistema FROM dstb00003 a WHERE a.cod_sistema = tab_1 IF STATUS = NOTFOUND THEN LET numero_msg = 246 CALL msg(numero_msg) NEXT FIELD tabla END IF #DISPLAY BY NAME dstb00003.desc_sistema SELECT MAX(a.numero_act) INTO dstb05.numero_act FROM dstb00005 a WHERE a.tabla = dstb05.tabla IF dstb05.numero_act IS NULL THEN LET dstb05.numero_act = 0 END IF LET dstb05.numero_act = dstb05.numero_act + 1 DISPLAY BY NAME dstb05.numero_act AFTER FIELD descripcion IF dstb05.descripcion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF AFTER FIELD num_emp1 IF dstb05.num_emp1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp1 END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000 IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp1 END IF LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME nombre BEFORE FIELD fecha_creacion DISPLAY BY NAME dstb05.fecha_creacion AFTER FIELD fecha_creacion IF dstb05.fecha_creacion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_creacion END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT #IF dstb05.numero_act = 1 THEN DECLARE busca1 CURSOR FOR SELECT a.colname,a.colname,a.colname,a.colname,a.colname,a.colname, a.colno FROM systables b,syscolumns a WHERE a.tabid = b.tabid and b.tabname = dstb05.tabla ORDER BY 7 LET idx = 1 FOREACH busca1 INTO arr_tabla1[idx].* LET arr_tabla1[idx].campo = UPSHIFT(arr_tabla1[idx].campo) SELECT a.descrip_campo[1,50],a.descrip_campo[51,100], a.descrip_campo[101,150],a.tipo,a.longitud INTO arr_tabla1[idx].descrip_campo1,arr_tabla1[idx].descrip_campo2, arr_tabla1[idx].descrip_campo3,arr_tabla1[idx].tipo, arr_tabla1[idx].longitud FROM dstb00005 a WHERE a.numero_act = dstb05.numero_act - 1 AND a.tabla = dstb05.tabla AND a.campo = arr_tabla1[idx].campo LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) INPUT ARRAY arr_tabla1 WITHOUT DEFAULTS FROM scr_tabla.* BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD campo IF arr_tabla1[curr].campo IS NOT NULL THEN FOR idx = 1 TO ARR_COUNT() IF curr != idx THEN IF arr_tabla1[idx].campo = arr_tabla1[curr].campo THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD campo END IF END IF END FOR END IF BEFORE FIELD tipo CALL tipo_campo() LET arr_tabla1[curr].tipo = tipo_1 DISPLAY arr_tabla1[curr].tipo TO scr_tabla[fila].tipo AFTER FIELD tipo IF arr_tabla1[curr].campo IS NOT NULL THEN IF arr_tabla1[curr].tipo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo END IF IF arr_tabla1[curr].tipo = "DATETIME" THEN CALL longitud_campo() LET arr_tabla1[curr].longitud = longitud_1 END IF DISPLAY arr_tabla1[curr].longitud TO scr_tabla[fila].longitud END IF AFTER FIELD longitud IF arr_tabla1[curr].tipo IS NOT NULL THEN IF arr_tabla1[curr].longitud IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD longitud END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT LET j = 0 FOR idx = 1 TO ARR_COUNT() IF arr_tabla1[idx].campo IS NOT NULL THEN LET descrip_campo6 = " " LET descrip_campo6 = arr_tabla1[idx].descrip_campo1, arr_tabla1[idx].descrip_campo2, arr_tabla1[idx].descrip_campo3 LET j = j + 1 INSERT INTO dstb00005 VALUES (dstb05.tabla,dstb05.descripcion, dstb05.num_emp1,dstb05.fecha_creacion, dstb05.numero_act,arr_tabla1[idx].campo, descrip_campo6,arr_tabla1[idx].tipo, arr_tabla1[idx].longitud,j,NULL,USER,CURRENT, NULL,NULL) END IF LET arr_tabla1[idx].campo = " " LET arr_tabla1[idx].descrip_campo1 = " " LET arr_tabla1[idx].descrip_campo2 = " " LET arr_tabla1[idx].descrip_campo3 = " " LET arr_tabla1[idx].tipo = " " LET arr_tabla1[idx].longitud = " " END FOR { LABEL opp: PROMPT "Desea Crear Tabla [S/N]?..." FOR CHAR opcion1 LET opcion1 = UPSHIFT(opcion1) IF opcion1 != "S" AND opcion1 != "N" OR opcion1 IS NULL THEN GOTO opp END IF IF opcion1 = "S" THEN LET crear1 = NULL FOR idx = 1 TO ARR_COUNT() IF arr_tabla1[idx].campo IS NOT NULL THEN LET crear1 = crear1 CLIPPED," ",arr_tabla1[idx].campo CLIPPED," ", arr_tabla1[idx].tipo CLIPPED," " IF arr_tabla1[idx].tipo = "CHAR" OR arr_tabla1[idx].tipo = "DECIMAL" THEN LET crear1 = "(",arr_tabla1[idx].longitud CLIPPED,")" END IF IF arr_tabla1[idx].tipo = "DATETIME" THEN LET crear1 = arr_tabla1[idx].longitud CLIPPED END IF LET crear1 = crear1 CLIPPED,"," END IF END FOR IF crear1 IS NOT NULL THEN LET crear1 = crear1 CLIPPED," status_t CHAR(1), us_crea CHAR(9), ", " fech_crea DATETIME YEAR TO MINUTE, us_mod CHAR(9), ", " fech_mod DATETIME YEAR TO MINUTE" END IF LET crear = "CREATE TABLE ",dstb05.tabla CLIPPED," ( ",crear1 CLIPPED," )" PREPARE actt FROM crear EXECUTE actt END IF } LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION FUNCTION dsprmd004() CONSTRUCT criterio ON a.tabla,a.descripcion,a.num_emp1,a.fecha_creacion, a.numero_act FROM tabla,descripcion,num_emp1,fecha_creacion,numero_act IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec = "SELECT UNIQUE a.tabla,a.descripcion,a.num_emp1,a.fecha_creacion, ", " a.numero_act ", "FROM dstb00005 a WHERE a.status_t IS NULL AND ",criterio CLIPPED, "ORDER BY 1,5" PREPARE comando FROM selec DECLARE busca SCROLL CURSOR FOR comando OPEN busca FETCH FIRST busca INTO dstb05.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000 LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb05.*,nombre MENU "OPCION" COMMAND "Siguiente" FETCH NEXT busca INTO dstb05.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000 LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb05.*,nombre COMMAND "Anterior" FETCH PREVIOUS busca INTO dstb05.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000 LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb05.*,nombre COMMAND "Primero" FETCH FIRST busca INTO dstb05.* SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000 LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb05.*,nombre COMMAND "Ultimo" FETCH LAST busca INTO dstb05.* SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000 LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb05.*,nombre COMMAND "Escoger" INPUT BY NAME dstb05.descripcion THRU dstb05.fecha_creacion WITHOUT DEFAULTS AFTER FIELD descripcion IF dstb05.descripcion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF AFTER FIELD num_emp1 IF dstb05.num_emp1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp1 END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000 IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp1 END IF LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME nombre AFTER FIELD fecha_creacion IF dstb05.fecha_creacion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_creacion END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT DECLARE busca4 CURSOR FOR SELECT a.colname,a.colname,a.colname,a.colname,a.colname,a.colname, a.colno FROM systables b,syscolumns a WHERE a.tabid = b.tabid and b.tabname = dstb05.tabla ORDER BY 7 LET idx = 1 FOREACH busca4 INTO arr_tabla1[idx].* LET arr_tabla1[idx].descrip_campo1 = " " LET arr_tabla1[idx].descrip_campo2 = " " LET arr_tabla1[idx].descrip_campo3 = " " LET arr_tabla1[idx].tipo = " " LET arr_tabla1[idx].longitud = " " LET arr_tabla1[idx].campo = UPSHIFT(arr_tabla1[idx].campo) SELECT a.descrip_campo[1,50],a.descrip_campo[51,100], a.descrip_campo[101,150],a.tipo,a.longitud INTO arr_tabla1[idx].descrip_campo1,arr_tabla1[idx].descrip_campo2, arr_tabla1[idx].descrip_campo3,arr_tabla1[idx].tipo, arr_tabla1[idx].longitud FROM dstb00005 a WHERE a.numero_act = dstb05.numero_act AND a.tabla = dstb05.tabla AND a.campo = arr_tabla1[idx].campo LET idx = idx + 1 END FOREACH {DECLARE busca4 CURSOR FOR SELECT a.campo,a.descrip_campo[1,50],a.descrip_campo[51,100], a.descrip_campo[101,150],a.tipo,a.longitud,a.secuencia FROM dstb00005 a WHERE a.tabla = dstb05.tabla AND a.numero_act = dstb05.numero_act AND a.status_t IS NULL ORDER BY a.secuencia LET idx = 1 FOREACH busca4 INTO arr_tabla1[idx].* LET idx = idx + 1 END FOREACH} CALL SET_COUNT(idx-1) INPUT ARRAY arr_tabla1 WITHOUT DEFAULTS FROM scr_tabla.* BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD campo IF arr_tabla1[curr].campo IS NOT NULL THEN FOR idx = 1 TO ARR_COUNT() IF curr != idx THEN IF arr_tabla1[idx].campo = arr_tabla1[curr].campo THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD campo END IF END IF END FOR END IF BEFORE FIELD tipo CALL tipo_campo() LET arr_tabla1[curr].tipo = tipo_1 DISPLAY arr_tabla1[curr].tipo TO scr_tabla[fila].tipo AFTER FIELD tipo IF arr_tabla1[curr].campo IS NOT NULL THEN IF arr_tabla1[curr].tipo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo END IF IF arr_tabla1[curr].tipo = "DATETIME" THEN CALL longitud_campo() LET arr_tabla1[curr].longitud = longitud_1 END IF DISPLAY arr_tabla1[curr].longitud TO scr_tabla[fila].longitud END IF AFTER FIELD longitud IF arr_tabla1[curr].tipo IS NOT NULL THEN IF arr_tabla1[curr].longitud IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD longitud END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT DELETE FROM dstb00005 WHERE @tabla = dstb05.tabla AND @numero_act = dstb05.numero_act LET j = 0 FOR idx = 1 TO ARR_COUNT() IF arr_tabla1[idx].campo IS NOT NULL THEN LET descrip_campo6 = " " LET descrip_campo6 = arr_tabla1[idx].descrip_campo1, arr_tabla1[idx].descrip_campo2, arr_tabla1[idx].descrip_campo3 LET j = j + 1 INSERT INTO dstb00005 VALUES (dstb05.tabla,dstb05.descripcion, dstb05.num_emp1,dstb05.fecha_creacion, dstb05.numero_act,arr_tabla1[idx].campo, descrip_campo6,arr_tabla1[idx].tipo, arr_tabla1[idx].longitud,j,NULL,USER,CURRENT, NULL,NULL) END IF LET arr_tabla1[idx].campo = " " LET arr_tabla1[idx].descrip_campo1 = " " LET arr_tabla1[idx].descrip_campo2 = " " LET arr_tabla1[idx].descrip_campo3 = " " LET arr_tabla1[idx].tipo = " " LET arr_tabla1[idx].longitud = " " END FOR { LABEL opp: PROMPT "Desea Crear Tabla [S/N]?..." FOR CHAR opcion1 LET opcion1 = UPSHIFT(opcion1) IF opcion1 != "S" AND opcion1 != "N" OR opcion1 IS NULL THEN GOTO opp END IF IF opcion1 = "S" THEN LET crear1 = NULL FOR idx = 1 TO ARR_COUNT() IF arr_tabla1[idx].campo IS NOT NULL THEN LET crear1 = crear1 CLIPPED," ",arr_tabla1[idx].campo CLIPPED," ", arr_tabla1[idx].tipo CLIPPED," " IF arr_tabla1[idx].tipo = "CHAR" OR arr_tabla1[idx].tipo = "DECIMAL" THEN LET crear1 = "(",arr_tabla1[idx].longitud CLIPPED,")" END IF IF arr_tabla1[idx].tipo = "DATETIME" THEN LET crear1 = arr_tabla1[idx].longitud CLIPPED END IF LET crear1 = crear1 CLIPPED,"," END IF END FOR IF crear1 IS NOT NULL THEN LET crear1 = crear1 CLIPPED," status_t CHAR(1), us_crea CHAR(9), ", " fech_crea DATETIME YEAR TO MINUTE, us_mod CHAR(9), ", " fech_mod DATETIME YEAR TO MINUTE" END IF LET crear = "CREATE TABLE ",dstb05.tabla CLIPPED," ( ",crear1 CLIPPED," )" PREPARE actt FROM crear EXECUTE actt END IF } LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" UPDATE dstb00005 SET (status_t,us_mod,fech_mod) = ("E",USER,CURRENT) WHERE @tabla = dstb05.tabla AND @numero_act = dstb05.numero_act COMMAND "Retornar" EXIT MENU END MENU END FUNCTION FUNCTION tipo_campo() OPEN WINDOW dsprwd004 AT 9,4 WITH FORM "dsfmwd004" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST) LET campo_t[1].tipo_c = "CHAR" LET campo_t[2].tipo_c = "DATETIME" LET campo_t[3].tipo_c = "DATE" LET campo_t[4].tipo_c = "INTEGER" LET campo_t[5].tipo_c = "SMALLINT" LET campo_t[6].tipo_c = "DECIMAL" LET idx = 6 CALL SET_COUNT(idx) DISPLAY ARRAY campo_t TO campo_s.* LET curr1 = ARR_CURR() LET tipo_1 = campo_t[curr1].tipo_c CLOSE WINDOW dsprwd004 END FUNCTION FUNCTION longitud_campo() OPEN WINDOW dsprwd005 AT 9,4 WITH FORM "dsfmwd005" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST) LET campo_l[1].tipo_l = "YEAR TO YEAR" LET campo_l[2].tipo_l = "YEAR TO MONTH" LET campo_l[3].tipo_l = "YEAR TO DAY" LET campo_l[4].tipo_l = "YEAR TO HOUR" LET campo_l[5].tipo_l = "YEAR TO MINUTE" LET campo_l[6].tipo_l = "MONTH TO MONTH" LET campo_l[7].tipo_l = "MONTH TO DAY" LET campo_l[8].tipo_l = "MONTH TO HOUR" LET campo_l[9].tipo_l = "MONTH TO MINUTE" LET campo_l[10].tipo_l = "DAY TO DAY" LET campo_l[11].tipo_l = "DAY TO HOUR" LET campo_l[12].tipo_l = "DAY TO MINUTE" LET campo_l[13].tipo_l = "HOUR TO HOUR" LET campo_l[14].tipo_l = "HOUR TO MINUTE" LET campo_l[15].tipo_l = "MINUTE TO MINUTE" LET idx = 15 CALL SET_COUNT(idx) DISPLAY ARRAY campo_l TO campo_s1.* LET curr1 = ARR_CURR() LET longitud_1 = campo_l[curr1].tipo_l CLOSE WINDOW dsprwd005 END FUNCTION