Download - AS400 範例程式撰寫過程 步驟 1 :建立 Display File
1
AS400 範例程式撰寫過程
步驟 1 :建立 Display File
靜宜大學資管系 楊子青2006.1.4.
2
CRTLIB 指令建立 edu47ex 的 Library
3
EDTLIBL 指令將 edu47ex 加入Library List 。按 enter ,再按 F3
4
CRTSRCPF 指令建立 QDDSSRC 的原始檔 ( 存放 DDS 相關內容 )
5
STRPDM 指令,選 3填入 QDDSSRC 相關資料
6
按 F6 ,可新增 Member 及進行編輯( 例如 LABDS 這個 display file)
7
LABDS 原始碼/* ******************************************************************/ A DSPSIZ(24 80 *DS3) A PRINT A CA03(03 'EXIT') A************************************************ A* 主要畫面 A************************************************ A R LAB1 A OVERLAY A 3 20' 實驗室編號: ' A 5 20' 實驗室名稱: ' A 7 20' 實驗室分機: ' A LAB1_LABNO 5A B 3 50DSPATR(PC) A DSPATR(RI) A DSPATR(UL) A R LAB2 A CLRL(*NO) A LAB2_LABNM 20A B 5 50DSPATR(PC) A DSPATR(RI) A DSPATR(UL) A LAB2_LABTL 5A B 7 50DSPATR(PC) A DSPATR(RI) A DSPATR(UL) A R LAB3 A CLRL(*NO) A LAB3_LABNM 20A B 5 50 A LAB3_LABTL 5A B 7 50
(LAB1 讓使用者輸入實驗室編號 )(LAB2 讓使用者輸入名稱及分機 )(LAB3 顯示名稱及分機之查詢結果 )
8
原始碼編輯後,按 F3 ,change/ create member 選 y ,即可存
檔
9
原始碼前,輸入 14 進行 compile
10
WRKSPLF 指令,檔案前選 5 可查詢編譯結果 (page down 最後一行顯示是否
成功 )
11
DSPLIB edu47ex 指令查詢 library ,會出現 LABDS 這個檔案
12
STRSDA 指令,選 3 ,填入以下資料
可觀看該 Record 所定義之畫面
13
步驟 2 :建立 Physical File
靜宜大學資管系 楊子青2006.1.4.
14
STRPDM 指令,選 3 ,填入 QDDSSRC 相關資料。按 F6 ,新增 LABDB 之 physical
file)
15
LABDB 原始碼 ( 定義了三個欄位 )
A UNIQUE A R LABDATA TEXT(' 實驗室資料欄位 ') A LABNO 5A COLHDG(' 實驗室編號 ') A LABNAME 20A COLHDG(' 實驗室名稱 ') A LABTEL 5A COLHDG(' 實驗室分機 ') A K LABNO
編輯後,按 F3 存檔,再選 14進行 compile
16
DSPFD 指令,按 F4 ,輸入 File 及 library ,
可查詢該檔案之描述
17
DSPFFD 指令,按 F4 ,輸入 File 及 library ,
可查詢該檔案之資料庫架構
18
DSPPFM edu47ex/labdb 指令,可查詢資料庫內容
19
步驟 3 :建立 RPG program
靜宜大學資管系 楊子青2006.1.4.
20
CRTSRCPF 指令建立 QRPGLESRC的
原始檔 ( 存放 RPG 相關程式碼 )
21
STRPDM 指令,選 3填入 QRPGLESRC 相關資料
按 F6 ,可新增 Member 及進行編輯( 例如 Project1~Project5 這些 RPG 程
式 )(SourceType 為 RPGLE)
22
Project1 原始碼 ( 程式版本 1)
F***************************************************************** Flabds CF E WORKSTN Flabdb UF A E K DISK C DOU LAB1_LABNO='00000' C exfmt lab1 C ENDDO C EVAL *INLR=*ON C return
( 讓使用者輸入實驗室編號,若輸入 00000 則結束程式 )
23
Project2 原始碼 ( 程式版本 2)
F***************************************************************** Flabds CF E WORKSTN Flabdb UF A E K DISK C DOU LAB1_LABNO='00000' C EXFMT LAB1 C EVAL LABNO=LAB1_LABNO C WRITE LABDATA C ENDDO C EVAL *INLR=*ON C RETURN
( 讓使用者輸入實驗室編號,並寫入資料庫中 )( 此支程式完全不檢查是否該編號已存在資料庫中,因此若輸入重複的編號如 00001 ,程式會產生 error 而結束 )
24
Project3 原始碼 ( 程式版本 3) F***************************************************************** Flabds CF E WORKSTN Flabdb UF A E K DISK C DOU LAB1_LABNO='00000' C EXFMT LAB1 C EVAL LABNO=LAB1_LABNO C LABNO CHAIN LABDATA C IF NOT %FOUND(LABDB) C WRITE LABDATA C ENDIF C ENDDO C EVAL *INLR=*ON C RETURN
( 改進版本 2 ,輸入不重複的編號才會寫入資料庫 )( 程式執行前後,請用 dsppfm edu47ex/labdb 指令看有何不同 )
25
Project4 原始碼 ( 程式版本 4 ,新增資料完整版本 )
F***************************************************************** Flabds CF E WORKSTN Flabdb UF A E K DISK C DOU LAB1_LABNO='00000' C EXFMT LAB1 C EVAL LABNO=LAB1_LABNO C LABNO CHAIN LABDATA C IF NOT %FOUND(LABDB) C EXFMT LAB2 C EVAL LABNAME=LAB2_LABNM C EVAL LABTEL=LAB2_LABTL C WRITE LABDATA C ENDIF C ENDDO C EVAL *INLR=*ON C RETURN
( 改進版本 3 ,輸入不重複的編號後,才可繼續輸入實驗室編號及電話,最後再新增於資料庫中 )
26
Project5 原始碼 ( 程式版本 5 ,查詢資料完整版本 )
F***************************************************************** Flabds CF E WORKSTN Flabdb UF A E K DISK C DOU LAB1_LABNO='00000' C EXFMT LAB1 C EVAL LABNO=LAB1_LABNO C LABNO CHAIN LABDATA C IF %FOUND(LABDB) C EVAL LAB3_LABNM=LABNAME C EVAL LAB3_LABTL=LABTEL C EXFMT LAB3 C ENDIF C ENDDO C EVAL *INLR=*ON C RETURN
( 輸入編號如 m232, m228, 或 m226a 後,會顯示實驗室編號及電話 )
27
CRTBNDRPG 指令,按 F4 ,進行程式編譯
28
CALL edu47ex/project1 指令,可執行程式
29
步驟 4 :建立 MENU
靜宜大學資管系 楊子青2006.1.4.
30
STRPDM 指令,選 3填入 QDDSSRC 相關資料
按 F6 ,新增 MENUPJ 之 display file存檔後,按 14 進行 compile
A HOME(01 'HOME MENU') A CA03(03 'EXIT') A CA12(12 'PREVIOUS') A INDARA A R MENU A 2 70'MENU' A COLOR(BLU) A 6 5' 1. 新增實驗室資料 ' A 8 5' 2. 查詢實驗室資料 ' A 20 5'99. SIGN OFF' A 23 2'SELECT :' A OPT 2 I 23 12DSPATR(PC)
31
CRTSRCPF 指令建立 QCLSRC 的原始檔 ( 存放 Control Language 程式
碼 )
32
STRPDM 指令,選 3填入 QCLSRC 相關資料
按 F6 ,可新增 Member 及進行編輯( 新增 MENUPJRPG 之 CLLE 程式
作為主選單 )
33
MENUPJRPG 原始碼pgm parm(&menu &lib &act)
dcl &menu *char len(10)dcl &lib *char len(10)dcl &act *char len(2)dclf file(menupj) rcdfmt(menu)
sndrcvf rcdfmt(menu)
chgvar &act value(X'0000') /* menu display again */if cond(&in01 = '1') then(chgvar &act value(X'FFFC')) /* home */if cond(&in03 = '1') then(chgvar &act value(X'FFFF')) /* exit */if cond(&in12 = '1') then(chgvar &act value(X'FFFE')) /* previous */
if cond(&opt = '1') then(call project4)if cond(&opt = '2') then(call project5)if cond(&opt = '99') then(signoff)
endpgm
34
CRTBNDCL 指令,按 F4 ,進行 CL 程式編譯 ( 產生 *pgm 檔 )
35
CRTMNU 指令,按 F4 ,再按 F10 填入資料
(menu type 為 *pgm) ,產生選單 (*menu)
36
GO MenuPjRPG 指令,可執行該選單