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

請問如何製作雙報表?!

 
linand
一般會員


發表:4
回覆:2
積分:1
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-03-16 22:20:19 IP:61.221.xxx.xxx 未訂閱
請問站長大人:: 你們都如何用qreport 製做雙報表的 ?? 如下:: 比如table中有d1,d2,d3三個欄位, 要在報表中顯示如下:: d1,d2,d3,d1,d2,d3 其中左右彼此不能重複,比如左邊顯示單號,右邊即是雙號??? lin and
------
lin and
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-03-16 22:25:39 IP:192.168.xxx.xxx 未訂閱
引言: 請問站長大人:: 你們都如何用qreport 製做雙報表的 ?? 如下:: 比如table中有d1,d2,d3三個欄位, 要在報表中顯示如下:: d1,d2,d3,d1,d2,d3 其中左右彼此不能重複,比如左邊顯示單號,右邊即是雙號??? lin and
1.不要採用Datasource連結QuickRep 2.將資料先放在Array中,先排好二維陣列,也就是要顯示的方式 3.在QuickRep的NeedData事件中將陣列填入QuickRep中的QRLabel 這樣說明,了嗎? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
scottliou
版主


發表:16
回覆:56
積分:47
註冊:2002-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-03-17 20:49:27 IP:61.70.xxx.xxx 未訂閱
我的作法是比較複雜 1.Create temp Table var table:TTable; begin with table do begin databasename:=.... //設定為異動檔路徑 tablename:=....//讀取異動檔名 with fielddefs do begin clear; add('d1L',ftstring,10); add('d2L',ftstring,10); add('d3L',ftstring,10); add('d1R',ftstring,10); add('d2R',ftstring,10); add('d3R',ftstring,10); end; with indexdefs do ....... createtable; table.open; //readData 讀入資料.... with query do begin first; while not eof do begin if recordcount mod 2 = 1 then begin table.append; table.fieldbyname('d1L').asstring:=....; ... end else begin table.fieldbyname('d1R').asstring:=...; .... post; end; next; end; end; if state<>dsBrowse then post; end; try QuickRep1.preview; // or print finaly table.close; delete(....)//異動檔 end; end; ~~~~~~~~~~~~~~~~ 有夢想最美......
------
~~~~~~~~~~~~~~~~
有夢想最美......
peipei36
一般會員


發表:8
回覆:51
積分:16
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-03-19 02:21:25 IP:61.59.xxx.xxx 未訂閱
好像也可以直接把兩組d1,d2,d3都擺TQRLabel 然後在DetailBand1BeforePrint寫程式碼... 像這樣(要先select出要的順序)..
  QRLabel1.Caption := Query1.Fields[0].AsString;
  QRLabel2.Caption := Query1.Fields[1].AsString;
  QRLabel3.Caption := Query1.Fields[2].AsString;
  Query1.Next;
  if not Query1.IsEmpty then
    begin
      QRLabel4.Caption := Query1.Fields[0].AsString;
      QRLabel5.Caption := Query1.Fields[1].AsString;
      QRLabel6.Caption := Query1.Fields[2].AsString;
    end;
不曉得這樣寫會不會比較不好?!
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-03-19 07:56:09 IP:192.168.xxx.xxx 未訂閱
引言: 好像也可以直接把兩組d1,d2,d3都擺TQRLabel 然後在DetailBand1BeforePrint寫程式碼... 像這樣(要先select出要的順序)..
  QRLabel1.Caption := Query1.Fields[0].AsString;
  QRLabel2.Caption := Query1.Fields[1].AsString;
  QRLabel3.Caption := Query1.Fields[2].AsString;
  Query1.Next;
  if not Query1.IsEmpty then
    begin
      QRLabel4.Caption := Query1.Fields[0].AsString;
      QRLabel5.Caption := Query1.Fields[1].AsString;
      QRLabel6.Caption := Query1.Fields[2].AsString;
    end;
不曉得這樣寫會不會比較不好?!
這樣是不錯,但是當資料中有跳號的情形,此法就不方便用, 所以我才會用Array: 1.不用多佔Database空間 2.用記憶體速度較快 3.Array可以自由安排,兩欄三欄都很方便 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
peipei36
一般會員


發表:8
回覆:51
積分:16
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-03-19 09:31:05 IP:211.74.xxx.xxx 未訂閱
對哄~~跳號就skk了...^^~ 如果左邊與右邊的東西以select分得開的話(或當初可直接產生 到兩個temp table).. 也可以用兩個Query,一邊管一個,不過,要以RecordCount多的為主導(自動移Next).. 例如: if Query1.RecordCount > Query2.RecordCount.. => QuickRep1及TQBText等自動連結的元件都設給它.. Query2那邊則以TQRLabel自己寫入Caption... 這樣寫的話,可嗎?! 對了,請教站長,以記憶體Array處理時, 當資料量大時(又大到什麼樣的程度?!),您怎麼處理?!thx~
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-03-19 11:34:06 IP:192.168.xxx.xxx 未訂閱
引言: 對了,請教站長,以記憶體Array處理時, 當資料量大時(又大到什麼樣的程度?!),您怎麼處理?!thx~
不知Delphi Array上限多少,我的資料量還沒那麼大! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
linand
一般會員


發表:4
回覆:2
積分:1
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-03-20 07:13:30 IP:61.221.xxx.xxx 未訂閱
感謝站長和各位同好不吝詳解!! 小地銘感五內!! 謝啦!! lin and
------
lin and
chenyk
高階會員


發表:14
回覆:95
積分:171
註冊:2002-07-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-27 21:04:04 IP:211.76.xxx.xxx 未訂閱
請教站長大大 可以對Array的方式做個範例嗎? 我試不出來ㄋㄟ 下面是我測試的Code var a_Buf : array of array of String; ... procedure Tfrm_Qrp.Qrp_BaseNeedData(...); var i,j : Integer; begin MoreData := true; for i:=0 to High(a_Buf) do for j:=0 to High(a_Buf[i]) do QrLabel1.Caption := a_Bug[i,j]; MoreData := false; end; 以上的程式,a_Buf內有多筆資料,但預覽石只顯示一行,不知道是哪作錯了? 謝謝
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-28 12:56:20 IP:211.76.xxx.xxx 未訂閱
qrband 有個屬性 forceNewColumn 應該套套這個屬性就可以了
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-28 17:38:52 IP:192.168.xxx.xxx 未訂閱
引言: 請教站長大大 可以對Array的方式做個範例嗎? 我試不出來ㄋㄟ 下面是我測試的Code var a_Buf : array of array of String; ... procedure Tfrm_Qrp.Qrp_BaseNeedData(...); var i,j : Integer; begin MoreData := true; for i:=0 to High(a_Buf) do for j:=0 to High(a_Buf[i]) do QrLabel1.Caption := a_Bug[i,j]; MoreData := false; end; 以上的程式,a_Buf內有多筆資料,但預覽石只顯示一行,不知道是哪作錯了? 謝謝
OnNeedData這個函式是一個迴圈呼叫一次的 將var i,j : Integer;放到外部變數 一次填上一行的資料 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
chenyk
高階會員


發表:14
回覆:95
積分:171
註冊:2002-07-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-12-29 21:58:04 IP:61.223.xxx.xxx 未訂閱
問題已經得到解決了 感謝大大的解答..^^ 可是我弄不懂 hahalin 大大提的 forceNewColumn 屬性的用法 能舉例一下嗎??
系統時間:2024-05-12 0:53:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!