請問各位前輩如何把已收集好的 Table 資料用陣列方式列印成報表 |
答題得分者是:P.D.
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
[code delphi] procedure TT539_N123_Fm1.HemisphereButton7Click(Sender: TObject); var SQL_2:string; N2_Tab:array[1..38] of string; begin SQL_2:='SELECT NUMS,COUNT(NUMS) FROM KG539_2NUM GROUP BY NUMS'; Qry_2N.Close; Qry_2N.SQL.CLEAR; Qry_2N.SQL.ADD(SQL_2); Qry_2N.Open; if Qry_2N.RecordCount =0 then SHOWMESSAGE('沒有開獎記錄...'); while not Qry_2N.eof do begin if Qry_2N.FIELDBYNAME('NUMS').AsString = '00' then SHOWMESSAGE('沒有開獎記錄...') else N2_Tab[i] := Qry_2N.FIELDBYNAME('NUMS').AsString; Total_DBPrt_Fm2.QRLab_TGNo.Caption := N2_Tab[i] ; //→ 要列印出陣列報表 SHOWMESSAGE(N2_Tab[i]); Qry_2N.Next; [/code] 問題是 (N2_Tab[i]); →只會秀出 01 .... 到 39的號碼 小弟要的是 例如:01 x 9 02 x 5 03 x 6 .... 不知要如何下陣列的語法,請教各位前輩指導 現在附上 Table |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
要印報表與在螢幕上顯示是兩回事, 報表後端常用是連結資料庫而不是陣列
你可以先建立一個 temp database, 欄位是你的 no1 ~ no38 型別 integer, 只要把統計出來的1 - 38 的出現次數, 新增一筆(append record), 分別填入所屬的欄位中就好了, 接下來就是如何應用報表, 使其連結印出 ===================引 用 K1086 文 章=================== [code delphi] procedure TT539_N123_Fm1.HemisphereButton7Click(Sender: TObject); var SQL_2:string; N2_Tab:array[1..38] of string; begin SQL_2:='SELECT NUMS,COUNT(NUMS) FROM KG539_2NUM GROUP BY NUMS'; Qry_2N.Close; Qry_2N.SQL.CLEAR; Qry_2N.SQL.ADD(SQL_2); Qry_2N.Open; if Qry_2N.RecordCount =0 then SHOWMESSAGE('沒有開獎記錄...'); while not Qry_2N.eof do begin if Qry_2N.FIELDBYNAME('NUMS').AsString = '00' then SHOWMESSAGE('沒有開獎記錄...') else N2_Tab[i] := Qry_2N.FIELDBYNAME('NUMS').AsString; Total_DBPrt_Fm2.QRLab_TGNo.Caption := N2_Tab[i] ; //→ 要列印出陣列報表 SHOWMESSAGE(N2_Tab[i]); Qry_2N.Next; [/code] 問題是 (N2_Tab[i]); →只會秀出 01 .... 到 39的號碼 小弟要的是 例如:01 x 9 02 x 5 03 x 6 .... 不知要如何下陣列的語法,請教各位前輩指導 現在附上 Table |
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 P.D. 文 章=================== 要印報表與在螢幕上顯示是兩回事, 報表後端常用是連結資料庫而不是陣列 你可以先建立一個 temp database, 欄位是你的 no1 ~ no38 型別 integer, 只要把統計出來的1 - 38 的出現次數, 新增一筆(append record), 分別填入所屬的欄位中就好了, 接下來就是如何應用報表, 使其連結印出 ===================引 用 K1086 文 章=================== [code delphi] procedure TT539_N123_Fm1.HemisphereButton7Click(Sender: TObject); var SQL_2:string; N2_Tab:array[1..38] of string; begin SQL_2:='SELECT NUMS,COUNT(NUMS) FROM KG539_2NUM GROUP BY NUMS'; Qry_2N.Close; Qry_2N.SQL.CLEAR; Qry_2N.SQL.ADD(SQL_2); Qry_2N.Open; if Qry_2N.RecordCount =0 then SHOWMESSAGE('沒有開獎記錄...'); while not Qry_2N.eof do begin if Qry_2N.FIELDBYNAME('NUMS').AsString = '00' then SHOWMESSAGE('沒有開獎記錄...') else N2_Tab[i] := Qry_2N.FIELDBYNAME('NUMS').AsString; Total_DBPrt_Fm2.QRLab_TGNo.Caption := N2_Tab[i] ; //→ 要列印出陣列報表 SHOWMESSAGE(N2_Tab[i]); Qry_2N.Next; [/code] 問題是 (N2_Tab[i]); →只會秀出 01 .... 到 39的號碼 小弟要的是 例如:01 x 9 02 x 5 03 x 6 .... 不知要如何下陣列的語法,請教各位前輩指導 現在附上 Table ===>>>謝謝PD版主的提示,小弟現在問題是,已經有一個Table 把01 -- 39 出現的號碼 存入 KG539_2NUM 了 存入的方式是這樣 例如:07 21 33 36 07 14 15 33 36 25 38 所以小弟希望由這 Table (KG539_2NUM) 列印出 07 x 2 33 x 2 36 x 2 33 x 2 21 x 1 14 x 1 15 x 1 25 x 1 38 x 1 由出現次數最多的排列在最前面 因此不知道要如何引用 sql 語法把 Table (KG539_2NUM) 的資料解析列印成報表,請各位前輩指導 謝謝! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 P.D. 文 章=================== 那你為什麼不把這個table 定義兩個欄位 number, numcount number 存號碼 numcount 存數量 然後這樣就好了 select number, sum(numcount) as counts from Table1 group by number order by counts desc ===>>>小弟把當初分析存入的程式流程寫法 PO上請PD版主幫忙看一下 STDT:=COPY(DATETOSTR(DTP_ATDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_ATDT.DATE),1,4); ENDT:=COPY(DATETOSTR(DTP_BTDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_BTDT.DATE),1,4); SQL:='SELECT 開獎日期,星期,A號,B號,C號,D號,E號 FROM Twn_539_NO WHERE A號=''' T539_OPN1.Text ''' and B號=''' T539_OPN2.Text ''' '; SQL:=SQL ' AND 開獎日期>=''' STDT ''' AND 開獎日期<=''' ENDT ''' '; KgQuy.ClOSE; KgQuy.SQL.CLEAR; KgQuy.SQL.ADD(SQL); KgQuy.Open; if KgQuy.RecordCount =0 THEN SHOWMESSAGE('沒有開獎記錄...'); while not KgQuy.eof do begin if KgQuy.FIELDBYNAME('A號').asstring = '00' Then SHOWMESSAGE('沒有開獎記錄...') else Lab_OP12.Caption :='追蹤前期開出前二號歷史資料'; KgQuy.Next; end; KG_2qryDel.ExecSQL; //→清空 Table (KG539_2NUM) with KgQuy do begin First; while not Eof do begin Application.ProcessMessages; if FieldByName('A號').AsString <> '00' then begin KG_2qryIns.ParamByName('Nums').AsString := FieldByName('A號').AsString; //→以下就是篩選 A號 B號 吻合的號碼 才新增到 Table (KG539_2NUM) KG_2qryIns.ExecSQL; KG_2qryIns.ParamByName('Nums').AsString := FieldByName('B號').AsString; KG_2qryIns.ExecSQL; KG_2qryIns.ParamByName('Nums').AsString := FieldByName('C號').AsString; KG_2qryIns.ExecSQL; KG_2qryIns.ParamByName('Nums').AsString := FieldByName('D號').AsString; KG_2qryIns.ExecSQL; KG_2qryIns.ParamByName('Nums').AsString := FieldByName('E號').AsString; KG_2qryIns.ExecSQL; end; Next; end; end; with kg_2qryCount do begin Close; Open; end; 以下這段是把出現號碼加入Table (KG539_2NUM) 直接秀到螢幕上 SELECT NUMS, COUNT(NUMS) COUNTS FROM KG539_2NUM GROUP BY NUMS ORDER BY COUNTS DESC, NUMS 請問PD版主,如果把 (KG539_2NUM) 改成 number, numcount 那 吻合的號碼 新增到 Table 這段SQL寫法要如何修改,請版主指導,謝謝! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
K1086
初階會員 發表:63 回覆:148 積分:42 註冊:2007-04-09 發送簡訊給我 |
===================引 用 P.D. 文 章=================== 這看起來像作業文, 通常我們不會幫忙處理作業文 我不是很清楚你的程式規劃, 但僅就你提的問題, 想分析出現的數字數量(這應該是開獎號統計機率問題) 給你的一個方向 兩個欄位, 一個欄位存出現的數字 一個欄位存出現的次數 這是基本的 database 概念, 有這兩個欄位就可以記錄每個數字出現的次數 再用我列的 sql 語法, 就能統計出每個數字出現的頻率再加以排序 請試著自己撰寫看看吧! 謝謝 PD 版主的指導 確實 運用 number 存號碼 numcount 存數量 二個欄位,就順利解析列印出來了!!!真的很感激 PD 版主 謝謝!!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |