全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1482
推到 Plurk!
推到 Facebook!

在打印某字段時查詢此字段此時資料的最長長度,且將不足位用'0'補齊

尚未結案
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-28 14:24:22 IP:218.17.xxx.xxx 未訂閱
只時在打印某字段時查詢此字段此時資料的最長長度,且將不足位用'0'補齊.例如A表中有一字段Hcode(char),是從1開始的.當到兩位時比如13﹐這時將10前的9位數前依次加一個'0'.如果到100以后﹐則100以內10以上的兩位前補1個0﹐而1位數前補兩個0﹐依次類推。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-28 14:49:26 IP:218.16.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-28 15:30:37 IP:218.17.xxx.xxx 未訂閱
引言:
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]);
謝謝這位﹐不過不能通過﹐我不明這句﹐Format('%' MaxLen '.' MaxLen 'd',[Query2.FieldByName('InvoiceNo').Value]);你能說明一下嗎﹖且將來出來是這樣嗎﹖要在不足位前補0,而你補MaxLen了是嗎﹖此式一執行報錯。
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-28 15:46:57 IP:218.17.xxx.xxx 未訂閱
引言:
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]);
這位多謝了。 應將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 := ??? 請能依次改好。多謝﹐。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-28 15:54:50 IP:218.16.xxx.xxx 未訂閱
我想你是一個有經驗的編程員所以沒多作解釋...    加在 你報表那個 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-28 16:29:18 IP:218.17.xxx.xxx 未訂閱
謝謝你﹐我是改用自己的﹐不過是一樣的方法﹐不過我相應你的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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-28 16:47:43 IP:218.16.xxx.xxx 未訂閱
抱歉我看漏了你需要處理 char 欄位。我程式的 InvoiceNo 不是字符是數字欄位 (integer 等等),因為使用數字欄位放完全是數字的序號是一般作法。 既然你的欄位是文字欄位,就像你說的 select 時就直接拿闊度就好,最後一句也可改成 QRLabel1.Caption := Format('%' MaxLen '.' MaxLen 'd',[StrToInt(Query2.FieldByName('InvoiceNo').Value)]);
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-28 17:04:47 IP:218.17.xxx.xxx 未訂閱
引言: 抱歉我看漏了你需要處理 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-28 17:26:33 IP:218.16.xxx.xxx 未訂閱
測試的最容易方法 MaxLen := '8'; ShowMessage(Format('%' MaxLen '.' MaxLen 'd',[123]); 應顯示 00000123 我不知道你實質的 Field 是甚樣的,總之你在 [] 裡給一個整數形態 (integer) 的你所要列印的值就可以了。
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-31 10:12:44 IP:218.17.xxx.xxx 未訂閱
引言: 測試的最容易方法 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)]);就可以通過.
系統時間:2024-04-23 21:18:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!