2012-08-31 91 views
1

我有一列(chgkey)有17行記錄。如何打印同一行中的前3條記錄(如raw1,raw2,raw3)。現在我可以打印raw1而沒有任何問題。任何幫助,將不勝感激。下面是我的代碼。Informix 4GL,如何打印?

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 
+0

你需要了解你有什麼更清晰。目前還不清楚您是否在名爲'raw1','raw2'和'raw3'的表'charge'中有3列,或者您是否有單個列'raw',並且您想要打印來自記錄1,2和3的信息在第1行,然後是來自第2行的記錄4,5,6的信息,等等。我在回答中假設後者。你還沒有解釋你的控制代碼象形文字。 –

回答

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 
+0

對不起,沒有三行,我的意思是我有一列17行的記錄,從該記錄我想要的只是前3個記錄打印。 – MJJ3

+0

選擇第一個3 ...順序...?唯一的技巧是在I4GL中,您需要在SQL ... END SQL塊中寫入該SELECT。 –

1

在打印語句的末尾使用分號來壓縮行尾字符。

但是,如果用分號終止PRINT語句,則可以在行末尾隱藏隱式LINEFEED字符。

PRINT

+0

沒有,這不會給我一個致命的錯誤 – MJJ3