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

分析資料前面第一筆會漏抓

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


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2017-02-27 13:50:38 IP:36.233.xxx.xxx 未訂閱

[code delphi]
procedure TTwn_539KgNum_Fm1.HemisphereButton3Click(Sender: TObject);
var STDT,MTDT,ENDT,SQL_A,SB1,SB2,ADAY,BDAY:string;
avg,fot:string;
begin
Total_Qry1.Close;
Total_Qry1.SQL.Clear;
Total_Qry1.SQL.ADD('Delete from Twn_539KGNUM'); //先刪除暫存檔
Total_Qry1.ExecSQL;

STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
ENDT:=COPY(DATETOSTR(Date_2.Date),6,5) '/' COPY(DATETOSTR(Date_2.Date),1,4);
ADAY:=COPY(DATETOSTR(Date_1.Date),1,4) '/' COPY(DATETOSTR(Date_1.Date),6,5);
BDAY:=COPY(DATETOSTR(Date_2.Date),1,4) '/' COPY(DATETOSTR(Date_2.Date),6,5);
Twn_539KgNum_RptFm1.QR_LabDate1.Caption := ADAY;
Twn_539KgNum_RptFm1.QR_LabDate2.Caption := BDAY;
SQL_A:='SELECT 開獎日期, 干支, 星期, A號, B號, C號, D號, E號, 系數分析 FROM Twn_539_NO';
SQL_A:=SQL_A ' Where 開獎日期 >= ''' STDT ''' AND 開獎日期<= ''' ENDT ''' AND 星期 <> "日" ';
TG_Qry.Close;
TG_Qry.SQL.Clear;
TG_Qry.SQL.Add(SQL_A);
TG_Qry.Open;
if TG_Qry.RecordCount = 0 Then
SHOWMESSAGE('沒有開獎記錄...');
While NOT TG_Qry.Eof do
begin
T123_OP01:= Led_G1.Caption;
T123_OP02:= Led_G2.Caption;
T123_OP03:= Led_G3.Caption;
T123_OP04:= Led_G4.Caption;
T123_OP05:= Led_G5.Caption;
T123_UPDAY:= Lab_Day.Caption;
SB1:=COPY((TG_Qry.FIELDBYNAME('干支').AsString),1,2); //抓天干第一數
SB2:=COPY((TG_Qry.FIELDBYNAME('干支').AsString),3,2); //抓天干第二數
if (SB1 = '甲') or (SB1 ='己') then
begin Lab_TK.Caption :='38';
end;
if (SB1 = '乙') or (SB1 = '庚') then
begin Lab_TK.Caption :='27';
end;
if (SB1 = '丙') or (SB1 = '辛') then
begin Lab_TK.Caption :='16';
end;
if (SB1 = '丁') or (SB1 = '壬') then
begin Lab_TK.Caption :='05';
end;
if (SB1 = '戊') or (SB1 = '癸') then
begin Lab_TK.Caption :='49';
end;

if (SB2 = '子') or (SB2 = '午') or (SB2 = '卯') or (SB2 = '酉') then
begin Lab_TG.Caption :='9362';
end;
if (SB2 = '辰') or (SB2 = '戌') or (SB2 = '丑') or (SB2 = '未') then
begin Lab_TG.Caption :='5183';
end;
if (SB2 = '寅') or (SB2 = '申') or (SB2 = '巳') or (SB2 = '亥') then
begin Lab_TG.Caption :='7140';
end;
Table1.Append;
Table1.FieldByName('開獎日期').AsString := TG_Qry.FieldByName('開獎日期').AsString;
Table1.FieldByName('名稱').AsString := TG_Qry.FieldByName('干支').AsString;
Table1.FieldByName('星期').AsString := TG_Qry.FieldByName('星期').AsString;
Table1.FieldByName('天干數').AsString := Lab_TK.Caption;
Table1.FieldByName('地支數').AsString := Lab_TG.Caption;
Table1.FieldByName('系數分析').AsString := TG_Qry.FieldByName('系數分析').AsString;
Table1.FieldByName('A號').AsString := T123_OP01;
Table1.FieldByName('B號').AsString := T123_OP02;
Table1.FieldByName('C號').AsString := T123_OP03;
Table1.FieldByName('D號').AsString := T123_OP04;
Table1.FieldByName('E號').AsString := T123_OP05;
Table1.Post;
TG_Qry.Next;
Led_G1.Caption:=TG_Qry.FIELDBYNAME('A號').AsString;
Led_G2.Caption:=TG_Qry.FIELDBYNAME('B號').AsString;
Led_G3.Caption:=TG_Qry.FIELDBYNAME('C號').AsString;
Led_G4.Caption:=TG_Qry.FIELDBYNAME('D號').AsString;
Led_G5.Caption:=TG_Qry.FIELDBYNAME('E號').AsString;
Lab_RS1.Caption:=TG_Qry.FIELDBYNAME('系數分析').AsString;
Lab_Day.Caption := TG_Qry.FIELDBYNAME('開獎日期').AsString;
Lab_Name.Caption := TG_Qry.FIELDBYNAME('干支').AsString;
end;
Lab_EndMsg.Caption :='分析結束';
end;
[/code]

小弟問題是在分析區間號碼時第一筆的開獎號碼都會跳過,第二筆以後都很正常,請教前備指導 謝謝!!! ( 附上分析後列表)

附加檔案:58b3be2ebe8bb_Ans_01.jpg
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2017-02-27 22:54:14 IP:118.169.xxx.xxx 未訂閱
那如果你在 while 之前先下一個

TG_Qry.First 也會嗎?
K1086
初階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2017-03-01 12:56:22 IP:36.233.xxx.xxx 未訂閱

===================引 用 P.D. 文 章===================
那如果你在 while 之前先下一個

TG_Qry.First 也會嗎?


TG_Qry.Open;
TG_Qry.Frist;
if TG_Qry.RecordCount = 0 Then
SHOWMESSAGE('沒有開獎記錄...');
While NOT TG_Qry.Eof do
begin .......


小弟加上測試還是會漏掉那 A號 B號 C號 D號 E號 但前面的 開獎日期 名稱 星期 干數 支數 系數都正常可以
K1086
初階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2017-03-01 12:59:35 IP:36.233.xxx.xxx 未訂閱

===================引 用 K1086 文 章===================

===================引 用 P.D. 文 章===================
那如果你在 while 之前先下一個

TG_Qry.First 也會嗎?


TG_Qry.Open;
TG_Qry.First; ------>>>更正
if TG_Qry.RecordCount = 0 Then
SHOWMESSAGE('沒有開獎記錄...');
While NOT TG_Qry.Eof do
begin .......


小弟加上測試還是會漏掉那 A號 B號 C號 D號 E號 但前面的 開獎日期 名稱 星期 干數 支數 系數都正常可以 資料 Table1 我查看都有號碼
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2017-03-01 16:35:28 IP:59.120.xxx.xxx 未訂閱
建議你把 query 用一個 dbgrid 來顯示, 看看經過篩選後的記錄到底是否正常, 由程式很難判斷你的問題所在!
K1086
初階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2017-03-01 19:40:32 IP:36.233.xxx.xxx 未訂閱

===================引 用 P.D. 文 章===================
建議你把 query 用一個 dbgrid 來顯示, 看看經過篩選後的記錄到底是否正常, 由程式很難判斷你的問題所在!


小弟改用 query 來顯示確實有秀出 A B C D E 號 不會漏第一筆 若是這樣是否 Table1.Append; 這段是否有問題 請教PD 版主 要如何解決??
ahentseng
一般會員


發表:6
回覆:9
積分:13
註冊:2008-03-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2017-03-02 15:41:40 IP:114.33.xxx.xxx 未訂閱
依照所給的程式內容來看,問題應該是未設定變數的初使值
T123_OP02:= Led_G2.Caption;
T123_OP04:= Led_G4.Caption;
Table1.Append;
Table1.FieldByName('B號').AsString := T123_OP02;
Table1.FieldByName('D號').AsString := T123_OP04;
Table1.Post;
Led_G1.Caption:=TG_Qry.FIELDBYNAME('A號').AsString;
Led_G3.Caption:=TG_Qry.FIELDBYNAME('C號').AsString;
Led_G5.Caption:=TG_Qry.FIELDBYNAME('E號').AsString;

end;

===================引 用 K1086 文 章===================

===================引 用 P.D. 文 章===================
建議你把 query 用一個 dbgrid 來顯示, 看看經過篩選後的記錄到底是否正常, 由程式很難判斷你的問題所在!


小弟改用 query 來顯示確實有秀出 A B C D E 號 不會漏第一筆 若是這樣是否 Table1.Append; 這段是否有問題 請教PD 版主 要如何解決??
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2017-03-02 20:54:52 IP:118.169.xxx.xxx 未訂閱
抱歉, 我無法一一去檢視你程式的流程, 不過我不是很清楚你的 Table 與 Query 的關連性是什麼? 還是兩個都是對同一個 資料庫?

如果Query 看的到完整的東西, 但表資料沒有問題, 那可能就出在Table身上, 你可以想辦法在 while 迴圈內使用 Trace 方式追蹤或設定一些檢查點, 檢查你認為有問題的可能地方, 或許可以查出一些端倪, 我個人認為這個問題不難查證, 但"人不是我殺的!", 還是得你自己找看看, 老實說我是看不太懂你的表達, 因為前面說第一筆都出不來, 但後面提abcde欄位看不到, 其他可以, 所以..., 加油吧!
K1086
初階會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2017-03-05 18:38:20 IP:125.231.xxx.xxx 未訂閱
procedure TTwn_539KgNum_Fm1.HemisphereButton3Click(Sender: TObject);
var STDT,MTDT,ENDT,SQL_A,SB1,SB2,ADAY,BDAY:string;
avg,fot:string;
begin
Total_Qry1.Close;
Total_Qry1.SQL.Clear;
Total_Qry1.SQL.ADD('Delete from Twn_539KGNUM'); //先刪除暫存檔
Total_Qry1.ExecSQL;

STDT:=COPY(DATETOSTR(Date_1.Date),6,5) '/' COPY(DATETOSTR(Date_1.Date),1,4);
ENDT:=COPY(DATETOSTR(Date_2.Date),6,5) '/' COPY(DATETOSTR(Date_2.Date),1,4);
ADAY:=COPY(DATETOSTR(Date_1.Date),1,4) '/' COPY(DATETOSTR(Date_1.Date),6,5);
BDAY:=COPY(DATETOSTR(Date_2.Date),1,4) '/' COPY(DATETOSTR(Date_2.Date),6,5);
Twn_539KgNum_RptFm1.QR_LabDate1.Caption := ADAY;
Twn_539KgNum_RptFm1.QR_LabDate2.Caption := BDAY;
SQL_A:='SELECT 開獎日期, 干支, 星期, A號, B號, C號, D號, E號, 系數分析 FROM Twn_539_NO';
SQL_A:=SQL_A ' Where 開獎日期 >= ''' STDT ''' AND 開獎日期<= ''' ENDT ''' AND 星期 <> "日" ';
TG_Qry.Close;
TG_Qry.SQL.Clear;
TG_Qry.SQL.Add(SQL_A);
TG_Qry.Open;
if TG_Qry.RecordCount = 0 Then
SHOWMESSAGE('沒有開獎記錄...');
While NOT TG_Qry.Eof do
begin
T123_UPDAY:= Lab_Day.Caption;
SB1:=COPY((TG_Qry.FIELDBYNAME('干支').AsString),1,2); //抓天干第一數
SB2:=COPY((TG_Qry.FIELDBYNAME('干支').AsString),3,2); //抓天干第二數
if (SB1 = '甲') or (SB1 ='己') then
begin Lab_TK.Caption :='38';
end;
if (SB1 = '乙') or (SB1 = '庚') then
begin Lab_TK.Caption :='27';
end;
if (SB1 = '丙') or (SB1 = '辛') then
begin Lab_TK.Caption :='16';
end;
if (SB1 = '丁') or (SB1 = '壬') then
begin Lab_TK.Caption :='05';
end;
if (SB1 = '戊') or (SB1 = '癸') then
begin Lab_TK.Caption :='49';
end;

if (SB2 = '子') or (SB2 = '午') or (SB2 = '卯') or (SB2 = '酉') then
begin Lab_TG.Caption :='9362';
end;
if (SB2 = '辰') or (SB2 = '戌') or (SB2 = '丑') or (SB2 = '未') then
begin Lab_TG.Caption :='5183';
end;
if (SB2 = '寅') or (SB2 = '申') or (SB2 = '巳') or (SB2 = '亥') then
begin Lab_TG.Caption :='7140';
end;
Table1.Append;
Table1.FieldByName('開獎日期').AsString := TG_Qry.FieldByName('開獎日期').AsString;
Table1.FieldByName('名稱').AsString := TG_Qry.FieldByName('干支').AsString;
Table1.FieldByName('星期').AsString := TG_Qry.FieldByName('星期').AsString;
Table1.FieldByName('天干數').AsString := Lab_TK.Caption;
Table1.FieldByName('地支數').AsString := Lab_TG.Caption;
Table1.FieldByName('系數分析').AsString := TG_Qry.FieldByName('系數分析').AsString;
Table1.FieldByName('A號').AsString := TG_Qry.FIELDBYNAME('A號').AsString; ---->直接改用 TG_Qry 關連的資料 就OK 了
Table1.FieldByName('B號').AsString := TG_Qry.FIELDBYNAME('B號').AsString;
Table1.FieldByName('C號').AsString := TG_Qry.FIELDBYNAME('C號').AsString;
Table1.FieldByName('D號').AsString := TG_Qry.FIELDBYNAME('D號').AsString;
Table1.FieldByName('E號').AsString := TG_Qry.FIELDBYNAME('E號').AsString;
Table1.Post;
TG_Qry.Next;
Led_G1.Caption:=TG_Qry.FIELDBYNAME('A號').AsString;
Led_G2.Caption:=TG_Qry.FIELDBYNAME('B號').AsString;
Led_G3.Caption:=TG_Qry.FIELDBYNAME('C號').AsString;
Led_G4.Caption:=TG_Qry.FIELDBYNAME('D號').AsString;
Led_G5.Caption:=TG_Qry.FIELDBYNAME('E號').AsString;
Lab_RS1.Caption:=TG_Qry.FIELDBYNAME('系數分析').AsString;
Lab_Day.Caption := TG_Qry.FIELDBYNAME('開獎日期').AsString;
Lab_Name.Caption := TG_Qry.FIELDBYNAME('干支').AsString;
end;
Lab_EndMsg.Caption :='分析結束';
end;

※ 感謝 PD 版主的提示用中斷式偵測抓出資料 果然發現 由TG_Qry 轉入 Table1 時會把開獎 A B C D E 號碼跳第二筆開始 現直接改用不轉 T123_OP01
T123_OP02 T123_OP03 T123_OP04 T123_OP05的號碼 就OK了 非常感謝 PD版主喔!!! 同時也感激 ahentseng 的熱心提供見解 所以功勞還是屬於 PD版主
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2017-03-12 17:05:01 IP:118.160.xxx.xxx 未訂閱
恭喜你啦!
系統時間:2017-12-13 4:07:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!