1

最近几天我正在尝试解决这个问题,但不知道该怎么做。我正在尝试从列表中获取 3 条记录。如果有任何 Informix 4GL 专家,我需要一些帮助。

        declare s_curs cursor for
          SELECT * FROM crcharge
                WHERE chargenum IN
                 (SELECT shtwrd_no FROM crbookid WHERE crbookid.book_no = rpt.book_no)

                  let chgkey_count = 1
            FOREACH s_curs into z_charge.*
                  let t_col = 15
               if  chgkey_count <= 3 then
                  let chgkey_count = chgkey_count + 1
                  let chgkey_count = t_chgkey
                  let scratch = z_charge.chgkey
                  let rpt.chgkey = scratch
                  call make_charge_section(scratch) returning rpt.chgkey
                  print
                     column 1, ESC, "&a15.5R",ESC,"&a12C", rpt.chgkey #t_col+2 ,

               end if
            END FOREACH
4

1 回答 1

0

我认为您的问题是我在代码的以下(温和)修订中注释掉的那一行:

DECLARE s_curs CURSOR FOR
    SELECT * FROM crcharge
     WHERE chargenum IN
           (SELECT shtwrd_no FROM crbookid WHERE crbookid.book_no = rpt.book_no)

LET chgkey_count = 0
FOREACH s_curs INTO z_charge.*
    IF chgkey_count >= 3 THEN
        EXIT FOREACH
    END IF
    LET chgkey_count = chgkey_count + 1
    --LET chgkey_count = t_chgkey        -- Probable problem
    LET scratch = z_charge.chgkey
    LET rpt.chgkey = scratch
    CALL make_charge_section(scratch) RETURNING rpt.chgkey
    PRINT COLUMN 1, ESC, "&a15.5R",ESC,"&a12C", rpt.chgkey
END FOREACH

我想我会通过编写来进一步简化代码:

LET chgkey_count = 0
FOREACH s_curs INTO z_charge.*
    IF chgkey_count >= 3 THEN
        EXIT FOREACH
    END IF
    LET chgkey_count = chgkey_count + 1
    LET rpt.chgkey = make_charge_section(z_charge.chgkey)
    PRINT COLUMN 1, ESC, "&a15.5R",ESC,"&a12C", rpt.chgkey
END FOREACH
于 2012-09-04T21:41:52.607 回答