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

請教前輩如何在Table所有欄位中運用列印篩選有吻合的資料,其他不印?

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


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2017-01-03 20:18:37 IP:36.233.xxx.xxx 未訂閱

[code delphi]
procedure TTwn_49_Lotdata_Fm.HemisphereButton1Click(Sender: TObject);
var STDT,ENDT,SQL_A:string;
TOTALNUA:INTEGER;
begin
STDT:=COPY(DATETOSTR(DTP_STDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_STDT.DATE),1,4);
ENDT:=COPY(DATETOSTR(DTP_ENDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_ENDT.DATE),1,4);
SQL_A:='SELECT * FROM Twn_49_NO';
SQL_A:=SQL_A ' WHERE 開獎日期>=''' STDT ''' AND ';
SQL_A:=SQL_A ' 開獎日期<=''' ENDT ''' ';
Twn_49_Lotdata_Rpt_Fm.SQL1.CLOSE;
Twn_49_Lotdata_Rpt_Fm.SQL1.SQL.Clear;
Twn_49_Lotdata_Rpt_Fm.SQL1.SQL.ADD(SQL_A);
Twn_49_Lotdata_Rpt_Fm.SQL1.OPEN;
TOTALNUA:=0;
WHILE NOT Twn_49_Lotdata_Rpt_Fm.SQL1.EOF DO
BEGIN
if Twn_49_Lotdata_Rpt_Fm.SQL1.FieldByName('期數').AsString <> '' Then // 小弟在這行下判斷,但是無效,還是會印出不想要的資料
TOTALNUA:= TOTALNUA 1;
Twn_49_Lotdata_Rpt_Fm.SQL1.Next;
END;
Twn_49_Lotdata_Rpt_Fm.QR_Lab_tot.Caption := IntTostr(TOTALNUA);
Twn_49_Lotdata_Rpt_Fm.QuickRep1.Preview;
end;
[/code]
問題是這樣 在table 幾千筆中,以區間開始到結束,找出期數不等於空白的資料印出,小弟想不出運用何種語法才有效,敬請前輩指導 謝謝!!!
附加 Table 實際欄位圖表
編輯記錄
K1086 重新編輯於 2017-01-03 20:25:47, 註解 無‧
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2017-01-03 22:50:09 IP:118.169.xxx.xxx 未訂閱
1. 語法為何不寫成下列方式, 簡潔有力
SQL_A.SQL.Text := 'SELECT * FROM Twn_49_NO ' +
'WHERE 開獎日期>=''' STDT ''' AND ' +
' 開獎日期<=''' ENDT ''' ';
2. 既然已知要 期數 <> 空白, 何不改成
SQL_A.SQL.Text := 'SELECT * FROM Twn_49_NO ' +
'WHERE 開獎日期>=''' STDT ''' AND ' +
' 開獎日期<=''' ENDT ''' ' +
' and 期數 <> "" '
不同資料庫對空值判斷有不同, 或許是 'where 期數 is not null '
但加 where 判斷就可找出你要的條件

至於底下你的語法, 我看不懂那裡在列印, 因為你只是下
if .... then TOTALNUA := TOTALNUA 1
接下來下了 Next,
這有何意義我看不出來?

WHILE NOT Twn_49_Lotdata_Rpt_Fm.SQL1.EOF DO
BEGIN
if Twn_49_Lotdata_Rpt_Fm.SQL1.FieldByName('期數').AsString <> '' Then // 小弟在這行下判斷,但是無效,還是會印出不想要的資料
TOTALNUA:= TOTALNUA 1;
===================引 用 K1086 文 章===================

[code delphi]
procedure TTwn_49_Lotdata_Fm.HemisphereButton1Click(Sender: TObject);
var STDT,ENDT,SQL_A:string;
TOTALNUA:INTEGER;
begin
STDT:=COPY(DATETOSTR(DTP_STDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_STDT.DATE),1,4);
ENDT:=COPY(DATETOSTR(DTP_ENDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_ENDT.DATE),1,4);
SQL_A:='SELECT * FROM Twn_49_NO';
SQL_A:=SQL_A ' WHERE 開獎日期>=''' STDT ''' AND ';
SQL_A:=SQL_A ' 開獎日期<=''' ENDT ''' ';
Twn_49_Lotdata_Rpt_Fm.SQL1.CLOSE;
Twn_49_Lotdata_Rpt_Fm.SQL1.SQL.Clear;
Twn_49_Lotdata_Rpt_Fm.SQL1.SQL.ADD(SQL_A);
Twn_49_Lotdata_Rpt_Fm.SQL1.OPEN;
TOTALNUA:=0;
WHILE NOT Twn_49_Lotdata_Rpt_Fm.SQL1.EOF DO
BEGIN
if Twn_49_Lotdata_Rpt_Fm.SQL1.FieldByName('期數').AsString <> '' Then // 小弟在這行下判斷,但是無效,還是會印出不想要的資料
TOTALNUA:= TOTALNUA 1;
Twn_49_Lotdata_Rpt_Fm.SQL1.Next;
END;
Twn_49_Lotdata_Rpt_Fm.QR_Lab_tot.Caption := IntTostr(TOTALNUA);
Twn_49_Lotdata_Rpt_Fm.QuickRep1.Preview;
end;
[/code]
問題是這樣 在table 幾千筆中,以區間開始到結束,找出期數不等於空白的資料印出,小弟想不出運用何種語法才有效,敬請前輩指導 謝謝!!!
附加 Table 實際欄位圖表
編輯記錄
P.D. 重新編輯於 2017-01-03 22:50:46, 註解 無‧
P.D. 重新編輯於 2017-01-03 22:51:25, 註解 無‧
K1086
初階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2017-01-05 11:38:14 IP:36.233.xxx.xxx 未訂閱

===================引 用 P.D. 文 章===================
1. 語法為何不寫成下列方式, 簡潔有力
SQL_A.SQL.Text := 'SELECT * FROM Twn_49_NO ' +
'WHERE 開獎日期>=''' STDT ''' AND ' +
' 開獎日期<=''' ENDT ''' ';
2. 既然已知要 期數 <> 空白, 何不改成
SQL_A.SQL.Text := 'SELECT * FROM Twn_49_NO ' +
'WHERE 開獎日期>=''' STDT ''' AND ' +
' 開獎日期<=''' ENDT ''' ' +
' and 期數 <> "" '
不同資料庫對空值判斷有不同, 或許是 'where 期數 is not null '
但加 where 判斷就可找出你要的條件

至於底下你的語法, 我看不懂那裡在列印, 因為你只是下
if .... then TOTALNUA := TOTALNUA 1
接下來下了 Next,
這有何意義我看不出來?

WHILE NOT Twn_49_Lotdata_Rpt_Fm.SQL1.EOF DO
BEGIN
if Twn_49_Lotdata_Rpt_Fm.SQL1.FieldByName('期數').AsString <> '' Then // 小弟在這行下判斷,但是無效,還是會印出不想要的資料
TOTALNUA:= TOTALNUA 1;
===================引 用 K1086 文 章===================

[code delphi]
procedure TTwn_49_Lotdata_Fm.HemisphereButton1Click(Sender: TObject);
var STDT,ENDT,SQL_A:string;
TOTALNUA:INTEGER;
begin
STDT:=COPY(DATETOSTR(DTP_STDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_STDT.DATE),1,4);
ENDT:=COPY(DATETOSTR(DTP_ENDT.DATE),6,5) '/' COPY(DATETOSTR(DTP_ENDT.DATE),1,4);
SQL_A:='SELECT * FROM Twn_49_NO';
SQL_A:=SQL_A ' WHERE 開獎日期>=''' STDT ''' AND ';
SQL_A:=SQL_A ' 開獎日期<=''' ENDT ''' ';
Twn_49_Lotdata_Rpt_Fm.SQL1.CLOSE;
Twn_49_Lotdata_Rpt_Fm.SQL1.SQL.Clear;
Twn_49_Lotdata_Rpt_Fm.SQL1.SQL.ADD(SQL_A);
Twn_49_Lotdata_Rpt_Fm.SQL1.OPEN;
TOTALNUA:=0;
WHILE NOT Twn_49_Lotdata_Rpt_Fm.SQL1.EOF DO
BEGIN
if Twn_49_Lotdata_Rpt_Fm.SQL1.FieldByName('期數').AsString <> '' Then // 小弟在這行下判斷,但是無效,還是會印出不想要的資料
TOTALNUA:= TOTALNUA 1;
Twn_49_Lotdata_Rpt_Fm.SQL1.Next;
END;
Twn_49_Lotdata_Rpt_Fm.QR_Lab_tot.Caption := IntTostr(TOTALNUA);
Twn_49_Lotdata_Rpt_Fm.QuickRep1.Preview;
end;
[/code]
問題是這樣 在table 幾千筆中,以區間開始到結束,找出期數不等於空白的資料印出,小弟想不出運用何種語法才有效,敬請前輩指導 謝謝!!!
附加 Table 實際欄位圖表

感謝 PD 版主指導 小弟改成如下語法就可以篩選掉有期數的列印,沒期數的就跳過不印了
SQL_A:='SELECT * FROM Twn_49_NO';
SQL_A:=SQL_A ' WHERE 開獎日期>=''' STDT ''' AND ';
SQL_A:=SQL_A ' 開獎日期<=''' ENDT ''' and 期數 <> "" ';
系統時間:2017-10-23 3:15:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!