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 に答える