bee.gif (1764 bytes)每 週 小 錦 囊bee.gif (1764 bytes)colormov.gif (4535 bytes)

此小錦囊資料僅供您參考使用, 請您於使用前測試再測試

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   如何於 SQL 中指定 Physical file mult-member ?.....(2000/03/03)

有二種方式 :

1. 使用 call procedure 方式, 呼叫系統程式 QCMDEXC , 並使用 OVRDBF 指令,

call Qcmdexc(                                                       
'OVRDBF FILE(QTXTSRC) TOFILE(XXXXXX/QTXTSRC) MBR(TNT0001051) OVRSCOPE(*JOB)',000000074.00000)
2.使用 SQL command : Create Alias  
Create Alias CODE/COST97 for CODE/QTXTSRC(COST97)                                        

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   一個好用的資料庫維護工具, 可直接維護單筆資料, 也可以使用 Hexadecimal(十六進位)模式進行資料為護, 此工具不支援中文, 但有 Source 可自行修改劃面 DDS 屬性為 "O"  type,及修改程式有關該劃面欄位部份即可支援中文, 好用ㄡ.....(2000/02/09)

來自 http://www.midrangecomputing.com/mc/code99.cfm
的資料庫維護工具 WRKDBF: All Work and No Pay

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   想讓你的程式  source 或 註解 於編輯時加上色彩嗎 ? 如果使用 IBM Client Access 連線程式就可以直接於 SEU 中隨意設定顏色, 可整行或片段指定顏色.....(2000/01/31)

1. 利用 Client Access 的 Keyboard setup 即可設定, 將 as400color.txt 存至你的硬碟並更名為 as400color.kmp,
2. 在 Client Access 中選 menu bar "Assist" -> "Keyboard setup" -> "User defined" -> 指定鍵盤設定檔 as400color.kmp -> 確定.

即完成設定. 可使用 W(白),R(紅),Y(黃),P(紫),G(綠),B(藍) 字母 + CTRL(正常) 或 ALT(反白) 鍵組合, 例如在 SEU 中 設定為插入(insert)模式, 使用 CTRL + "W" , 其後面的字會變白色, 若 ALT + "W", 其後面的字會變白色且反白, 其餘 R, Y, P, G, B 亦是

亦可下載 RPG Alive 2000 試用版 30 天, 須與 Client Access 搭配使用.

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   於 RPG 中如何將字元轉為數字 ? ..(2000/01/28)

IDS001       DS                                             
I                                        1   2 X2           
I                                    B   1   20B2           

C                     MOVE X'A0'     X1      1
C                     Z-ADD*ZERO     B2
C                     MOVE X1        X2

在這例子中 X1 = 16 進位 'A0' , 相當於 10 進位 160, 利用資料結構 DS001 定義同一位置, 但不同屬性(一為文字 X2, 一為二進位數字 B2 ), 將 X1 搬至 X2 右側, 即可得 B2 = 160. 這個技巧在做字元轉換時很好用, RPG 並不提供字元值直接加減(但 C 語言可以),所以須透過轉換, 希望未來 RPGIV 能提供 BIF 函數 %Hex 用於直接取用字元值.

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   教你簡化報表儲存的指令, 系統沒有提供指令,但有現成系統程式可用, USER 自己DIY,簡單ㄡ..(2000/01/12)

Step 1.
CRTPF FILE(SPLFTEST) RCDLEN(4083) MAXMBRS(*NOMAX) TEXT('SAVE SPOOLED FILE FOR GETSPLF & PUTSPLF USED')

Step2. Create GETSPLF 指令,(儲存報表資料於檔案(SPLFTEST)中)

         
Command source copy to AS/400 , CRTCMD CMD(GETSPLF) PGM(QSPGETF) 

 GETSPLF:    CMD        PROMPT('Get Spooled File')                     
             PARM       KWD(FILE) TYPE(*NAME) LEN(10) RTNVAL(*NO) +    
                                     RSTD(*NO) MIN(1) MAX(1) FILE(*IN) +          
                                     FULL(*NO) EXPR(*YES) PASSATR(*NO) +          
                                     PROMPT('Spooled file')                       
             PARM       KWD(TOFILE) TYPE(Q1) RTNVAL(*NO) MIN(1) +      
                                     MAX(1) FILE(*OUT) PROMPT('To data base file')
             PARM       KWD(JOB) TYPE(Q2) RTNVAL(*NO) DFT(*) +         
                                     SNGVAL((*)) MIN(0) MAX(1) FILE(*NO) +        
                                     PROMPT('Job name')                           
             PARM       KWD(SPLNBR) TYPE(*INT2) RTNVAL(*NO) +          
                                     RSTD(*NO) DFT(*ONLY) RANGE(1 1999) +         
                                     SPCVAL((*ONLY 0) (*LAST -1)) EXPR(*YES) +    
                                     VARY(*NO) PASSATR(*NO) PROMPT('Spooled +     
                                     file number')                                
             PARM       KWD(TOMBR) TYPE(*NAME) LEN(10) RTNVAL(*NO) +   
                                     RSTD(*NO) DFT(*FIRST) SPCVAL((*FIRST)) +     
                                     MIN(0) MAX(1) FILE(*NO) FULL(*NO) +          
                                     EXPR(*YES) VARY(*NO) PASSATR(*NO) +          
                                     PROMPT('To member')                          
 Q1:      QUAL       TYPE(*NAME) LEN(10) RSTD(*NO) MIN(1) +         
                                     FULL(*NO) EXPR(*YES) VARY(*NO) PASSATR(*NO)  
          QUAL       TYPE(*NAME) LEN(10) RSTD(*NO) DFT(*LIBL) +     
                                    SPCVAL((*LIBL) (*CURLIB *CURLIB)) MIN(0) +   
                                    FULL(*NO) EXPR(*YES) VARY(*NO) +             
                                    PASSATR(*NO) PROMPT('Library')               
 Q2:      QUAL       TYPE(*NAME) LEN(10) RSTD(*NO) MIN(1) +         
                                    FULL(*NO) EXPR(*YES) VARY(*NO) PASSATR(*NO)  
          QUAL       TYPE(*NAME) LEN(10) RSTD(*NO) MIN(0) +         
                                    FULL(*NO) EXPR(*YES) VARY(*NO) +             
                                    PASSATR(*NO) PROMPT('User')                  
          QUAL       TYPE(*CHAR) LEN(6) RSTD(*NO) RANGE(000000 +    
                                    999999) MIN(0) FULL(*YES) EXPR(*YES) +       
                                    PASSATR(*NO) PROMPT('Number')                

Step3. Create PUTSPLF 指令,重新列印已儲存之報表

Command source copy to AS/400 ,CRTCMD CMD(PUTSPLF) PGM(QSPPUTF)                                
                                                                       
 PUTSPLF:    CMD        PROMPT('Put Spooled File')                     
             PARM       KWD(FROMFILE) TYPE(Q1) MIN(1) MAX(1) +         
                                   FILE(*IN) PROMPT('From data base file')      
             PARM       KWD(OUTQ) TYPE(Q1) MIN(1) MAX(1) FILE(*NO) +   
                                   PROMPT('Output queue')                       
             PARM       KWD(FROMMBR) TYPE(*NAME) LEN(10) DFT(*FIRST) + 
                                   SPCVAL((*FIRST)) MIN(0) MAX(1) FILE(*NO) +   
                                   FULL(*NO) EXPR(*YES) VARY(*NO) +             
                                   PASSATR(*NO) PROMPT('From member')           
 Q1:       QUAL       TYPE(*NAME) LEN(10) RSTD(*NO) MIN(1) +         
                                 FULL(*NO) EXPR(*YES) VARY(*NO) PASSATR(*NO)  
             QUAL       TYPE(*NAME) LEN(10) RSTD(*NO) DFT(*LIBL) +     
                                SPCVAL((*LIBL) (*CURLIB *CURLIB)) MIN(0) +   
                                FULL(*NO) EXPR(*YES) VARY(*NO) +             
                                PASSATR(*NO) PROMPT('Library')               

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   V3R7 以後 RPGIV 有內建函數 %EDITC 用來處理數字轉成文字輸出格式, 此內建函數 %EDITC與報表數字輸出格式 DDS 定義相同, 但 V3R2 無此內建函數, 可透過 Edit Code API 來達到內建函數 %EDITC 用來處理數字轉成文字輸出格式的功能.   數字轉成文字格式輸出樣本 Summary of Edit Codes ......(1999/11/24)

Convert Edit Code (QECCVTEC) API --- 轉換指定之 Edit Code 為輸出樣本

Edit (QECEDT) API -- 利用Edit Code 輸出樣本產生格式化數字轉成文字輸出

數字格式轉換程式範例 -- EDTCODR
參數如下:

     C     EDTCODR       plist                                    
     C                   parm                    SrcVar           欲轉換之數字性文字
     C                   parm                    SrcVarCls        '*ZONED'
     C                   parm                    EdtCode          數字格式
     C                   parm                    CurId            金錢符號
     C                   parm                    SrcVarPrc        數字性文字位數
     C                   parm                    SrcDecPos        小數點位數
     C                   parm                    RcvVar           格式化數字輸出

測試數字格式轉換程式範例 -- EDTCDETSTR
將二範例程式上傳至 AS/400 & Compiled EDTCODR, EDTCDETSTR, 執行 EDTCDETSTR.

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   如何利用 TCP/IP FTP 從 AS/400 下載中文資料或從 PC 上傳中文資料至 AS/400 ?......(1999/10/25)

利用 TCP/IP FTP 作資料傳輸非常方便, 以下是範例:

PC FTP to AS/400 to get DBCS data to PC
Client    Server
PC -----> AS/400
於 PC DOS 命令列下 FTP command

FTP xxx.xxx.xxx.xxx
User : user
Password: password

>quote type c 950
>get library/file c:\temp\file.txt

============================================================
AS/400 FTP to PC server to put DBCS data to PC server
Server           Client
PC Server -----> AS/400
於 AS/400 命令列下 FTP command

FTP 'xxx.xxx.xxx.xxx'
User : user
Password: password

> Ltype c 950
FTP client TYPE changed. Server TYPE not changed.
Data type is C. CCSID value is 950.
> put library/file file.txt
200 PORT command successful.
150 Opening ASCII mode data connection for file.txt.
226 Transfer complete.

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  工具 : PRTRCDINF (Print record information) 列印檔案欄位格式   ......(1999/10/07)

                1. Copy PRTRCDINF to QCMDSRC
                2. Copy RCDINFC1P to QCLSRC
                3. Copy RCDINFR1P to QRPGSRC
                4. Copy RCDINFP1   to QDDSSRC
                5. Compile RCDINFP1, RCDINFR1P, RCDINFC1P
                6. CRTCMD CMD(PRTRCDINF) PGM(RCDINFC1)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  如何從 AS/400 啟動 PC windows 應用軟體或  從 PC 啟動 AS/400 應用軟體?  ......(1999/09/17)

Windows 95,98, NT 上需有 REXECD (remote executing)Daemon 程式, 用於接收外界指令, 在 AS/400 使用指令 RUMRMTCMD ,只定 PC 應用軟體完整路徑, 例如:
"C:\Program Files\Microsoft Office\Office\EXCEL.EXE"

RUNRMTCMD +
CMD('C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\EXCEL.EXE') +
RMTLOCNAME('145.59.1.78' *IP) +
RMTUSER(user) RMTPWD(userpassword)

同樣的, 也可以從 PC 啟動 AS/400 程式, PC 上有 REXEC.EXE 程式, 在 AS/400 上需啟動 Remote exection server: STRTCPSVR SERVER(*REXEC)

REXEC xxx.xxx.xxx.xxx -l QSYSOPR +
WRKACTJOB>C:\data\actjob.txt
xxx.xxx.xxx.xxx : AS/400 IP address;  -l is 小寫 L , for username

PC

動作

AS/400

REXECD

<------AS/400 傳送 PC command to daemon program

RUNRMTCMD

REXEC

PC 傳送 AS/400 command to AS/400 REXEC Server------>

STRTCPSVR *REXEC


REXECD utility 可從 http:\\www.denocomp.com\download.htm 下載

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   清除報表工具 CLNUSRSPL (Cleanup User Spooled Files), 可指定多個使用者的報表於某日前之報表刪除或集中歸檔, 指令範例 :  ......(1999/09/08)

CLNUSRSPL  USRID(AA BB)  OPTION(*INCLUDE)   DELETEDATE(072499)  ACTION(*DELETE) 
清除使用者 AA 及 BB 於 1999 年 7 月 24 日(含24 日) 以前的所有報表

CLNUSRSPL  USRID(AA BB)  OPTION(*OMIT)  DELETEDATE(072499)   ACTION(*DELETE) 
除使用者 AA 及 BB 報表不清除, 清除整個系統其他使用者於 1999 年 7 月 24 日(含24 日) 以前的所有報表

CLNUSRSPL  USRID(AA BB)  OPTION(*INCLUDE)   DELETEDATE(072499)  ACTION(*ARCHIVE) + ARCHIVE(OUTQ)
若指定 ACTION(*ARCHIVE) 及 ARCHIVE(OUTQ), 則將報表歸檔至 OUTQ

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  OPNQRYF 之篩選條件內建函數 %WLDCRD, 可以使用 (Field *EQ %WLDCRD("*#*") 挑選 Field 中含有字元 "#" 的資料, 但若要挑Field 中不含有字元 "#" 的資料(Field *NE %WLDCRD("*#*"), 系統卻回應 %WLDCRD 參數錯誤,要如何解決 ?......(1999/08/05)

%WLDCRD 內建函數僅應用於 *EQ 運算子,而無法使用於 *NE,所以須使用 *NOT 做邏輯運算

挑選 Field 中含有字元 "#" 的資料 *EQ :
    OPNQRYF File(FileA) QRYSLT('Field *EQ %WLDCRD("*#*")')

挑Field 中不含有字元 "#" 的資料 *NE:
    OPNQRYF File(FileA) QRYSLT('*NOT (Field *EQ %WLDCRD("*#*"))')

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   要如何於 RPG/400 中計算某日為星期幾 ?......(1999/06/02)

RPG/400 並不支援日期函數, 但可使用 ILE RPG/400 中 ILE CEE API CEEDAYS, CEEDYWK 來計算

Convert Date to Lilian Format (CEEDAYS) API
將文字型態日期轉換為流水日數(以1582/10/15為基準日即 1, 1582/10/16 為 2....,依此累計至 9999/12/31)
文字型態日期格式可為 MM/DD/YY, MMDDYY,MM/DD/YYYY, MMDDYYYY等.

Calculate Day of Week from Lilian Date (CEEDYWK) API
以 CEEDAYS 傳回之流水日數為參數, 計算星期幾,
若傳回 1-> 星期日, 2->星期一,..., 7->星期六

此範例以系統日測試, 你可使用任何介於1582/10/15-- 999/12/31之日期測試 : 
     H*Debug(*yes)                                                     
     D DateMDY         S               D   datfmt(*mdy)                
     D DateAlpha       S              8    Inz                         
      *                                                                
     D                 ds                                              
     D TimeDate                      14  0                             
     D  Time60                        6  0 overlay(TimeDate:  1)       
     D  Date80                        8  0 overlay(TimeDate:  7)       
      *                                                                
     D Days            S             10I 0                             
     D DayofweekN      S             10I 0                             
     D datefmt         S              8    inz('MM/DD/YY')             
      *                                                                
      * Feedback code data structure for CEE API                       
     D fc              DS                                              
     D   sev                          5I 0                             
     D   msgno                        5I 0                             
     D   flags                        1                                
     D   facid                        3                                
     D   isi                         10I 0                             
      *                                                                
      *----------------------------------------------------*           
      *  Get the current time                              *           
      *----------------------------------------------------*           
     C                   Time                    TimeDate              
      *                                                                
     C     *usa          Move      Date80        DateMDY               
     C                   Movel     DateMDY       DateAlpha             
     C     DateAlpha     DSPLY                                         
      *                                                                
     C                   CallB(D)  'CEEDAYS'                           
     C                   parm                    DateAlpha             
     C                   parm                    datefmt               
     C                   parm                    Days                  
     C                   parm                    fc                    
     C*                  dump                                          
     C     Days          DSPLY                                         
      *                                                                
     C                   Movel     Date80        inputdate         8   
     C     inputdate     DSPLY                                         
     C                   CallB(D)  'CEEDAYS'                           
     C                   parm                    inputdate             
     C                   parm      'MMDDYYYY'    datefmt               
     C                   parm                    Days                  
     C     Days          DSPLY                                         
      *                                                                
     C     *MDY          Move      DateMDY       Date6n            6 0 
     C     Date6n        DSPLY                                         
      *                                                                
     C                   Move      Date6n        Date6c            6   
     C     Date6c        DSPLY                                         
     C                   CallB(D)  'CEEDAYS'                           
     C                   parm                    Date6c                
     C                   parm      'MMDDYY'      datefmt               
     C                   parm                    Days                  
     C     Days          DSPLY                                         
      *                                                                
     C                   CallB     'CEEDYWK'                           
     C                   parm                    Days                  
     C                   parm                    DayOfweekN            
      *                                                                
     C     'DayOfWeek'   DSPLY                                         
     C     DayOfweekN    DSPLY                                         
      * For the day of week, 1 indicates Sunday, 2 indicates Monday, ..
      * 7 indicates Saturday.                                          
     C                   Eval      *InLR    = *On                      

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   要如何於 SQL/400 同一資料檔(table)中找重覆 (Duplicated record) 的資料 ?......(1999/05/17)

SELECT ALL *                                                          
   FROM file T01                                                      
       WHERE 1 < (SELECT  count(*)                                    
           FROM  file T02                                             
              WHERE T01.field = T02.field AND T01.field2 = T02.field2)
                  ORDER BY T01.field asc, T01.field2 asc              
上述語法會傳回二欄位相同的重覆 (Duplicated record) 資料

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  System Request 的選項可以修改嗎 ? 例如選項 3 DSPJOB, 可改為 WRKJOB 嗎 ?......(1999/04/30)

System Request 畫面是無法修改, 但是選項執行的指令在有條件下是可以修改的

System Request 選項的指令是放在訊息檔,可輸入指令   WRKMSGD CPX2313 , 按執行鍵

CPX2313 訊息如下:
First-level message text . . . . 'ENDRQS DSPJOB DSPMSG SNDMSG

SIGNOFF DSPMSG DSCJOB DSPWSUSR ENDRDBRQS '

於畫面上輸入 2 於 CPX2313 前之OPT欄位 , 修改指令 DSPJOB 為 WRKJOB.

要修改必須字數不得多於原指令字數,且指令起始位置要一致,
例如 WRKJOB 的 W, 要與 DSPJOB 的 D 同一位置

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   如何傳參數至 Query/400 ? ......(1999/04/28)

  1. 於 Query/400 篩選資料畫面,設定接收參數(冒號開頭代表參數),
    The Select Records Panel
    
    
                               Select Records                                      
           Type comparisons, press Enter.  Specify OR to start each new group.     
             Tests: EQ, NE, LE, GE, LT, GT, RANGE, LIST, LIKE, IS, ISNOT...        
                                                                                   
           AND/OR  Field      Test    Value (Field, Number, 'Characters', or ...)  
                  GLCOMP     EQ      :COMPANY                                      
           AND    GLBRAN     EQ      :BRANCH                                       
           AND    GLACC      EQ      :ACCOUNT                                      
          -----------------------------------------------------------------------
    參數名稱有大小寫之分, 且須符合定義於 STRQMQRY 指令中的參數, 
    而且參數定義必須在其他非參數篩選條件之前, 例如 :
    
                  GLBRAN     EQ      :BRANCH                                       
           AND    GLCOMP     EQ      100                                           
                                                                                   
          -----------------------------------------------------------------------   
    
  2. 設定第一項後,按 Enter 執行鍵, 出現如下畫面:
    Specifying a Dummy Dependent Value Qualifier 
          -----------------------------------------------------------------------  
                       Specify Dependent Value Qualifiers                          
                                                                                   
           Type choices, press Enter.                                              
                                                                                   
             Qualifier type .......  1          1=Query  2=File                    
                                                                                   
             Query or File  .......  DUMMY      Name, F4 for list of files         
               Library   ..........   *libl     Name, #LIBL, F4 for list           
                                                                                   
             For choice 2=File:                                                    
               file member ........             Name, *First, F4 for list          
          -----------------------------------------------------------------------
  3. 要執行此種 QUERY, 不能使用 RUNQRY 指令, 而須使用
    Start Query Management Query (STRQMQRY) 指令如下:
    STRQMQRY QMQRY(library/qry-name) ALWQRYDFN(*YES) +
    QMFORM(*QMQRY) SETVAR((COMPANY 1) (BRANCH 1) (ACCOUNT 12000))
    
    ALWQRYDFN 參數設定為 *YES, 允許 Query Management 執行 query definition(*QRYDFN)
    物件, 而非 query management (*QMQRY) 物件.
    你能指定參數及其參數值於指令 STRQMQRY 中如上述指令,
    或不指定參數及其參數值於指令 STRQMQRY 中,
    而由 Query Management 顯示輸入參數值畫面來設定參數值
    
    當參數為字元型態時要注意使用單引號或三個單引號
    A. 由 Query Management 顯示輸入參數值畫面來設定參數值時, 使用單引號
        STRQMQRY QMQRY(TESTQRYVAR) ALWQRYDFN(*YES)
        Type a value for variable "FROM" and press Enter.
        '19990401'                                       
        Type a value for variable "TO" and press Enter.  
        '19990430'                                       
    
    B.指定參數及其參數值於指令 STRQMQRY 中, 使用三個單引號
        STRQMQRY QMQRY(TESTQRYVAR) ALWQRYDFN(*YES) +
            SETVAR((FROM  '''19990401''') (TO  '''19990430'''))
    
    當參數為數字型態
    A. 由 Query Management 顯示輸入參數值畫面來設定參數值時, 不使用單引號
        STRQMQRY QMQRY(TESTQRYVAR) ALWQRYDFN(*YES)
        Type a value for variable "FROM" and press Enter.
        19990401                                       
        Type a value for variable "TO" and press Enter.  
        19990430                                       
    
    B.指定參數及其參數值於指令 STRQMQRY 中, 單引號可有可無
        STRQMQRY QMQRY(TESTQRYVAR) ALWQRYDFN(*YES) +
            SETVAR((FROM  '19990401') (TO  '19990430'))
            STRQMQRY QMQRY(TESTQRYVAR) ALWQRYDFN(*YES) +
            SETVAR((FROM  19990401) (TO  19990430))

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   應用軟體系統中使用多個 PF 及 LF, 但是常有 PF 及 LF 資料庫資料不一致的情況發生, 要如何處理 ?
......(1999/04/24)

PF 及 LF 中參數 FRCRATIO 定義該系統暫存區儲存幾筆資料筆數時, 才將暫存區資料寫入檔案 ; 系統預設值是 *NONE, 當系統暫存區滿時, 系統自行將暫存區資料寫入檔案,

這在系統負載尖峰時, 由於系統暫存區很快就滿了, 系統更新暫存區的頻率就會提高, 資料庫資料不一致的情況就較不會發生;

但是系統負載較低時, 由於系統暫存區尚未填滿, 資料庫資料不一致的情況就較會發生, 除非將檔案參數 FRCRATIO 定義暫存區儲存幾筆資料筆數,當筆數累計至此參數值時, 系統即將暫存區資料寫入檔案, 至於參數 FRC 值筆數數目需自行調配產生,

若希望有任何修改立即更新檔案, 可將 FRCRATIO 參數值設為 1, 但這會增加系統負載, 需小心設定. CHFPF   FILE(filename)  FRCRATIO(1)

修改參數 FRCRATIO 後, 使用到此檔案的相關程式均需重新 Compiled, 該參數值才會生效.

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  當執行命令 CMPPFM 比對 Source 時,  會有執行錯誤訊息 ? ......(1999/04/24)

若 Source file 的參數 IGCDATA 是 *YES(即 Source file 允許輸入中文資料)時, 而系統報表檔 QUEPRT 參數 IGCDATA 是 *NO時, 由於參數屬性不一致才有錯誤訊息, 將系統報表檔 QUEPRT參數 IGCDATA 改為 *YES 即可.
CHGPRTF    QUEPRT   IGCDATA(*YES)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   因有某些應用軟體會使用 QTEMP 儲存暫時性資料, 為便於做系統維護 , 要如何在同一台 AS/400 系統上由一工作站傳送命令至另一遠端工作站由遠端使用者確認執行 ?......(1999/04/22)

  1. 事先設定遠端工作站訊息序列之中斷訊息處理程式, 一旦接收到含有命令的中斷訊息, 便將命令顯示在畫面上 , 由遠端使用者確認執行
    CHGMSGQ  MSGQ(workstation)  PGM(Break-message-program)

    中斷訊息處理程式(Break-message-program)接收系統傳來的三個參數 :
    PGM  (                                                                +
           &MSGQ       /* MESSAGE QUEUE NAME                           */ +
           &MSGQLIB    /* MESSAGE QUEUE LIBRARY NAME                   */ +
           &MSGKEY     /* MESSAGE KEY                                  */ +
         ) 
    
      DCL  &MSGKEY      *CHAR    4        
      DCL  &MSGQ        *CHAR   10        
      DCL  &MSGQLIB     *CHAR   10 
      DCL  &MSG         *CHAR  512  
      DCL  &RCVMSGTYPE  *CHAR    2  
      DCL  &SENDER      *CHAR   80  
      .
      .
      ./* 截取訊息 */
      RCVMSG  MSGQ( &MSGQLIB/&MSGQ )                                     +
              MSGKEY( &MSGKEY )                                          +
              MSG( &MSG )                                                +
              SENDER( &SENDER )                                          +
              RTNTYPE( &RCVMSGTYPE )                                     
      .
      .
    ENDPGM                                                                
    
  2. 可將命令利用傳遞中斷訊息至遠端工作站訊息序列,
    SNDBRKMSG  MSG(Command) WRKSTN(workstation)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  AS/400 訊息回覆分那幾類 ? 且回覆順序為何 ?......(1999/04/09)

訊息回覆的種類是設定於工作環境設定檔(JOBD)參數 INQMSGRPY,該 JOBD 並被指定於使用者設定檔中, 用以設定使用者如何回覆訊息的方式

參數 INQMSGRPY 值有 :

  1. *RQD : 顯示所有訊息交由使用者回覆(系統預設值)

  2. *DFT : 由系統依各訊息預設回覆值直接回覆

  3. *SYSRPYL : 由系統自動回覆值序列中尋找符合之訊息編號回覆值, 若找到則依設定值自動回覆, 否則顯示訊息交由使用者回覆. 可使用 WRKRPYLE 設定自己喜好的自動回覆值

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  欲使用 AS/400 Folder 時,  Windows 系統回應拒絕存取訊息, 要如何解決 ?......(1999/04/09)

  1. 由於 Folder 檔案系統屬於 DOS  檔案系統, 所以Client 端不論使用 Windows 3.1, 95, 98(即使 95,98 支援長檔名) 均必須使用 DOS 檔案系統的命名規則,即檔名 8 位 + 附屬檔名  3 位. ==> abcdefgh.txt

  2. 下 command WRKFLR , AS/400 系統若顯示 CPF4A86  "Internal system objects are damaged."  Folder function 無法正常運作 ==> 下 command  RCLDLO  DLO(*INT) 或 AS/400 重新開機,系統會自動修復

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   資料庫中若有不正常數字資料常常導致執行程式當掉, 要如何找出不正常數字資料 ?......(1999/03/29)

利用 SQL/400 HEX 十六進位碼函數和 TRANSLATE 函數即可找出不正常數字資料

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  要如何於 SQL/400 中取代某欄位之子字串 ?......(1999/03/29)

例如 field1 為 文字型態, 長度 10 位, 欲將前二位值為 'YY' ,以 'XX' 取代

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  要如何於 SQL/400 中顯示 十六 進位碼 ?......(1999/03/29)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  要如何於 SQL/400 中利用 RRN(指寫入檔案的次序) 處理資料 ?......(1999/03/29)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   要如何於 SQL/400 中計算二日期間的天數 ?......(1999/01/05)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   要如何於 RPG IV 中呼叫 CL 指令 ? ......(1999/01/04)

  1. 宣告 QCMDEXEC API

    D RunCLCmd        PR                  EXTPGM('QCMDEXEC')
    D    CmdStr                    512    CONST OPTIONS(*VARSIZE)
    D    CmdLen                     15  5 CONST
  2. 將指令組成字串參數 WrkStr, 再使用 CALLP 呼叫 CL 指令

    C                  CALLP(E)    RunCLCmd(%TRIM(WrkStr) : +
    C                                       %LEN(%TRIM(WrkStr))

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   要如何於 CL 程式中檢查是否潤年 ? ......(1999/01/04)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   你時常使用 Query/400 產生報表嗎 ? Query/400 所產生的報表均以 " * * * END OF REPORT * * *" 結尾, 如果你不喜歡這個訊息, Query/400 使用訊息檔 QQRYMSG 的訊息代碼 QRX1905 當成 Query/400 所產生的報表結尾訊息, 你能修改或移除訊息內容.......(1998/12/31)

  1. CRTMSGF 建立一新訊息檔
  2. ADDMSGD 將訊息代碼 QRX1905 及輸入報表結尾訊息於參數 MSG 存入新訊息檔, 若不希望有報表結尾訊息出現於報表上, 指定 '    ' 於參數 MSG.
  3. 在執行 query 前下 OVRMSGF(Override message file) 指令, 指定使用前項新訊息檔
  4. 在執行 query 後下 DLTOVR(Delete Override) 指令, 回覆使用系統預設訊息檔

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   在您安裝 Client Access 於用戶端的 PC , 使用者便能利用 Windows 95/98/NT 的網路芳鄰內的 "AS/400 Network" 開啟 AS/400 QSYS.LIB 檔案系統, 如同 PC 的網路磁碟機, 使用者可看到,搬移,刪除所有 AS/400 的檔案, 使用者可將AS/400 的檔案搬移至 Windows 的資源回收桶, AS/400 並不支援  Windows 資源回收桶的還原功能, 這是很危險的, 有方法可以防止嗎 ? ......(1998/12/24)

        所以為了防止此種情事發生, 唯一的方式是不讓使用者利用網路芳鄰存取AS/400 QSYS.LIB 檔案系統, Client Access Host Service 是利用 "QPWFSERVER" 授權清單, 授權那些使用者可透過 Windows 的網路芳鄰存取AS/400 QSYS.LIB 檔案系統, 此授權清單的系統預設值是 *PUBLIC(*USE), 你只要利用指令 EDTAUTL QPWFSERVER , 按執行鍵將出現如下畫面, User *PUBLIC 的授權由 *USE 改為 *EXCLUDE 即可限制一般使用者透過 Windows 的網路芳鄰存取AS/400 QSYS.LIB 檔案系統, 但此方式並無法管制有 *ALLOBJ 特殊權限的使用者.

                            Edit Authorization List                            
                                                                               
 Object . . . . . . . :   QPWFSERVER      Owner  . . . . . . . :   QSYS        
   Library  . . . . . :     QSYS          Primary group  . . . :   *NONE       
                                                                               
 Type changes to current authorities, press Enter.                             
                                                                               
              Object    List                                                   
 User        Authority  Mgt                                                    
 QSYS        *ALL        X                                                     
 *PUBLIC     *USE                /* 將 User *PUBLIC 的授權由 *USE 改為 *EXCLUDE */                                             
                                                                                                                                                         
                                                                               
                                                                                                                                                              
                                                                                                                                                             
                                                                         Bottom
 F3=Exit   F5=Refresh   F6=Add new users                                       
 F11=Display detail object authorities   F12=Cancel   F24=More keys            

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   每次開機後均須手動下指令 STRTCP , STRHOSTSVR 以啟動 TCP/IP 及 CLient Access host service, 有無其他方法可設定開機後自動啟動 TCP/IP 及 CLient Access host service ? ......(1998/12/23)

  1. DSPSYSVAL QSTRUPPGM 找系統啟動後的執行程式
  2. RTVCLSRC 將上述系統啟動後的執行程式返解譯回原始程式
  3. 將下列指令加入該原始程式的後段
    SYS/STRTCP                                          /* 啟動 TCP/IP */                            
    MONMSG MSGID(CPF0000)                                  
    SYS/DLYJOB 300                                  /* 等待 啟動 TCP/IP 動作完成 */ 
    MONMSG MSGID(CPF0000)                                  
    SYS/STRHOSTSVR SERVER(*ALL)   /*   啟動 Client Access Host Server   */                      
    MONMSG MSGID(CPF0000)                                  
  4. Compiled 修改後的啟動程式取代舊的啟動程式; 下次開機後, 就不必再下指令啟動 TCP/IP 及 HOST server.
  5. 於 V4R2 後 STRTCP 已會自動將 Client Access Host Server 啟動, 便不須要於系統啟動後的執行程式加入指令  SYS/STRHOSTSVR SERVER(*ALL)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   於 CLP 中所宣告的檔案僅能從頭到尾讀一次, 要如何於 CLP 中重讀檔案 ? ......(1998/12/21)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   要如何開放某些指令給使用者於指令行(command line)使用, 但又需限制使用者僅能使用被開放的指令  ?......(1998/12/15)

  1. 設定使用者設定檔(User profile) 之參數 LMTCPB(*YES) 限制使用者不得使用指令行
  2. CLP 範例如 1998/12/07 FSTMNUCMD 工具開放某些指令給使用者使用, 但使用者無法使用指令行
  3. 若要用指令行(command line),又要限制開放幾個指令, 範例如下
    /*  ===============================================================  */
    /*  = 說明... REQUEST PROCESSOR                                   =  */
    /*  ===============================================================  */
                                                                           
      PGM                                                                  
                                                                           
      DCL        &MSG        *CHAR     ( 3000    )                         
      DCL        &MSGID      *CHAR     (    7    )                         
      DCL        &MSGDTA     *CHAR     (  100    )                         
      DCL        &MSGF       *CHAR     (   10    )                         
      DCL        &MSGFLIB    *CHAR     (   10    )                         
      DCL        &KEYVAR     *CHAR     (    4    )                         
      DCL        &RTNTYPE    *CHAR     (    2    )                         
      DCL        &REJECT     *LGL                                          
      DCL        &ERRORSW    *LGL
                                              
      MONMSG     ( CPF0000 MCH0000 )   EXEC( GOTO ERROR)                   
    /*  ---------------------------------------------------------------  */
    /*  - 顯示指令行畫面 (QCMD)                                       -  */
    /*  ---------------------------------------------------------------  */
                                                                           
    RECEIVE:                                                               
                                                                           
      CHGVAR     ( &ERRORSW ) ( '0' )    
                                      
      RCVMSG     PGMQ( *EXT )                                             +
                 MSGTYPE( *RQS )                                          +
                 RMV( *NO )                                               +
                 KEYVAR( &KEYVAR )                                        +
                 MSG( &MSG )                                              +
                 RTNTYPE( &RTNTYPE )                                       
      MONMSG     ( CPF2415 )      EXEC( RETURN) /* 使用者按 F3 or F12, 退出程式 */                           
    /*  ---------------------------------------------------------------  */
    /*  - 使用者按 F4  鍵, 顯示指令參數畫面                           -  */
    /*  ---------------------------------------------------------------  */
      IF         ( &RTNTYPE *EQ '10' )                                    +
                                                                          +
        CHGVAR     &MSG        ( '?' *CAT &MSG )                           
                                                                           
      CALL       QCMDCHK           ( &MSG 3000 )                                             
      MONMSG     ( CPF6801 )   EXEC( GOTO  RECEIVE )  
    /*  ---------------------------------------------------------------  */
    /*  - 將指令參數 由小寫轉大寫                                     -  */
    /*  ---------------------------------------------------------------  */
                                                                           
      RMVMSG     PGMQ( *EXT )                                             +
                 MSGKEY( &KEYVAR )                                        +
                 CLEAR( *BYKEY )                                           
                                                                           
      SNDPGMMSG  MSG( &MSG )                                              +
                 TOPGMQ( *EXT )                                           +
                 MSGTYPE( *RQS )                                           
                                                                           
      RCVMSG     PGMQ( *EXT )                                             +
                 MSGTYPE( *RQS )                                          +
                 RMV( *NO )                                                
                                                                           
    /*  ---------------------------------------------------------------------  */
    /*  - 插入你自己撰寫的使用者指令授權程式並傳回該使用者是否可執行輸入指令-  */
    /*  ---------------------------------------------------------------------  */
                                                                           
       CALL       YOURPGM    ( &MSG &REJECT )                                         
                                                                           
       IF         ( &REJECT )  GOTO       RECEIVE                                                
                                                                           
    /*  ---------------------------------------------------------------  */
    /*  - 執行指令                                                    -  */
    /*  ---------------------------------------------------------------  */
                                                                           
      CALL       QCMDEXC                                                  +
                 ( &MSG 3000 )                                             
                                                                           
      GOTO       RECEIVE                                                   
                                                                           
    /*  ---------------------------------------------------------------  */
    /*  - ERROR HANDLER                                               -  */
    /*  ---------------------------------------------------------------  */
                                                                           
    ERROR:                                                                 
                                                                           
      IF         ( &ERRORSW )                                             +
                                                                          +
        SNDPGMMSG  MSGID( CPF9897 )                                       +
                   MSGF( QCPFMSG )                                        +
                   MSGDTA( 'AN UNEXPECTED ERROR OCCURED. SEE JOB LOG.' )  +
                   MSGTYPE( *ESCAPE )                                      
                                                                           
      CHGVAR     &ERRORSW    ( '1' )                                       
      RCVMSG     MSGTYPE( *EXCP )                                         +
                 MSGDTA( &MSGDTA )                                        +
                 MSGID( &MSGID )                                          +
                 MSGF( &MSGF )                                            +
                 MSGFLIB( &MSGFLIB )                                       
                                                                           
      SNDPGMMSG  MSGID( &MSGID)                                           +
                 MSGF( &MSGFLIB/&MSGF )                                   +
                 MSGDTA( &MSGDTA )                                        +
                 TOPGMQ( *SAME )                                          +
                 MSGTYPE( *DIAG )                                          
                                                                           
      GOTO       RECEIVE                                                   
                                                                           
    /*  ---------------------------------------------------------------  */
    /*  - END OF PROGRAM                                              -  */
    /*  ---------------------------------------------------------------  */
      ENDPGM                                                              

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   如果你想知道 AS/400 最近一次的開機過程, 過程中有執行那些步驟及各步驟的執行時間, 你能執行程式
      Call QSYS/QWCCRTEC . 執行程式後會產生一份報表檔 QPSRVDMP , 報表上會列出 AS/400 控制面板上在開機時所出現的參考碼(source panel code), 及其執行時間. ......(1998/12/08)
欲知各參考碼(source panel code)意義, 請參考 AS/400 Service Functions manual (SY44-5902), 此書是隨 AS/400 硬體到貨.

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   由於使用者正使用主畫面, 該使用者便鎖住該畫面物件, 程式人員便無法 compile 加入新選項的主畫面以取代舊主畫面 , 除了所有使用者退至SignOn 畫面, 再 compile 主畫面外, 有無其他方式不管使用者是否正在使用主畫面, 而可以隨時修改畫面 ?.....(1998/12/07)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   RTVSYSVAL 指令僅可傳回 2 位數的年(97,98) , 要如何於 CLP 中取得 4 位數的年(1998)? .....(1998/11/30)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   如何於 RPG 程式中解決 Record  locked 所引起執行程式中斷的問題 ? .............(1998/11/28)

  1. 使用 OPcode(CHAIN,UPDATE) Error Indicator;
  2. 使用 RPG File spec.中的參數 INFDS(File_information);
    且於Definition spec. 中定義  *Status code ("01128" : Record already locked.)
  3. 使用 RPG File spec.中指定參數 INFSR(File_Exeption/Error Subroutine)或於程式中加 *PSSR 子程序;
    Definition spec.
    中定義 PSDS (Program Status Data Structure) position 209 to 213 status code("01128" : Record already locked.); 程式不正常中斷時, 系統會更新 PSDS , 並將控制權交給指定於 INFSR 的子程序 , 藉以解決程式中斷的問題 ; 例如若遇到 Record  locked 時便可傳送訊息給鎖住Record 的使用者請其 Released Record 或通知系統操作員處理;
    以下是程式片段僅供參考:
    
    FFile_name UF A E           K Disk    InfSr( *PSSR ) 
    .
    D PSDS          SDS
    D  Excp_data                  91     170   /* Exception Data 錯誤訊息*/
    D  File_info                 209     243
    D  Status_cde                209     213  /*Status code of last file used 最後使用檔案的狀態碼*/
         .
    C*-------------------------------------------------------------------*
    C*  *PSSR: Error Subroutine for the procedure. *
    C*-------------------------------------------------------------------*
    C        *PSSR             BEGSR
    C                          IF              Status_Cde  = "01128"
    C*  撰寫處理 Record locked 的程序.......
          .例如傳送訊息給鎖住 Record 的工作站或系統操作員 
    C*  視程序 設定傳回值
    C*                         MOVE      "*GETIN"              ReturnPt       *繼續讀取 Record *
    C*                         MOVE      "*CANCL"              ReturnPt       *中斷程式執行*
    C*                         MOVE      "      "              ReturnPt       *將控制權交由 ILE RPG/400 預設處理錯誤的程序
    C                          ELSE
    C*  撰寫處理其他錯誤的程序.......
      .
    C                          ENDIF
    C                          ENDSR     ReturnPt
    C* 須指定傳回值於 OPcode ENDSR 的第二個參數
    

欲知更詳細資料請參考
ILE RPG/400 Programmer's Guide Chapter 11. Handling Exceptions (有範例)
ILE RPG/400 Refference Chapter 5. Exception/Error Data Structures and Subroutines (INFDS
INFSR 資料結構定義)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  如何檢核 CL 指令語法(Command Syntax)符合 AS/400 的指令格式 ? .............(1998/11/25)

依不同狀況有下列二種方法 :

  1. 於 CLP 中使用System API Check Command Syntax (QCMDCHK) API 
    參數 1:指令字串 Command string   I/O;CHAR(*)
    參數 2:指令長度 Length of command string   INPUT;PACKED(15,5)
    例如於 CLP
    PGM
    DCL  &CMD   *CHAR  512
    DCL  &ERRMSG  *CHAR  512
    MONMSG  CPF0000  EXEC(GOTO ERROR)
    CHGVAR &CMD  'WRKSYSSTS'

       /* 亦可輸入 "?WRKSYSSTS"  檢查語法時系統會自動顯示指令參數畫面*/
       /*問號開頭會使系統顯示指令參數畫面 */
    Call QCMDCHK  (&CMD  512)   /* 檢查語法 */
    Call QCMDEXC  (&CMD  512)  /*
    執行指令
    */
    RETURN
    ERROR
    :
    RCVMSG MSGTYPE( *EXCP ) MSG( &ERRMSG )
    CHGVAR &ERRMSG ( 'ERROR:' > &ERRMSG )
    SNDPGMMSG MSG(&ERRMSG) MSGTYPE(*INFO)
    ENDPGM

  2. Command 中參數型態指定 *CMDSTR ,系統會自動檢核該指令語法,但無法列出指令參數畫面輔助供使用者,亦即使用者須自行輸入所有參數;
    例如 "WRKCFGSTS *CTL CTLNAME";
    且指令不得以問號開頭("?WRKSYSSTS"),問號開頭會使系統顯示指令參數畫面;

    例如於 CMD 原始檔中宣告

    /* CRTCMD  CMD(RUNCMD)  PGM(RUNCMDC) */
    CMD  PROMPT('Command To Run')
    PARM  KWD(CMD)  TYPE(*CMDSTR)  LEN(512)   MIN(1)  PROMPT('Command to run:')

    /* Processing PGM of RUNCMD command ; CRTCLPGM PGM(RUNCMDC) */
    PGM (&CMD)
    DCL  &CMD   *CHAR  512
    DCL  &ERRMSG  *CHAR  512
    MONMSG  CPF0000  EXEC(GOTO ERROR)
    Call QCMDEXC  (&CMD  512)  /* 執行指令 */
    RETURN
    ERROR
    :
    RCVMSG MSGTYPE( *EXCP ) MSG( &ERRMSG )
    CHGVAR &ERRMSG ( 'ERROR:' > &ERRMSG )
    SNDPGMMSG MSG(&ERRMSG) MSGTYPE(*INFO)
    ENDPGM

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  如何指定 Interactive Job 於特定的子系統中執行 , 如將 DSP0101開頭的數個工作站指定於 QPGMR 子系統中 ? .............(1998/11/22)

  1. 於子系統定義(Subsystem Descriiption)中指定該工作站名稱(Workstation Name Entry)
    於指令輸入 ADDWSE 指令 , 按 PF4 輸入工作站名稱 "DSP0101*" 及 Subsystem Description name "QPGMR", 按 執行鍵
        ADDWSE SBSD(QPGMR) WRKSTN(DSP0101*)

  2. 於程式中針對指定的工作站使用 TFRJOB 指令 , 能將 Interactive Job 從一子系統轉至另一子系統
        TFRJOB JOBQ(job_queue)

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   如何於 SQL 中將文字轉成數字 ? .............(1998/11/18)

1. 將文字轉成數字 ==> DECIMAL(string_field);(V4R2 以後才有此功能)
    有資料如下 :

*...+....1....+....2....+....3....+....4....
MAXWELL/SMART      000034932NOTOWN        GA

SELECT DECIMAL(SUBSTR(Data,20,9)) FROM IMPORT ==> 傳回值 34932.

2. 將數字轉成文字 ==> DIGITS(number_field) ; 此功能僅傳回數字 , 並不包含正負號及小數點
    有資料如下 : CILUMNX 是四位整數二位小數且值為 -6.28    
         DIGITS(COLUMNX) ===> 傳回值 '000628'

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 有些使用者同時於多台工作站 SignOn進入系統, 要送訊息給使用者 , 但無法確知其真正正在使用之工作站, 系統有傳送中止畫面訊息指令 SNDBRKMSG , 傳送中止畫面訊息至指定工作站 ; 但無法滿足上述狀況 , 有無其他工具傳送中止畫面訊息至同時使用多台工作站的使用者 ? .............(1998/11/11)

要傳送訊息至 "以相同的 USER ID 同時使用多台工作站的使用者" , 亦即以此USER ID SignOn進入系統的所有工作站多將收到訊息 , 不管使用者正在使用那一台工作站; 試試底下指令 , 能滿足此需求

CALL QEZSNDMG  ==> 畫面如下 :
能指定訊息型態中止畫面或要求使用者回覆訊息 ; 輸入訊息 ; 按 F10 傳送

                                 Send a Message                                
                                                                               
 Type information below, then press F10 to send.                               
                                                                               
   Message needs reply  . . . . . .   N            Y=Yes, N=No                 
                                                                               
   Interrupt user . . . . . . . . .   N            Y=Yes, N=No                 
                                                                               
   Message text . . . . . . . . . .                                            
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
   Send to  . . . . . . . . . . . .              Name, F4 for list             
                                                                               
                                                                               
                                                                               
                                                                               
                                                                        More...
 F1=Help   F3=Exit   F10=Send   F12=Cancel                                     

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 如何取得由 Telnet 方式進入系統的 Client 端 IP address ?.............(1998/11/04)

利用 System API QDCRDEVD 取得 IP address ; 使用此範例程式時需輸入工作站名稱當參數 ,
CALL  RTVDEVIPC  PARM('QPADEV0001') ; CL 程式範例如下

PGM (&DEVICENAME)                               
                                                
                                                
/******************************/                
/* PARAMETERS */                                
/******************************/                
DCL &DEVICENAME *CHAR 10                                             
DCL &IPADDRESS  *CHAR 15                                                                                         
                                                
/******************************/                
/* PARAMETERS FOR QDCRDEVD */                   
/******************************/                
DCL &RECEIVER *CHAR 892                                                
DCL &RCVRLENGTH *CHAR 4                                                
DCL &FORMATNAME *CHAR 8 'DEVD0600' /* THE FORMAT FOR DISPLAY DEVICES */
DCL &ERRORCODE *CHAR 4 X'00000000' /* USE NORMAL ERROR HANDLING */     
                                                                       
                                                                       
/******************************/                                       
/* SET LENGTH OF RECEIVER */                                           
/******************************/                                       
CHGVAR %BIN(&RCVRLENGTH) 892                                           
                                                                       
                                                                       
/******************************/                                       
/* GET DEVICE INFO */                                                  
/******************************/                                       
CALL       PGM(QDCRDEVD) PARM(&RECEIVER &RCVRLENGTH +                  
                          &FORMATNAME &DEVICENAME &ERRORCODE)          
CHGVAR &IPADDRESS %SST(&RECEIVER 878 15)                                               
                                                                       
SNDPGMMSG  MSG(&DEVICENAME *BCAT ' IP address is ' +              
                          *cat &ipaddress ) MSGTYPE(*COMP)        
                                                                  
ENDPGM

colormov.gif (4535 bytes)

bullet.gif (530 bytes)  利用系統應用程式介面 System API 的報表儲存及重新印表工具.............(1998/10/28)

Spooled file tools command : RTVSPLF & SPLRTVSPLF
Command Processing Program : RTVSPLC & SPLRTVSPLFC

下載報表工具  ZIP File

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 有那些系統應用程式介面 System API 可供利用於儲存報表與重新列印報表 ? ............(1998/10/24)

要利用 System API 處理報表須使用二種 System API :

QUSRSPLA : Retrive Spooled File Attribute API 取得報表屬性如報表寬度, 份數等
QSPOPNSP : Open Spooled File API 開啟報表檔
QSPGETSP : Get Spooled File Data API 讀取報表資料儲存至 User Space 物件 "Format of the User Space" in topic 3.5.3
QSPCLOSP : Close Spooled File API 關畢報表檔
QSPCRTSP : Create Spooled File API 建立報表檔
QSPPUTSP : Put Spooled File Data API  從 User Space 物件讀取報表資料寫入報表檔

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 找 AS/400 Command 總是輸入 GO CMDXXX (XXX表示 Command 的前 3 位 , 如 WRK, STR, CRT 開頭的 Command) , 如此可能蠻廢時的 , 有一簡單的方式通知你 , 於命令列輸入 STR* , WRK* , CRT* , STRTCP* , A* 等 ,系統即會列出相關字開頭的 Command , 真的很方便 , 試了就知道  ............(1998/10/17)

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 當 STRPASTHR(Start PassThrough) 至另一台 AS/400 時 , 使用者常常未注意 Sign On 畫面系統名稱 , 而從 A 系統 passthrough 至 B 系統 , 再由 B 系統 passthrough 至 A 系統 , 形成迴圈 , 造成操作錯誤及降低效率 , 要如何防止這種情形發生 ?  ............(1998/10/17)

  1. 當使用者從 A 系統 passthrough 至 B 系統 , Sign On 進入 B 系統執行完畢後 , 於結束應用軟體Sign off 時 , 將 Command SIGNOFF 改成 SIGNOFF  ENDCNN(*YES) , 其效能與 ENDPASTHR 相同, 即退出 B 系統並自動回至 A 系統 ; 反之亦然 ; 如此可讓使用者回歸原系統控制 , 不會有迴圈發生

  2. 若不想改程式又想勞永逸 , 可將 A 與 B 系統的 Command SIGNOFF 更改參數預設值從
    ENDCNN(*NO) 改為 ENDCNN(*YES) ; 可同時兼顧 正常的 Sign off 及 End Pasthrough 功能;
    CHGCMDDFT CMD(QSYS/SIGNOFF)  NEWDFT('ENDCNN(*YES)')

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 於通信線路設定時 , 通訊介面參數 V.24 與 V.35 有何差異 ?  ............(1998/10/16)

差異在於 線路頻寬速度

V.24 ==> 2400bps <--> 19200 bps

V.35 ==> 2400bps <--> 128Kbps

colormov.gif (4535 bytes)

bullet.gif (530 bytes)   如何同時將一份報表同時印至數台印表機 ? ............(1998/10/06)

基本上印一份報表至數台印表機 ,必需輪流印 , 而無法同時印一份報表至數台印表機 ,   要達到上述要求有下述四種方法可以採用 :

1. 於程式中將相同的報表資料輸出至多個報表檔 , 於報表檔中或使用 CHGSPLFA 指定印表機

2. 使用 CPYSPLF 將報表備份至資料實體檔 (Physical File) , 再使用 RSTSPLF 再印一份(參考 1998/09/29 之小錦囊), 並使用 CHGSPLFA 指定印表機

3. 使用 QUSRTOOL 中之工具 DUPSPLF , 複製一份報表 , 並使用 CHGSPLFA 指定印表機

4. 建立一使用者並指定輸出印表機於 User Profile 參數 PRTDEV 中 , 於 WRKDIRE (Work with Directory Entries) 中建立一 該使用者目錄入口 , 並使用 SNDNETSPLF 命令於參數 TOUSRID 指定該使用者目錄入口位址 , 系統會自動複製一份報表 , 並將報表印至User Profile 參數 PRTDEV 中指定輸出印表機

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 系統備份無法儲存報表檔 , 要如何儲存報表檔並在需要時可重新列印 ?  ............(1998/09/29)

1. 建立一個長度 202 的資料實體檔 (Physical File) 存放報表 (Spooled File) 資料

CRTPF      FILE(library/spool_db)  RCDLEN(202) +  
             IGCDTA(*YES)  MAXMBRS(*NOMAX)

library/spool_db : 請指定自己的 Library/File

2.執行 CPYSPLF 命令將報表(Spooled File) 資料備份至資料實體檔 (Physical File)中, 並指定參數 CTLCHAR 如下:

CPYSPLF    FILE(spool_file)  TOFILE(library/db_file)  JOB(job number/user/job name)+
             TOMBR(spool_member) MBROPT(*REPLACE)  CTLCHAR(*PRTCTL) 

3. 將報表(Spooled File) 資料備份至資料實體檔 (Physical File)後, 即可將此資料實體檔 (Physical File) 備份至磁帶中保存.

4. 執行 RSTSPLF 命令指定存放報表(Spooled File) 資料之實體檔 (Physical File)及欲重新列印報表資料成員(Member)輸入如下 :

RSTSPLF    FRMFILE(library/spool_db)  FRMMBR(spool_member)

執行 RSTSPLF 命令後, 會產生報表檔名稱為 "存放報表資料實體檔名稱" 及 USERDATAspool_member 之報表  :
例如 : RSTSPLF FRMFILE(QGPL/SPLFDB) FRMMBR(QSYSPRT)
           會產生報表檔名稱為 : SPLFDB 及 屬性 USERDATA 為 QSYSPRT 之報表檔

5. 將下列原始檔上傳至 AS/400

6. 建立 CRTPF       FILE(INPUT)  RCDLEN(202) + 
             IGCDTA(*YES)  MAXMBRS(*NOMAX) Compiled   報表重印程式 RSTSPLFR 使用.

7. Compile 報表重印程式 RSTSPLFR , Compile 完成後可將前項建立之 INPUT 檔案刪除 ,
    再 Compile 命令處理程式原始檔 Processing Program source RSTSPLFC,
    再 下 CRTCMD CMD(RSTSPLF)  PGM(RSTSPLFC) , Compile 命令 Command Source

8. 此工具由於系統指令 CPYSPLF 僅能拷貝文字資料 ,無法拷貝Printer file DDS 中特殊格式屬性(如字元放大 , 格線 , 條碼等) , 故僅適用於正常報表. 若使用此系統指令 CPYSPLF拷貝含有特殊格式屬性的報表 , 系統會顯示此系統指令不支援特殊格式屬性錯誤訊息, 若回 "I" , 系統僅拷貝文字資料, 而遺失特殊格式屬性. 若要儲存有特殊格式屬性的報表 , 需要使用系統應用程式介面 System API , 此工具足以適用於一般性報表.

colormov.gif (4535 bytes)

bullet.gif (530 bytes) 如何將報表檔 (Spooled File) 轉成網頁 (Web Page) 資料   ?  ............(1998/09/15)

1. 建立一個長度 240 的原始檔 (Source Physical File) 存放網頁 (Web Page) 資料

CRTSRCPF   File(WEBSAMP/HTMLDOC)   RCDLEN(240)    IGCDATA(*YES)

WEBSAMP/HTMLDOC : 亦可指定自己的 Library/File ; 只要執行命令時將 Library 加入 Library List 中即可

2. 於原始檔 WEBSAMP/HTMLDOC (Source Physical File 亦可指定自己的 Library/File), 新增一個名稱為 "HTMTAG" 的文字成員(Text type Member) , 並輸入資料如下 :

第一行 : <HTML>
第二行 : <PRE>
第三行 : </PRE>
第四行 : </HTML>

3.  將下列原始檔上傳至 AS/400

4.  Compile 命令處理程式原始檔 Processing Program source ,
     再 下 CRTCMD CMD(CVTSPLWEB)  PGM(CVTSPLWEBC) ,
     Compile
命令 Command Source

5.  執行命令前先將第一項所建立存放網頁 (Web Page) 資料原始檔所在之 Library 加入 Library List