在打印某字段時查詢此字段此時資料的最長長度,且將不足位用'0'補齊 |
尚未結案
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
Form Private : MaxLen : String; Report BeforePrint : Query1.SQL.Text := 'select Max(InvoiceNo) from Invoice'; Query1.Active := true; MaxLen := IntToStr(Length(Query1.Fields[0].AsString)); DataBand BeforePrint : QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value]); |
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
引言:謝謝這位﹐不過不能通過﹐我不明這句﹐Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value]);你能說明一下嗎﹖且將來出來是這樣嗎﹖要在不足位前補0,而你補MaxLen了是嗎﹖此式一執行報錯。Form Private : MaxLen : String; Report BeforePrint : Query1.SQL.Text := 'select Max(InvoiceNo) from Invoice'; Query1.Active := true; MaxLen := IntToStr(Length(Query1.Fields[0].AsString)); DataBand BeforePrint : QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value]); |
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
引言:這位多謝了。 應將Query1.SQL.Text := 'select Max(InvoiceNo) from Invoice';改為 Query1.SQL.Text := 'select Max(length(InvoiceNo)) from Invoice'; 在前加變量maxl:integer; maxl:=length(Query1.filedbyname('InvoiceNo').asstring); 這時應將 QRLabel1要改寫成最大的位數(只是位數不足maxl才改) 所以剛才的 QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value]);要改成QRLabel1.Caption := ??? 請能依次改好。多謝﹐。Form Private : MaxLen : String; Report BeforePrint : Query1.SQL.Text := 'select Max(InvoiceNo) from Invoice'; Query1.Active := true; MaxLen := IntToStr(Length(Query1.Fields[0].AsString)); DataBand BeforePrint : QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value]); |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
我想你是一個有經驗的編程員所以沒多作解釋... 加在 你報表那個 Form 的 Private 宣告 :
MaxLen : String;加入 你 QuickRpt 元件的 BeforePrint 事件 (Query1, InvoiceNo, Invoice 等換成你自己用的元件,欄位名稱, Table 名稱等): Query1.SQL.Text := 'select Max(InvoiceNo) from Invoice'; // 找該欄位的最大值 Query1.Active := true; MaxLen := IntToStr(Length(Query1.Fields[0].AsString)); //最大值的長度,但以 String 來儲存方便之後使用加在你列印該欄位的 Band 的 BeforePrint 事件 (QRLabel1, Query2, InvoiceNo 等換成你的元件名稱): QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value]);Format 是用作將一次文字數字等資料格式化,第一個參數是格式,第二個參數是填入的資料。詳情請看 Help 例 : 如 Invoice Table 的最大 InvoiveNo 值是 8765, 那 MaxLen 就會是 4 最後的一行會自動變成 QRLabel1.Caption := Format('%4.4d',[Query2.FieldByName('InvoiceNo').Value]); % 就是從第二個參數提取一個資料填入 d 就是 decimal 數字 第一個4 就是說要佔4個位, 之後的.4 就是說若不足四位用 0 補滿 你說有 Error, 是因為你沒放對地方沒改回你的元件名呢, 還是全改好後也有 Error? 是甚麼 Error? Post 你的 code 出來大家才知道啊。 |
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
謝謝你﹐我是改用自己的﹐不過是一樣的方法﹐不過我相應你的InvoiceNo是字符型﹐所以最后一句QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value])不對. 可你的InvoiceNo是字符型的嗎﹖如是此式就不對了 Query1.SQL.Text := 'select Max(InvoiceNo) from Invoice'; 因它的結果不是我想要的。不信你隨便找十几個數﹐當然是字符。字符9比字付10大.
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
引言: 抱歉我看漏了你需要處理 char 欄位。我程式的 InvoiceNo 不是字符是數字欄位 (integer 等等),因為使用數字欄位放完全是數字的序號是一般作法。 既然你的欄位是文字欄位,就像你說的 select 時就直接拿闊度就好,最後一句也可改成 QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[StrToInt(Query2.FieldByName('InvoiceNo').Value)]);謝謝﹐因我是試﹐所以我自己做個資料表﹐跟你的寫法一樣﹐不論是字符(就是象你所說的處理)或整型都是最后一句報表錯﹐意思是,[StrToInt(Query2.FieldByName('InvoiceNo').Value)不是整型﹐奇怪﹖ |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
引言: 測試的最容易方法 MaxLen := '8'; ShowMessage(Format('%' MaxLen '.' MaxLen 'd',[123]); 應顯示 00000123 我不知道你實質的 Field 是甚樣的,總之你在 [] 裡給一個整數形態 (integer) 的你所要列印的值就可以了。 謝謝Justmade 我試出來了﹐沒錯﹐不過你給我的這句要改 QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[StrToInt(Query2.FieldByName('InvoiceNo').Value)]);應為 QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[StrToInt(Query2.FieldByName('InvoiceNo').Asinteger)]);就可以通過. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |