Informix 4GL,怎么打印?

时间:2012-08-31 16:00:30

标签: informix 4gl

我有一个包含17行记录的列(chgkey)。如何在同一行中打印前3条记录(如raw1,raw2,raw3)。现在我可以毫无问题地打印raw1。任何帮助,将不胜感激。下面是我的代码。

    let rpt.chgkey =  null
      select * into z_charge.* from charge where charnum in
          (select shtwrd_no from crbookid where
               crbookid.book_no = rpt.book_no and crbookid.line_no = rpt.line_no )

    let scratch = z_charge.chgkey
    let rpt.chgkey = scratch
         call make_charge_section(scratch) returning rpt.chgkey
    print
        column   1, ESC, "(s0p12h0s3b4099T", ESC, "&a0.5R"
    print
    print  ESC,"&a15.1R", ESC,"&a15C", rpt.chgkey

2 个答案:

答案 0 :(得分:1)

在print语句的末尾使用分号来压缩行尾字符。

  

但是,如果使用分号终止PRINT语句,则会在行尾抑制隐式LINEFEED字符。

PRINT

答案 1 :(得分:0)

如果SELECT语句(现在带有INTO子句)返回多行,除非将其包装在FOREACH循环中,否则将会出现运行时错误。

如果你在REPORT函数中有FOREACH循环,那么它很容易处理;如果数据是通过单独的OUTPUT TO REPORT语句提供的,那就更难了。

假设生活很简单,那么:

DECLARE c CURSOR FOR
    SELECT * INTO z_charge.*
      FROM charge
     WHERE charnum IN
           (SELECT shtwrd_no FROM crbookid
            WHERE crbookid.book_no = rpt.book_no AND crbookid.line_no = rpt.line_no
           )

LET i = 0
FOREACH c
    PRINT COLUMN (i * 20 + 1), z_charge.raw;
    LET i = i + 1
    IF i MOD 3 = 0 THEN PRINT END IF
END FOREACH
IF i MOD 3 != 0 THEN PRINT END IF

循环在适当的列中打印z_charge.raw中的值(您可以像这样对列号进行计算)。当然,这假设原始数据适合20个字符。


DECLARE c CURSOR FOR
    SQL
    SELECT FIRST 3 * INTO z_charge.*
      FROM charge
     WHERE charnum IN
           (SELECT shtwrd_no FROM crbookid
            WHERE crbookid.book_no = rpt.book_no AND crbookid.line_no = rpt.line_no
           )
    END SQL