การเปลี่ยนชื่อ 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