一、4GL画图原理
4gl编程的一些概念
①Window也是一类数据类型ui.Window
②Window的元素都应该用类似Grid的控件包裹
③所有在Window上面的元素都可以看着一个om.domnode(包括Canvas画布 )
Canvas画图步骤
#首先画4fd,在4fd上面放置一个Canvas画布(ex:画布的名称为mycarvas)
#①定义节点
DEFINE w_CurrentWindow ui.Window
DEFINE w_Canvas om.DomNode
DEFINE canvas_Rectangle om.DomNode
#②找到画布节点、画布上绘制图行
LET w_CurrentWindow = ui.Window.getCurrent() #找到当前的页面Window
LET w_Canvas = w_CurrentWindow .findNode("Canvas","mycarvas") #找到页面上的Canvas画布(这里mycarvas表示4fd档上面画布取的名字)
LET canvas_Rectangle = w_Canvas.createChild("CanvasRectangle") #在画布上面绘制图形(这里绘制矩形
#③设置图形属性,ex:上下左右坐标、前景色.....
CALL canvas_Rectangle.setAttribute("fillColor", "black") #设置前景色
CALL canvas_Rectangle.setAttribute("startX",621) #设置起点x坐标
CALL canvas_Rectangle.setAttribute("startY",100) #设置起点y坐标
CALL canvas_Rectangle.setAttribute("endX",661) #设置终点x坐标
CALL canvas_Rectangle.setAttribute("endY",(100+900*(l_q5/100)) USING "####") #设置终点y坐标(说明:这里用的是一个变量l_q5的值在画布1000*1000上面占的比例)
其他更多细节参考Genero Studio的手册文档
二、应用:4GL图形程序监控数据库表空间使用情况(TIPTOP ERP 5.10 p_dbspace)
随着ERP的长年累月数据资料的增加,数据库表空间肯定会越来越吃紧
这里提供4GL程序形象监控数据库表空间的使用情况,以备数据库空间不够用时MIS人员速度响应处理
①.p_dbspace per档
----------------------------------------------------------------------------------
-- $Id: p_dbspace.per created Thu May 17 11:14:22 2012
-- File created from p_dbspace.4fd by Genero Studio 11401
-- Copyright (c) 2002-2007 Four J's Development Tools. All rights reserved.
----------------------------------------------------------------------------------
-- WARNING! All changes made in this file will be lost!
----------------------------------------------------------------------------------
SCHEMA ds
LAYOUT( TEXT="p_dbspace")
GRID gr4
{
<G gb2 >
[aa0 ]
[ ]
[ ]
[ ]
[ ]
[ ]
< >
<G gb4 >
[aa1 ][aa2 ][aa3 ][aa4 ]
[aa5 ] [aa6 ][aa7 ][aa8 ][aa9 ]
[ab0 ][ab1 ][ab2 ][ab3 ][ab4 ]
[ab5 ][ab6 ][ab7 ][ab8 ][ab9 ]
[ac0 ][ac1 ][ac2 ][ac3 ][ac4 ]
[ac5 ][ac6 ][ac7 ][ac8 ][ac9 ]
[ad0 ][ad1 ][ad2 ][ad3 ][ad4 ]
[ad5 ][ad6 ][ad7 ][ad8 ][ad9 ]
You Should Redesign This Program After Rebuild The Database!
[ae0 ] [ae1 ][ae2 ]
< >
}
END -- GRID
END
ATTRIBUTES
GROUP gb2 : gb2, TEXT="Tiptop GP TableSpace Graphics Detail";
CANVAS aa0 : ocarvas;
GROUP gb4 : gb4, TEXT="Tiptop GP TableSpace Data Detail";
LABEL aa1:lb8, TEXT="TotalTableSpace";
LABEL aa2:lb9, TEXT="FreeTableSpace";
LABEL aa3:lb10, TEXT="Total-Free Space";
LABEL aa4:lb11, TEXT="UsedQuto%";
LABEL aa5:lb1, TEXT="SYSTEM";
EDIT aa6=FORMONLY.systemt TYPE DECIMAL, TABINDEX=1;
EDIT aa7=FORMONLY.systemf TYPE DECIMAL, TABINDEX=2;
EDIT aa8=FORMONLY.systemtf TYPE DECIMAL, TABINDEX=3;
EDIT aa9=FORMONLY.systemq TYPE DECIMAL, TABINDEX=4;
LABEL ab0:lb2, TEXT="SYSAUX";
EDIT ab1=FORMONLY.sysauxt TYPE DECIMAL, TABINDEX=5;
EDIT ab2=FORMONLY.sysauxf TYPE DECIMAL, TABINDEX=11;
EDIT ab3=FORMONLY.sysauxtf TYPE DECIMAL, TABINDEX=17;
EDIT ab4=FORMONLY.sysauxq TYPE DECIMAL, TABINDEX=23;
LABEL ab5:lb3, TEXT="DBS1";
EDIT ab6=FORMONLY.dbs1t TYPE DECIMAL, TABINDEX=6;
EDIT ab7=FORMONLY.dbs1f TYPE DECIMAL, TABINDEX=12;
EDIT ab8=FORMONLY.dbs1tf TYPE DECIMAL, TABINDEX=18;
EDIT ab9=FORMONLY.dbs1q TYPE DECIMAL, TABINDEX=24;
LABEL ac0:lb4, TEXT="UNDOTBS1";
EDIT ac1=FORMONLY.undotbs1t TYPE DECIMAL, TABINDEX=7;
EDIT ac2=FORMONLY.undotbs1f TYPE DECIMAL, TABINDEX=13;
EDIT ac3=FORMONLY.undotbs1tf TYPE DECIMAL, TABINDEX=19;
EDIT ac4=FORMONLY.undotbs1q TYPE DECIMAL, TABINDEX=25;
LABEL ac5:lb5, TEXT="USERS";
EDIT ac6=FORMONLY.userst TYPE DECIMAL, TABINDEX=8;
EDIT ac7=FORMONLY.usersf TYPE DECIMAL, TABINDEX=14;
EDIT ac8=FORMONLY.userstf TYPE DECIMAL, TABINDEX=20;
EDIT ac9=FORMONLY.usersq TYPE DECIMAL, TABINDEX=26;
LABEL ad0:lb6, TEXT="TEMPTABS";
EDIT ad1=FORMONLY.temptabst TYPE DECIMAL, TABINDEX=9;
EDIT ad2=FORMONLY.temptabsf TYPE DECIMAL, TABINDEX=15;
EDIT ad3=FORMONLY.temptabstf TYPE DECIMAL, TABINDEX=21;
EDIT ad4=FORMONLY.temptabsq TYPE DECIMAL, TABINDEX=27;
LABEL ad5:lb7, TEXT="RPTDBS1";
EDIT ad6=FORMONLY.rptdbs1t TYPE DECIMAL, TABINDEX=10;
EDIT ad7=FORMONLY.rptdbs1f TYPE DECIMAL, TABINDEX=16;
EDIT ad8=FORMONLY.rptdbs1tf TYPE DECIMAL, TABINDEX=22;
EDIT ad9=FORMONLY.rptdbs1q TYPE DECIMAL, TABINDEX=28;
BUTTON ae0 : clearrpt, TEXT="Clear", IMAGE="export";
BUTTON ae1 : refresh, TEXT="Refresh", IMAGE="refresh";
BUTTON ae2 : exit, TEXT="Exit", IMAGE="cancel";
END
附:如何将per档转换为4GL语言中的4fd档
打开Genero Studio –> 菜单栏Tools –> File Browser –> 找到p_locked.per档(右键如下图所示)
②.p_dbspace 4gl档
# Prog. Version..: '5.10.16-10.10.14(00009)' #
#
# Program name...: p_dbspace.4gl
# Descriptions...: Tiptop GP 5.x Oracle TableSpace Information
# Date & Author..: 12/05/16 by 李艺辉
DATABASE ds
GLOBALS "../../config/top.global"
DEFINE g_sql_t STRING
DEFINE g_sql_f STRING
DEFINE g_tablespace ARRAY[7] OF LIKE type_file.chr10
MAIN
DEFER INTERRUPT
OPTIONS ON CLOSE APPLICATION STOP
IF (NOT cl_user()) THEN
EXIT PROGRAM
END IF
WHENEVER ERROR CALL cl_err_msg_log
IF (NOT cl_setup("CZZ")) THEN
EXIT PROGRAM
END IF
CALL cl_used(g_prog,g_time,1) RETURNING g_time
OPEN WINDOW w_dbspace WITH FORM "czz/42f/p_dbspace"
ATTRIBUTE(STYLE="err01")
CALL cl_ui_init()
LET g_tablespace[1]='SYSTEM'
LET g_tablespace[2]='SYSAUX'
LET g_tablespace[3]='DBS1'
LET g_tablespace[4]='UNDOTBS1'
LET g_tablespace[5]='USERS'
LET g_tablespace[6]='TEMPTABS'
LET g_tablespace[7]='RPTDBS1'
CALL p_dbspace_load()
CALL p_dbmenu()
CLOSE WINDOW w_dbspace
CALL cl_used(g_prog,g_time,2) RETURNING g_time
END MAIN
FUNCTION p_dbmenu()
MENU ""
BEFORE MENU
#CALL cl_navigator_setting(g_curs_index, g_row_count)
ON ACTION refresh
CALL p_dbspace_load()
ON ACTION clearrpt
CALL p_dbspace_clearrpt()
ON ACTION exit
EXIT MENU
COMMAND KEY(INTERRUPT)
LET INT_FLAG=FALSE
EXIT MENU
END MENU
END FUNCTION
FUNCTION p_dbspace_load()
DEFINE l_index LIKE type_file.num5
DEFINE l_totalspace LIKE type_file.num20
DEFINE l_freespace LIKE type_file.num20
DEFINE l_total_free LIKE type_file.num20
DEFINE l_quto LIKE type_file.num20_6
DEFINE ls_pic_url STRING
DEFINE w_oracle ui.Window
DEFINE canvas_temp om.domnode
DEFINE canvas_oracle om.DomNode
DEFINE canvas_SYSTEM om.DomNode
DEFINE canvas_SYSAUX om.DomNode
DEFINE canvas_DBS1 om.DomNode
DEFINE canvas_UNDOTBS1 om.DomNode
DEFINE canvas_USERS om.DomNode
DEFINE canvas_TEMPTABS om.DomNode
DEFINE canvas_RPTDBS1 om.DomNode
DEFINE canvas_text1 om.DomNode
DEFINE canvas_text2 om.DomNode
DEFINE canvas_text3 om.DomNode
DEFINE canvas_text4 om.DomNode
DEFINE canvas_text5 om.DomNode
DEFINE canvas_text6 om.DomNode
DEFINE canvas_text7 om.DomNode
DEFINE canvas_text1q om.DomNode
DEFINE canvas_text2q om.DomNode
DEFINE canvas_text3q om.DomNode
DEFINE canvas_text4q om.DomNode
DEFINE canvas_text5q om.DomNode
DEFINE canvas_text6q om.DomNode
DEFINE canvas_text7q om.DomNode
DEFINE l_q1,l_q2,l_q3 LIKE type_file.num5
DEFINE l_q4,l_q5,l_q6 LIKE type_file.num5
DEFINE l_q7,l_x LIKE type_file.num5
CLOSE DATABASE
DATABASE ds #这里需注意,需连接到有权限查询dbs_data_files表的用户中
LET g_sql_t = "SELECT SUM(bytes) FROM dba_data_files WHERE tablespace_name = ?"
DECLARE total_cur CURSOR FROM g_sql_t
LET g_sql_f = "SELECT SUM(bytes) FROM dba_free_space WHERE tablespace_name = ?"
DECLARE free_cur CURSOR FROM g_sql_f
LET w_oracle = ui.Window.getCurrent()
LET canvas_oracle = w_oracle.findNode("Canvas","ocarvas")
#Clear Child Nod
LET canvas_temp = canvas_oracle.getFirstChild()
WHILE canvas_temp IS NOT NULL
CALL canvas_oracle.removeChild(canvas_temp)
LET canvas_temp = canvas_oracle.getFirstChild()
END WHILE
LET canvas_text1 = canvas_oracle.createChild("CanvasText")
LET canvas_text2 = canvas_oracle.createChild("CanvasText")
LET canvas_text3 = canvas_oracle.createChild("CanvasText")
LET canvas_text4 = canvas_oracle.createChild("CanvasText")
LET canvas_text5 = canvas_oracle.createChild("CanvasText")
LET canvas_text6 = canvas_oracle.createChild("CanvasText")
LET canvas_text7 = canvas_oracle.createChild("CanvasText")
LET canvas_text1q = canvas_oracle.createChild("CanvasText")
LET canvas_text2q = canvas_oracle.createChild("CanvasText")
LET canvas_text3q = canvas_oracle.createChild("CanvasText")
LET canvas_text4q = canvas_oracle.createChild("CanvasText")
LET canvas_text5q = canvas_oracle.createChild("CanvasText")
LET canvas_text6q = canvas_oracle.createChild("CanvasText")
LET canvas_text7q = canvas_oracle.createChild("CanvasText")
LET canvas_SYSTEM = canvas_oracle.createChild("CanvasRectangle")
LET canvas_SYSAUX = canvas_oracle.createChild("CanvasRectangle")
LET canvas_DBS1 = canvas_oracle.createChild("CanvasRectangle")
LET canvas_UNDOTBS1 = canvas_oracle.createChild("CanvasRectangle")
LET canvas_USERS = canvas_oracle.createChild("CanvasRectangle")
LET canvas_TEMPTABS = canvas_oracle.createChild("CanvasRectangle")
LET canvas_RPTDBS1 = canvas_oracle.createChild("CanvasRectangle")
CALL canvas_text1.setAttribute("fillColor", "blue")
CALL canvas_text1.setAttribute("startX",22)
CALL canvas_text1.setAttribute("startY",0)
CALL canvas_text1.setAttribute("text","SYSTEM")
CALL canvas_text2.setAttribute("fillColor", "white")
CALL canvas_text2.setAttribute("startX",165)
CALL canvas_text2.setAttribute("startY",0)
CALL canvas_text2.setAttribute("text","SYSAUX")
CALL canvas_text3.setAttribute("fillColor", "green")
CALL canvas_text3.setAttribute("startX",323)
CALL canvas_text3.setAttribute("startY",0)
CALL canvas_text3.setAttribute("text","DBS1")
CALL canvas_text4.setAttribute("fillColor", "yellow")
CALL canvas_text4.setAttribute("startX",435)
CALL canvas_text4.setAttribute("startY",0)
CALL canvas_text4.setAttribute("text","UNDOTBS1")
CALL canvas_text5.setAttribute("fillColor", "black")
CALL canvas_text5.setAttribute("startX",600)
CALL canvas_text5.setAttribute("startY",0)
CALL canvas_text5.setAttribute("text","USERS")
CALL canvas_text6.setAttribute("fillColor", "purple")
CALL canvas_text6.setAttribute("startX",710)
CALL canvas_text6.setAttribute("startY",0)
CALL canvas_text6.setAttribute("text","TEMPTABS")
CALL canvas_text7.setAttribute("fillColor", "red")
CALL canvas_text7.setAttribute("startX",876)
CALL canvas_text7.setAttribute("startY",0)
CALL canvas_text7.setAttribute("text","RPTDBS1")
INITIALIZE l_q1,l_q2,l_q3,l_q4,l_q5,l_q6,l_q7 TO NULL
FOR l_index=1 TO g_tablespace.getLength() STEP + 1
INITIALIZE l_totalspace,l_freespace,l_total_free,l_quto TO NULL
OPEN total_cur USING g_tablespace[l_index]
FETCH total_cur INTO l_totalspace
OPEN free_cur USING g_tablespace[l_index]
FETCH free_cur INTO l_freespace
IF NOT cl_null(l_totalspace) THEN
IF cl_null(l_freespace) THEN
LET l_freespace = 0
END IF
LET l_total_free = l_totalspace - l_freespace
LET l_quto = l_total_free/l_totalspace*100
END IF
CASE g_tablespace[l_index]
WHEN 'SYSTEM'
DISPLAY l_totalspace TO FORMONLY.systemt
DISPLAY l_freespace TO FORMONLY.systemf
DISPLAY l_total_free TO FORMONLY.systemtf
DISPLAY l_quto USING "###.&&" TO FORMONLY.systemq
LET l_q1 = l_quto
WHEN 'SYSAUX'
DISPLAY l_totalspace TO FORMONLY.sysauxt
DISPLAY l_freespace TO FORMONLY.sysauxf
DISPLAY l_total_free TO FORMONLY.sysauxtf
DISPLAY l_quto USING "###.&&" TO FORMONLY.sysauxq
LET l_q2 = l_quto
WHEN 'DBS1'
DISPLAY l_totalspace TO FORMONLY.dbs1t
DISPLAY l_freespace TO FORMONLY.dbs1f
DISPLAY l_total_free TO FORMONLY.dbs1tf
DISPLAY l_quto USING "###.&&" TO FORMONLY.dbs1q
LET l_q3 = l_quto
WHEN 'UNDOTBS1'
DISPLAY l_totalspace TO FORMONLY.undotbs1t
DISPLAY l_freespace TO FORMONLY.undotbs1f
DISPLAY l_total_free TO FORMONLY.undotbs1tf
DISPLAY l_quto USING "###.&&" TO FORMONLY.undotbs1q
LET l_q4 = l_quto
WHEN 'USERS'
DISPLAY l_totalspace TO FORMONLY.userst
DISPLAY l_freespace TO FORMONLY.usersf
DISPLAY l_total_free TO FORMONLY.userstf
DISPLAY l_quto USING "###.&&" TO FORMONLY.usersq
LET l_q5 = l_quto
WHEN 'TEMPTABS'
DISPLAY l_totalspace TO FORMONLY.temptabst
DISPLAY l_freespace TO FORMONLY.temptabsf
DISPLAY l_total_free TO FORMONLY.temptabstf
DISPLAY l_quto USING "###.&&" TO FORMONLY.temptabsq
LET l_q6 = l_quto
WHEN 'RPTDBS1'
DISPLAY l_totalspace TO FORMONLY.rptdbs1t
DISPLAY l_freespace TO FORMONLY.rptdbs1f
DISPLAY l_total_free TO FORMONLY.rptdbs1tf
DISPLAY l_quto USING "###.&&" TO FORMONLY.rptdbs1q
LET l_q7 = l_quto
OTHERWISE EXIT CASE
END CASE
END FOR
CALL canvas_SYSTEM.setAttribute("fillColor", "blue")
CALL canvas_SYSTEM.setAttribute("startX",52)
CALL canvas_SYSTEM.setAttribute("startY",100)
CALL canvas_SYSTEM.setAttribute("endX",92)
CALL canvas_SYSTEM.setAttribute("endY",(100+900*(l_q1/100)) USING "####")
INITIALIZE l_x TO NULL
IF l_q1>90 THEN
LET l_x = 90
ELSE
LET l_x = l_q1
END IF
CALL canvas_text1q.setAttribute("fillColor", "blue")
CALL canvas_text1q.setAttribute("startX",95)
CALL canvas_text1q.setAttribute("startY",(100+900*(l_x/100)) USING "####")
CALL canvas_text1q.setAttribute("text",l_q1||"%")
CALL canvas_SYSAUX.setAttribute("fillColor", "white")
CALL canvas_SYSAUX.setAttribute("startX",195)
CALL canvas_SYSAUX.setAttribute("startY",100)
CALL canvas_SYSAUX.setAttribute("endX",235)
CALL canvas_SYSAUX.setAttribute("endY",(100+900*(l_q2/100)) USING "####")
INITIALIZE l_x TO NULL
IF l_q2>90 THEN
LET l_x = 90
ELSE
LET l_x = l_q2
END IF
CALL canvas_text2q.setAttribute("fillColor", "white")
CALL canvas_text2q.setAttribute("startX",238)
CALL canvas_text2q.setAttribute("startY",(100+900*(l_x/100)) USING "####")
CALL canvas_text2q.setAttribute("text",l_q2||"%")
CALL canvas_DBS1.setAttribute("fillColor", "green")
CALL canvas_DBS1.setAttribute("startX",337)
CALL canvas_DBS1.setAttribute("startY",100)
CALL canvas_DBS1.setAttribute("endX",377)
CALL canvas_DBS1.setAttribute("endY",(100+900*(l_q3/100)) USING "####")
INITIALIZE l_x TO NULL
IF l_q3>90 THEN
LET l_x = 90
ELSE
LET l_x = l_q3
END IF
CALL canvas_text3q.setAttribute("fillColor", "green")
CALL canvas_text3q.setAttribute("startX",380)
CALL canvas_text3q.setAttribute("startY",(100+900*(l_x/100)) USING "####")
CALL canvas_text3q.setAttribute("text",l_q3||"%")
CALL canvas_UNDOTBS1.setAttribute("fillColor", "yellow")
CALL canvas_UNDOTBS1.setAttribute("startX",479)
CALL canvas_UNDOTBS1.setAttribute("startY",100)
CALL canvas_UNDOTBS1.setAttribute("endX",519)
CALL canvas_UNDOTBS1.setAttribute("endY",(100+900*(l_q4/100)) USING "####")
INITIALIZE l_x TO NULL
IF l_q4>90 THEN
LET l_x = 90
ELSE
LET l_x = l_q4
END IF
CALL canvas_text4q.setAttribute("fillColor", "yellow")
CALL canvas_text4q.setAttribute("startX",522)
CALL canvas_text4q.setAttribute("startY",(100+900*(l_x/100)) USING "####")
CALL canvas_text4q.setAttribute("text",l_q4||"%")
CALL canvas_USERS.setAttribute("fillColor", "black")
CALL canvas_USERS.setAttribute("startX",621)
CALL canvas_USERS.setAttribute("startY",100)
CALL canvas_USERS.setAttribute("endX",661)
CALL canvas_USERS.setAttribute("endY",(100+900*(l_q5/100)) USING "####")
INITIALIZE l_x TO NULL
IF l_q5>90 THEN
LET l_x = 90
ELSE
LET l_x = l_q5
END IF
CALL canvas_text5q.setAttribute("fillColor", "black")
CALL canvas_text5q.setAttribute("startX",664)
CALL canvas_text5q.setAttribute("startY",(100+900*(l_x/100)) USING "####")
CALL canvas_text5q.setAttribute("text",l_q5||"%")
CALL canvas_TEMPTABS.setAttribute("fillColor", "purple")
CALL canvas_TEMPTABS.setAttribute("startX",763)
CALL canvas_TEMPTABS.setAttribute("startY",100)
CALL canvas_TEMPTABS.setAttribute("endX",803)
CALL canvas_TEMPTABS.setAttribute("endY",(100+900*(l_q6/100)) USING "####")
INITIALIZE l_x TO NULL
IF l_q6>90 THEN
LET l_x = 90
ELSE
LET l_x = l_q6
END IF
CALL canvas_text6q.setAttribute("fillColor", "purple")
CALL canvas_text6q.setAttribute("startX",807)
CALL canvas_text6q.setAttribute("startY",(100+900*(l_x/100)) USING "####")
CALL canvas_text6q.setAttribute("text",l_q6||"%")
CALL canvas_RPTDBS1.setAttribute("fillColor", "red")
CALL canvas_RPTDBS1.setAttribute("startX",906)
CALL canvas_RPTDBS1.setAttribute("startY",100)
CALL canvas_RPTDBS1.setAttribute("endX",946)
CALL canvas_RPTDBS1.setAttribute("endY",(100+900*(l_q7/100)) USING "####")
INITIALIZE l_x TO NULL
IF l_q7>90 THEN
LET l_x = 90
ELSE
LET l_x = l_q7
END IF
CALL canvas_text7q.setAttribute("fillColor", "red")
CALL canvas_text7q.setAttribute("startX",938)
CALL canvas_text7q.setAttribute("startY",(100+900*(l_x/100)) USING "####")
CALL canvas_text7q.setAttribute("text",l_q7||"%")
CALL ui.Interface.refresh()
END FUNCTION
FUNCTION p_dbspace_clearrpt()
DEFINE l_dropsql STRING
#DEFINE l_table LIKE type_file.chr30
DEFINE l_table DYNAMIC ARRAY OF LIKE type_file.chr30
DEFINE l_i LIKE type_file.num5
IF(NOT cl_confirm("Drop RPTDBS1 ds_report.csfr102a_xxxx_xxxx Data?"))THEN
RETURN
ELSE
#If Oracle Version is above 10g You should set RecycleBin=OFF before execute DROP table
#SpaceShutt Tiptop GP Oracle DataBase is version 11g
EXECUTE IMMEDIATE "PURGE USER_RECYCLEBIN"
EXECUTE IMMEDIATE "ALTER SESSION SET RECYCLEBIN=OFF"
LET l_i = 1
DECLARE csfr102_cur CURSOR FOR
SELECT table_name FROM dba_tables
WHERE tablespace_name = 'RPTDBS1'
AND table_name LIKE 'CSFR102A%'
FOREACH csfr102_cur INTO l_table[l_i]
IF SQLCA.SQLCODE THEN
EXIT FOREACH
END IF
LET l_i = l_i + 1
END FOREACH
IF l_table[1_i] IS NULL THEN
MESSAGE "Not Exist CSFR102A TABLE!"
ELSE
CLOSE DATABASE
DATABASE ds_report
FOR l_i=1 TO l_table.getLength()-1 STEP + 1
LET l_dropsql = "DROP TABLE ",l_table[l_i] CLIPPED
EXECUTE IMMEDIATE l_dropsql
IF SQLCA.SQLCODE THEN
ERROR l_dropsql," ERROE: ",SQLCA.SQLCODE
ELSE
MESSAGE l_dropsql," OK."
END IF
END FOR
END IF
END IF
END FUNCTION
③.p_dbspace 效果图
三、TIPTOP GP ERP (V5.25)有哪些图形应用
①.工单排程查询asfq700 — 生成进度甘特图
②.料件质量状态汇总查询aqcq312 — 检验合格比率
③.生产计划维护作业asri120 — 生产计划统计图
转载请注明:赫非域 » TIPTOP 4GL画图应用-图形监控数据库表空间使用情况