Informix I4GL循环查询
在过去的几天里,我一直在努力解决这个问题,但不知道怎么做。我试图从一个列表中获取3条记录。如果有Informix 4GL专家在那里,我需要一些帮助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 =
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交互式调试器(如果有的话)。