使用动态SQL的RPG文件无法显示数据来显示文件

问题描述 投票:0回答:1

我写了动态SQL来显示一个学生的信息,当用户输入ID时,输入了学号,显示文件中的下一屏信息没有数据。所有字段都来自 WUSTDP,我还没有到达使用其他文件/表的部分。

我希望看到有关学生的信息,包括地址、电话号码、ssn、姓名和电子邮件

显示文件

                                            INDARA
     A                                      CA12(12 'CANCEL')
     A                                      CA03(03 'EXIT')
     A          R STUDSEL
     A                                  1  2'Lab 12'
     A                                  1 30'Wibaux University'
     A                                  2 23'Student Registration aplication'
     A                                  1 71DATE
     A                                  6 23'Student Number'
     A                                  9 23'Type value, then enter.'
     A                                 15  3'F3=Exit  F12=Cancel'
     A            STUDNT         9D  I  6 40
     A          R DISPSTUD
     A                                  1  2'Lab 12'
     A                                  1 30'Wibaux University'
     A                                  2 23'Student Registration aplication'
     A                                  1 71DATE
     A                                  3 10'Student ID:'
     A                                  4 10'Student Name:'
     A                                  5 10'Address:'
     A                                  6 10'Phone:'
     A                                  7 10'Email:'
     A                                 16  4'F3=Exit  F12=Cancel'
     A            STUDNAME      36   B  4 30
     A            ADDRESS       39   B  5 30
     A            PHONE     R        B  6 30REFFLD(STUDREC/PHONE FLIGHT2023/WUS-
     A                                      TDP)
     A            SEMAIL    R        B  7 30REFFLD(STUDREC/SEMAIL FLIGHT2023/WU-
     A                                      STDP)
     A                                  9 10'Section Number'
     A            SECTION   R        B  9 30REFFLD(SECREC/SECTION FLIGHT2023/WU-
     A                                      SCTP)
     A            STUSSN    R        B  3 30REFFLD(STUDREC/STUSSN FLIGHT2023/WU-
     A                                      STDP)

     A          R REGCOMPLT
     A                                  1  2'Lab 12'
     A                                  1 30'Wibaux University'
     A                                  2 23'Student Registration aplication'
     A                                  1 71DATE
     A                                  3 10'Student ID:'
     A                                  4 10'Student Name:'
     A                                  5 10'Address:'
     A                                  6 10'Phone:'
     A                                  7 10'Email:'
     A                                  9 10'Class Information'
     A                                 10 10'Dept:'
     A                                 10 20'Course:'
     A                                 10 35'Section:'
     A                                 10 52'Credits:'
     A                                 11 10'Meets:'

     A                                 16  4'F3=Exit  F12=Cancel'
     A            STUSSN    R        B  3 30REFFLD(STUDREC/STUSSN FLIGHT2023/WU-
     A                                      STDP)
     A            STUDNAME      36   B  4 30
     A            ADDRESS       39   B  5 30
     A            PHONE     R        B  6 30REFFLD(STUDREC/PHONE FLIGHT2023/WUS-
     A                                      TDP)
     A            SEMAIL    R        B  7 30REFFLD(STUDREC/SEMAIL FLIGHT2023/WU-
     A                                      STDP)
     A            SECTION   R        B  9 30REFFLD(SECREC/SECTION FLIGHT2023/WU-
     A                                      SCTP)
     A            DEPT      R        B 10 15REFFLD(CRSREC/DEPT FLIGHT2023/WUCRS-
     A                                      P)
     A            COURSE    R        B 10 28REFFLD(CRSREC/COURSE FLIGHT2023/WUC-
     A                                      RSP)
     A            CREDIT    R        B 10 60REFFLD(CRSREC/CREDIT FLIGHT2023/WUC-
     A                                      RSP)
     A            SECTION1  R        B 10 44REFFLD(SECREC/SECTION FLIGHT2023/WU-
     A                                      SCTP)
     A            SECDAY    R        B 11 17REFFLD(SECREC/SECDAY FLIGHT2023/WUS-
     A                                      CTP)
     A            SECTIM    R        B 11 21REFFLD(SECREC/SECTIM FLIGHT2023/WUS-
     A                                      CTP)
     A                                 13 10'Press enter to confirm enrolment'
     A          R REGMSG
     A                                  1  2'Lab 12'
     A                                  1 30'Wibaux University'
     A                                  2 23'Student Registration aplication'
     A                                  1 71DATE
     A                                 11 25'Registration completed'
     A                                 12 21'You have been added to the section-

     A                                      .'
     A                                 18 13'Press Enter to continue'
     A                                 20  1'F3=Exit   F12 = Cancel'
     A          R ERROR
     A                                  1 28'ERROR'
     A                                  4 14'oNE OR MORE THINGS WERE ENTERED IN-
     A                                      CORRECTLY'
     A                                 10  2'F3=EXIT   F12=CANCEL'
     A          R RECORD1

     A*%%RS+<record-sequences>
     A*%%RS+ <sequence name="Untitled">
     A*%%RS+  <device type="display" width="80" height="24" />
     A*%%RS+ </sequence>
     A*%%RS </record-sequences>                                                

SQLRPGLE 文件

**FREE
//--------------------------------------------------------- WUSTDP, WUSCTP, WUCRSP, and WUENRLP
// AUTHOR: VICTOR HERNANDEZ
// DATE: 3/8/2024
// PROGRAM NAME: LAB12RPG
// PURPOSE: ALLOW A STUDENT TO INTERACT WITH A DISPLAY FILE IN ORDER TO SIGN UP FOR CLASSES
// --------------------------------------------------------FILES
//ctl-opt option(*nodebugio:*srcstmt) ;

DCL-F LAB12SCRN1 WORKSTN INDDS(INDICATORS);
DCL-F WUSTDP  USAGE(*OUTPUT:*INPUT);
DCL-F WUSCTP  USAGE(*OUTPUT:*INPUT);
DCL-F WUCRSP  USAGE(*OUTPUT);
DCL-F WUENRLP USAGE(*OUTPUT);
//---------------------------------------------------------VARIABLES
Dcl-ds Indicators len(99);
  Exit      Ind pos(3);    //Exit
  Cancel    Ind pos(12);   //Cancel
  FKey      Ind pos(25);   //vldcmdkey
  StudIDErr Ind pos(30);   //Student ID error
  SecNumErr Ind pos(35);   //Section number error
  Enter     Ind pos(40);   //Enter

END-DS;
//---------------------------------------------------------VARIABLES
dcl-s   SqlString char(100);
//---------------------------------------------------------DATA STRUCTURES
dcl-ds StudInfo;
  xStussn   Zoned(9:0);
  xStudname char(36);
  xAddress  char(39);
  xPhone    zoned(10:0);
  xSEmail   char(30);
END-DS;

dcl-ds ClassInfo;
  XDept    char(3);     //WUCRSP
  XCourse  zoned (3:0); //WUCRSP & WUSTDP
  XSection zoned(5:0);  //WUSCTP & WUENRLP
  XSecday  char(3);     //WUSCTP
  xsectim  zoned(4:0);  // WUSCTP
  XCredit  zoned(1:0);  //WUCRSP
END-DS;
//---------------------------------------------------------Main


  Exfmt Studsel;

  SqlString = 'SELECT STUSSN, (SFNAME CONCAT " " CONCAT SLNAME),  '+
    '(STREET CONCAT " " CONCAT CITY CONCAT " " CONCAT STATE),     '+
    'PHONE, SEMAIL                                                '+
    'FROM WUSTDP                                                  '+
    'WHERE STUSSN = ?';

  clear StudInfo;

  EXEC SQL PREPARE CUR FROM :SqlString;
  //exec sql EXECUTE CUR USING :StudInfo;

  EXEC SQL DECLARE STUDCUR CURSOR FOR CUR;

  EXEC SQL OPEN STUDCUR using :Studnt;

  EXEC SQL FETCH STUDCUR INTO :StudInfo;

  STUSSN = XSTUSSN;
  STUDNAME = XSTUDNAME;
  ADDRESS = XADDRESS;
  PHONE = XPHONE;
  SEMAIL = XSEMAIL;

  Exfmt Dispstud;

Exec SQL close studcur;
*Inlr = *On;
Return;                                                                           

display file output after entering student id/ssn

sql db2 rpgle embedded-sql
1个回答
0
投票

我不能称自己是显示文件方面的大专家,但在我看来,值得做以下事情:

  • 对于所有记录格式,指定 PUTOVR 和 OVERLAY 属性
  • 对于所有字段,指定 OVRDTA 属性

此外,对于 STUDNT 字段,我不会将模式设置为 I,而是设置为 B。对于所有其他字段(如果它们不打算更改)- 不是 B,而是 O

此外,在我看来,在这种情况下不需要动态 SQL - 它更消耗资源。静态SQL在这里更合适。

exec SQL declare curGetStudent cursor for
  SELECT STUSSN, 
         (SFNAME CONCAT " " CONCAT SLNAME), 
         (STREET CONCAT " " CONCAT CITY CONCAT " " CONCAT STATE),
         PHONE, 
         SEMAIL
    FROM WUSTDP
   WHERE STUSSN = :Studnt;

exec SQL open curGetStudent;

exec SQL fetch curGetStudent into :StudInfo;

此外,如果选择的结果是一条记录,则不需要光标。可以直接

exec SQL SELECT STUSSN, 
                (SFNAME CONCAT " " CONCAT SLNAME), 
                (STREET CONCAT " " CONCAT CITY CONCAT " " CONCAT STATE),
                PHONE, 
                SEMAIL 
           INTO :StudInfo
           FROM WUSTDP
          WHERE STUSSN = :Studnt;
© www.soinside.com 2019 - 2024. All rights reserved.