วันอังคารที่ 15 มีนาคม พ.ศ. 2559

Rename Field while Running RPG/400

การเปลี่ยนชื่อ Field ใน RPG ILE
    มีแนะนำใน Internet มาก- หาได้ง่าย ... ไม่ขออธิบายน๊ะครับ
แต่การเปลี่ยนชื่อ Field ใน RPG/400 หาได้ "ยากกว่า"

การใช้งาน + ปัญหาที่พบ

- มีการใช้หลาย File ที่มี Write,Delete,Update  ชื่อ Field  "ซ้ำกัน" 
  ตย.1  File = Order     มี   field ORDER
            File = Invoice   ก็มี field ORDER

  ตย.2  จะลบข้อมูลที่ซ้ำ (ด้วย RPG/400)  โดยเลือก เปิด L-File 2 ตัว
           L-File ตัวแรก  ชี้จุดเริ่มต้น   
           L-File อีกตัวใช้   ตรวจและ "ลบ"

- ปัญหาที่พบ คือ  หลัง compile ตัวแปรทั้ง 2 จะใช้  พื้นที่  "ร่วมกัน"  
          ตัวแปรจะ  จะเก็บค่า  "ล่าสุด"  ไว้เท่านั้น 
          ถ้าเผลอนำค่านี้  ไปชี้เพื่อ  Write, Update, Delete จะ "ผิด"
                จะพบปัญหา  เมื่อ  ใช้เทคนิคเขียน code แบบสั้น (จัดการ file แบบง่าย)
                             มาเขียนงานที่เริ่มซับซ้อน  (ใช้ย่อ แบบผิดประเภท)

ทางแก้ไข

- ย้ายค่า ตัวแปร ไปเก็บที่อื่น แล้ว ย้ายกลับมา
          ไม่เหมาะ ถ้ามีจำนวน Field มาก  (เริ่มยาว)
- สร้าง Logical File ใหม่   โดย rename ใน Logical File 
          ไม่เหมาะ ถ้า file ขนาดใหญ่ (Index นาน) แต่ใช้งานชั่วคราว
- เปลี่ยนชื่อ Field ใน File ขณะ Run

วิธีการประกาศ

+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 .
 Ircd-fmt                                                 
 I              old-field                       new-field 

ตัวอย่าง

ข้อมูล Logical File (ข้อมูลเรียงตามนี้)

RPG เปิดใช้ ทั้ง 2 Logical File  โดยชี้ไป   ต่าง Row

FSQL010L1IF  E           K        DISK                    
FSQL010L2IF  E           K        DISK                    
 *------------------------------------------------------* 
ISQL010R1                                                 
I              L1EPNO                          AAEPNO     
I              L1EDUC                          AAEDUC     
 *------------------------------------------------------* 
C           KL114     KLIST                               
C                     KFLD           PLAC    2            
C                     KFLD           DIVI    2            
C                     KFLD           OPEC    2            
C                     KFLD           EPNO    6            
C           KL214     KLIST                               
C                     KFLD           PLAC                 
C                     KFLD           DIVI         
C                     KFLD           OPEC         
C                     KFLD           EDUC    1    
C                     MOVEL'T2'      PLAC         
C                     MOVEL'72'      DIVI         
C                     MOVEL'11'      OPEC         
C                     MOVEL'D'       EPNO         
C           KL114     CHAINSQL010L1             80
C                     MOVEL'1'       EDUC         
C           KL214     CHAINSQL010L2             80
C           *IN80     IFEQ '0'                    
C                     END                         

ดูค่าจากการ Debug (StrISDB)
     ตัวแปร  AAEPNO, AAEDUC แสดงค่า แตกต่างกันกับ  L1EPNO,L1EDUC

ไม่มีความคิดเห็น:

แสดงความคิดเห็น