線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:345
推到 Plurk!
推到 Facebook!

請問各位前輩如何把已收集好的 Table 資料用陣列方式列印成報表

答題得分者是:P.D.
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-10-16 13:04:17 IP:36.233.xxx.xxx 訂閱

[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.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-10-17 10:48:53 IP:118.169.xxx.xxx 未訂閱
要印報表與在螢幕上顯示是兩回事, 報表後端常用是連結資料庫而不是陣列
你可以先建立一個 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
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2016-10-17 21:25:01 IP:36.233.xxx.xxx 訂閱

===================引 用 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.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2016-10-18 00:34:34 IP:118.169.xxx.xxx 未訂閱
那你為什麼不把這個table 定義兩個欄位
number, numcount
number 存號碼
numcount 存數量
然後這樣就好了
select number, sum(numcount) as counts from Table1
group by number
order by counts desc
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2016-10-18 09:28:28 IP:1.168.xxx.xxx 訂閱

===================引 用 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.
版主


發表:571
回覆:3880
積分:3666
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2016-10-18 13:49:29 IP:118.169.xxx.xxx 未訂閱
這看起來像作業文, 通常我們不會幫忙處理作業文
我不是很清楚你的程式規劃, 但僅就你提的問題, 想分析出現的數字數量(這應該是開獎號統計機率問題)
給你的一個方向
兩個欄位,
一個欄位存出現的數字
一個欄位存出現的次數
這是基本的 database 概念, 有這兩個欄位就可以記錄每個數字出現的次數
再用我列的 sql 語法, 就能統計出每個數字出現的頻率再加以排序
請試著自己撰寫看看吧!
K1086
初階會員


發表:61
回覆:142
積分:40
註冊:2007-04-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2016-10-18 21:16:45 IP:1.168.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
這看起來像作業文, 通常我們不會幫忙處理作業文
我不是很清楚你的程式規劃, 但僅就你提的問題, 想分析出現的數字數量(這應該是開獎號統計機率問題)
給你的一個方向
兩個欄位,
一個欄位存出現的數字
一個欄位存出現的次數
這是基本的 database 概念, 有這兩個欄位就可以記錄每個數字出現的次數
再用我列的 sql 語法, 就能統計出每個數字出現的頻率再加以排序
請試著自己撰寫看看吧!


謝謝 PD 版主的指導 確實 運用 number 存號碼 numcount 存數量 二個欄位,就順利解析列印出來了!!!真的很感激 PD 版主 謝謝!!!
系統時間:2017-10-18 6:31:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!