为了协助新进同学,仍应该介绍基本程序的写法
编写小程序验证的做法请参考第一章的套件介绍,hello world部分,利用 fglcomp 与 fglrun
FGL指令不区分大小写
指令 DISPLAY 与 display 或 Display 或 DisPlay 都一样。编译钱系统会将指令转换为泉小写在进行编译。相关Genero文件在指令说明时,尤其在方法 (Method) 常会以大小写混杂的方式标示,此为便於阅读,而非该 Method 的语法。
对於字串,单引号与双引号功能相同,成对出现即可
*指令结束时可用分号 (;) 也可以不写
指令可写为
DISPLAY “hello”; DISPLAY “World” 与
DISPLAY “hello” DISPLAY “World” 结果相同,故也可写成 INPUT BY NAME g_abc ;
程序注解可使用 # (井号) , ( -- ) 两条短分隔线, { ...} 大括号
注意:大括号不支持巢状结构,从第一个左大括号到第一次出现的右大括号为止,可跨行出现,请减少使用
井号与两条短分隔线,均由标注起到该行行尾表示注解
FUNCTION
语法 [PRIVATE | PUBLIC] FUNCTION function_name( input_variable )
PRIVATE 或 PUBLIC 标定这个 function 在其他的 4GL 档中能否被呼叫,PRIVATE私有的时候就不能提供呼叫。
MAIN
FGL以MAIN作为程序进入点,Genero 3.x 以後的版本可写为 FUNCTION main( )
CALL function_name( input_variables ) RETURNING output_variables
4GL透过 CALL 和 RETURNING 进行呼叫和接收回传值。若该 function 没有回传资料,则可以省略
RETURN
此指令为完成function执行,要退回上一个呼叫点使用。若有回传值,则跟在 RETURN 後方。(注意勿和 RETURNING混为一谈)
CASE
此指令有两种语法,分别是将判断式提出写在 CASE 後,以及写在每一行
例如:CASE variable WHEN “a” #此写法时,本行生效条件为 variable = “a”
又或:CASE WHEN variable = “a” #此写法简单粗暴直接指定,适用於判断变数同时多种条件下
建议在结束 (END CASE) 前,尽量增加 OTHERWISE 描述,避免执行时与设计脱钩
WHILE WHILE...END WHILE
回圈。将需要判断的条件写在 WHILE 後方,判断成立才会执行区块内程序。跳离时需WHILE条件不成立或回圈内执行到 EXIT WHILE
WHILE a<10
DISPLAY a
LET a=a+2
END WHILE
执行结果
0
2
4
6
8
注意 WHILE TRUE 这个语法,一定要部署 EXIT WHILE,不然跑个没完。
FOR a=1 TO 10 STEP 2
DISPLAY a
END FOR
执行结果
1
3
5
7
9
结果为什麽不一样? 因为 WHILE 对 a 没有设定初始值的时候,预设是 0 。而FOR指定从 1 开始 !
GOTO
搭配:LABEL 使用,可直接跳动到指定位置,需在同一function 内避免程序结构被破坏
IF....THEN... [ELSE... ] END IF
如果叙述句,不支援 ELSEIF 多选,那必须改用CASE指令
*SLEEP n * 让程序暂停 n 秒钟
DEFINE 设定变数型态与长度,
直接定义 DEFINE a VARCHAR(10)
间接定义 DEFINE a LIKE table_id.column_id (参考上方 SCHEMA或DATABASE 设定)
RECORD 设定数组,如
DEFINE g_arr RECORD
a VARCHAR(10),
B LIKE table_id.column_id
END RECORD
数组资料取用:如 g_arr.B 即为取用 g_arr 数组的 B 元素值
DYNAMIC ARRAY OF RECORD 设定动态阵列数组
阵列有两种选择:固定长度与动态长度。有监於固定长度的越来越少用,建议尽量改用动态长度的,随需而变
阵列位置取用:如 g_abc[1] 就是取用第一笔,g_abc[1].def 就是取用第一笔的 def 元素值
ARG_VAL(0) 存在吗? 在,就是执行的作业名称 !
STATUS 每一个指令执行完成时,都有自己的 STATUS 状态报告。发生异常时是 > 0,指令正常完时值为 0
NOTFOUND 对,就是正整数 100,因为资料库找不到资料就是回传 100 ,为了方便英语系开发者阅读,预定义这个值
DATABASE database_id
透过 $FGLPROFILE设定的资料库连线设定与指定资料库进行连线
本指令可写在 FUNCTION 内,也可写在 FUNCTION 上方。当写在 FUNCTION 上方,则表示该 4GL 以指定 database_id 作为『编译参考』,功能与 SCHEMA 相同。
若写在 MIAN 上方,则特别表示程序执行时即启动连线功能。
SCHEMA database_id
本指令下给编译器 (fglcomp) 使用,说明编译阶段的变数,型态长度要参考现有资料库的型态与长度
CONNECT TO...
连结数据库,请查看『』篇
DISCONNECT database_id / CLOSE DATABASE
关闭资料库连线,分别需对应CONNECT 与 DATABASE
*SET CONNECT TO database_id *
FGL支援同时间连多个数据连线,但一次仅能作用一条,其余均为待命。可利用此指令切换生效连线。例如从 A 连线取资料後,切换到 B 连线进行写入
WHENEVER ERROR [CONTINUE | STOP | CALL function_id]
发生 SQL 错误时,应该要 [继续| 停止| 呼叫某某 function_id] ,注意最後一项:被呼叫的那个 function 不可以有传入值,所以,这里的 CALL 後方跟着的 function 也 不可以有括号!!!!
以上这些指令熟悉之後,接下来我们结合画面 (OPEN WINDOW)、交谈指令(DIALOG),以及一些延伸定义(packages)就可以做出漂亮的程序或系统。然後,放上不同的 client 端,就可在不同的平台呈现。如 Window/MAC/LinuxKDE 桌面(GDC),浏览器(GBC)、手机平板等移动装置(GMA,GMI)....满足各式各样的应用需求。
<<: 咕咕家韩式炸鸡Pizza吃到饱-公益店(台中) Korean Chicken Plus+
以.NET Framework来说,网页技术必备要会的有WebForm,MVC,WebAPI三种技术...
D11: 关於EOF 这是一个在C语言里面才有的语法,EOF的意思就是End Of File,是AS...
竟然到了第四个练习!!! 教学范例:https://www.sixvfx.com/ae_combus...
这个系列开始我们先介绍了 RSS feed 里面的内容和不同平台的格式,也了解到要一次处理这麽多又有...
小恐龙现在就像吃了无敌星星一样,完全无视仙人掌,所以我们来让小恐龙死翘翘吧! 撞上仙人掌 我们来加上...