2009年12月13日

メモ用:INFORMIX 4GLサンプルソース

この記事は、私自身の仕事用のメモです。
Informix 4GLで書いたプログラムのソース内容を簡単に説明するための素材ですが、
どうせならここに置いた方が色々と参考になるかと思い、貼ってみました。

こうしてみると、表名や列名のみならず変数名や関数名にまで全角文字を使いまくっています。以前類似のプログラムをJAVA(というかIBM Rational のEGL言語ですが)に移行してみたことがありますが、こんな風に書かれたプログラムはEGL泣かせですね。このプログラムでは、その他、"DATABASE"文も引数が変数になっていたりして、更にEGLコンバーターを泣かせる造りになってます。
========
create table 表1 ( 列1 INTEGER, 列2 CHAR(40) );
INSERT INTO 表1 VALUES ( 1, "数字の壱" );
INSERT INTO 表1 VALUES ( 2, "数字の弐" );
INSERT INTO 表1 VALUES ( 3, "数字の参" );

========
display.4gl
-------------
GLOBALS
DEFINE
p_表1 RECORD
列1 INTEGER,
列2 CHAR(40)
END RECORD
DEFINE 選択済み INTEGER
END GLOBALS

MAIN
DEFINE 引数の値 CHAR(2), データベース名 CHAR(40)

LET データベース名 = "testdb"

LET 引数の値 = DOWNSHIFT(ARG_VAL(1))

IF 引数の値 = "-c" THEN
MESSAGE "テスト用データベースと表を作成中"
CALL データベース作成(データベース名)
CALL 表作成 ( )
CALL データ作成 ( )
ELSE
DATABASE データベース名
END IF

OPEN FORM データ表示フォーム FROM "dispform"

LET 選択済み = 0

MENU "メインメニュー"
COMMAND "D/表示" "データの表示"
CALL データの表示と選択()
COMMAND "U/更新" "データの保守"
CALL データの更新()
COMMAND "C/再作成" "データの再作成"
CALL データベース作成(データベース名)
CALL 表作成( )
CALL データ作成( )
COMMAND "E/終了" "終了"
CLEAR SCREEN
EXIT MENU
END MENU
END MAIN

FUNCTION データベース削除(データベース名)
DEFINE データベース名 CHAR(255)

WHENEVER ERROR CONTINUE
CLOSE DATABASE
DROP DATABASE データベース名
IF sqlca.sqlcode <> 0 THEN
IF sqlca.sqlcode <> -329 THEN
EXIT PROGRAM (-1)
END IF
END IF
WHENEVER ERROR STOP
END FUNCTION

FUNCTION データベース作成(データベース名)
DEFINE データベース名 CHAR(255)

WHENEVER ERROR CONTINUE
CALL データベース削除(データベース名)
CREATE DATABASE データベース名
IF sqlca.sqlcode <> 0
THEN
EXIT PROGRAM(1)
END IF
WHENEVER ERROR STOP
END FUNCTION

FUNCTION 表作成( )
CREATE TABLE 表1 ( 列1 INTEGER, 列2 CHAR(40) )
END FUNCTION

FUNCTION データ作成( )
DEFINE カウント INTEGER
FOR カウント = 1 TO 20
INSERT INTO 表1 VALUES ( カウント, "何かてきと〜な文字列" )
END FOR
END FUNCTION

FUNCTION データの表示と選択()
DECLARE 選択データリスト SCROLL CURSOR FOR
SELECT 列1, 列2 FROM 表1
WHERE 1=1
OPEN 選択データリスト
FETCH FIRST 選択データリスト INTO p_表1.*

DISPLAY FORM データ表示フォーム
DISPLAY BY NAME p_表1.*
MESSAGE "E で終了"
MENU "Display"
COMMAND "N/次" "次のデータ"
FETCH NEXT 選択データリスト INTO p_表1.*
DISPLAY BY NAME p_表1.*
COMMAND "P/前" "前のデータ"
FETCH PREVIOUS 選択データリスト INTO p_表1.*
DISPLAY BY NAME p_表1.*
COMMAND "S/選択" "選択"
LET 選択済み = 1
CLOSE 選択データリスト
EXIT MENU
COMMAND "Exit" "データの選択と終了"
EXIT MENU
END MENU
CLEAR SCREEN
RETURN
END FUNCTION

FUNCTION データの更新()
DEFINE 列1の保存 INTEGER
IF 選択済み = 0 THEN
ERROR "最初にデータを1件選んでください.."
RETURN
END IF

DISPLAY FORM データ表示フォーム

LET 列1の保存=p_表1.列1

INPUT BY NAME p_表1.* WITHOUT DEFAULTS

LET p_表1.列1=列1の保存

UPDATE 表1 SET 表1.列2 = p_表1.列2
WHERE 列1 = p_表1.列1

SLEEP 2

RETURN
END FUNCTION

--------
========
dispform.per
-------
DATABASE testdb

SCREEN
{


データ一覧

列1 [f000 ]
列2 [f001 ]


}

TABLES
表1

ATTRIBUTES
f000 = 表1.列1;
f001 = 表1.列2;
END


あまり手間をかけたくなかったのでソース内容をそのままコピペしたのですが、案の定インデントが消えちゃいましたね。残念。


タグ :4glsample

同じカテゴリー(つぶやき)の記事
HCL OneDB
HCL OneDB(2020-09-15 19:53)

10th anniversary
10th anniversary(2011-06-04 01:50)

チャンクダウン
チャンクダウン(2009-08-19 22:49)


Posted by oninit at 03:45│Comments(0)つぶやき
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。