400 likes | 1.15k Views
AS400 範例程式撰寫過程 步驟 1 :建立 Display File. 靜宜大學資管系 楊子青 2006.1.4. CRTLIB 指令建立 edu47ex 的 Library. EDTLIBL 指令將 edu47ex 加入 Library List 。按 enter ,再按 F3. CRTSRCPF 指令建立 QDDSSRC 的 原始檔 ( 存放 DDS 相關內容 ). STRPDM 指令,選 3 填入 QDDSSRC 相關資料. 按 F6 ,可新增 Member 及進行編輯 ( 例如 LABDS 這個 display file). LABDS 原始碼.
E N D
AS400範例程式撰寫過程步驟1:建立Display File 靜宜大學資管系 楊子青 2006.1.4.
EDTLIBL指令將edu47ex加入Library List。按enter,再按F3
CRTSRCPF指令建立QDDSSRC的原始檔(存放DDS相關內容)CRTSRCPF指令建立QDDSSRC的原始檔(存放DDS相關內容)
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顯示名稱及分機之查詢結果)
原始碼編輯後,按F3,change/ create member選y,即可存檔
WRKSPLF指令,檔案前選5可查詢編譯結果 (page down最後一行顯示是否成功)
DSPLIB edu47ex指令查詢library,會出現LABDS這個檔案
STRSDA指令,選3,填入以下資料可觀看該Record所定義之畫面STRSDA指令,選3,填入以下資料可觀看該Record所定義之畫面
步驟2:建立Physical File 靜宜大學資管系 楊子青 2006.1.4.
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
DSPFD指令,按F4,輸入File及library,可查詢該檔案之描述DSPFD指令,按F4,輸入File及library,可查詢該檔案之描述
DSPFFD指令,按F4,輸入File及library,可查詢該檔案之資料庫架構DSPFFD指令,按F4,輸入File及library,可查詢該檔案之資料庫架構
步驟3:建立RPG program 靜宜大學資管系 楊子青 2006.1.4.
CRTSRCPF指令建立QRPGLESRC的原始檔(存放RPG相關程式碼)CRTSRCPF指令建立QRPGLESRC的原始檔(存放RPG相關程式碼)
STRPDM指令,選3填入QRPGLESRC相關資料 按F6,可新增Member及進行編輯(例如Project1~Project5這些RPG程式)(SourceType為RPGLE)
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則結束程式)
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而結束)
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指令看有何不同)
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,輸入不重複的編號後,才可繼續輸入實驗室編號及電話,最後再新增於資料庫中)
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後, 會顯示實驗室編號及電話)
步驟4:建立MENU 靜宜大學資管系 楊子青 2006.1.4.
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)
CRTSRCPF指令建立QCLSRC的原始檔(存放Control Language程式碼)
STRPDM指令,選3填入QCLSRC相關資料 按F6,可新增Member及進行編輯(新增MENUPJRPG之CLLE程式作為主選單)
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
CRTMNU指令,按F4,再按F10填入資料(menu type為*pgm),產生選單(*menu)