Informix I4GL循环查询

Informix I4GL循环查询,informix,4gl,Informix,4gl,在过去的几天里,我一直在努力解决这个问题,但不知道怎么做。我试图从一个列表中获取3条记录。如果有Informix 4GL专家在那里,我需要一些帮助 declare s_curs cursor for SELECT * FROM crcharge WHERE chargenum IN (SELECT shtwrd_no FROM crbookid WHERE crbookid.book_no =

在过去的几天里,我一直在努力解决这个问题,但不知道怎么做。我试图从一个列表中获取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

我认为您的问题在于我在以下代码轻度修订中注释掉的那一行:

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

很难理解这是怎么回事,但这让chgkey_count=chgkey_count+1,然后让chgkey_count=t_chgkey,有点脱离了代码..你的术语是可疑的;你无法从列中获取记录,但可以从表中获取。我尝试过,但我认为我们遗漏了一些东西,而且我可能会将其发布到IIUG上。谢谢。我同意,但你没有说出什么问题,真的。例如,您是否尝试在代码中的点显示关键数据,如chgkey_count和z_charge.chkkey?执行FOREACH的频率太高还是不够?SELECT将返回任何内容吗?选择中是否缺少条件?你能展示表格的样本数据吗;你能显示足够多的表模式来支持示例数据吗?现在它是这样打印的34CC 25394a结果假设是这样打印的CC 2594,CC 253a。谢谢你去掉转义码,看看没有转义码会打印什么。也就是说,删除对ESC的两个引用和两个文本字符串;第1列也做得不多。因此,请尝试打印,或者,如果愿意的话,去掉字符串文本。看看你得到了什么。如果您没有获得正确的输出,则可能是获取了错误的数据,或者是make_charge_section函数把事情搞砸了。如果报告允许显示语句,则使用显示语句来解释正在发生的情况;阿菲尔,是的。或者使用I4GL交互式调试器(如果有的话)。