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

當SQL 是 eof 游標指向top

尚未結案
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-18 10:50:02 IP:61.228.xxx.xxx 未訂閱
sx:='20040501'; sy:='S'; ADOQuery1.SQL.Add('select zadate,zaseq,zahead from test '); ADOQuery1.SQL.Add('where zahead=''' Sy ''' and zadate = (select top 1 '); ADOQuery1.SQL.Add(' zaDate from test where zaDate <= ''' Sx ''' ) '); 例: 20030101 001 20030102 001 ... 20031229 014 20031229 015 20041231 001 當delete 後指標該到 20031229 015 record 可是會跑到 20030101 01 首筆 是否sql語法有誤? 或者在查詢record時可用locate或lookup找到就近一筆紀錄嗎? 謝謝 發表人 - nick167 於 2004/10/18 10:57:03
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-19 04:26:27 IP:203.204.xxx.xxx 未訂閱
引言: sx:='20040501'; sy:='S'; ADOQuery1.SQL.Add('select zadate,zaseq,zahead from test '); ADOQuery1.SQL.Add('where zahead=''' Sy ''' and zadate = (select top 1 '); ADOQuery1.SQL.Add(' zaDate from test where zaDate <= ''' Sx ''' ) '); 例: 20030101 001 20030102 001 ... 20031229 014 20031229 015 20041231 001 當delete 後指標該到 20031229 015 record 可是會跑到 20030101 01 首筆 是否sql語法有誤? 或者在查詢record時可用locate或lookup找到就近一筆紀錄嗎?
nick167 你好 只有一點疑問,討論一下:依上述的SQL指令怎麼可能查詢出這麼多筆資料錄呢? 唯一想到可能狀況是: 1.AdoQuery的SQL指令原來是可以取得多筆資料錄的,如: =>AdoQuery.SQL.Clear; =>ADOQuery1.SQL.Add('select zadate,zaseq,zahead from test '); =>ADOQuery1.SQL.Add('where zahead=''' Sy ''' and zadate <= ''' Sx ''' ) '); =>ADOQuery1.Open; 2.開啟之後先行更改SQL指令,(沒有Close也沒有再次的Open) =>ADOQuery1.SQL.Add('select zadate,zaseq,zahead from test '); =>ADOQuery1.SQL.Add('where zahead=''' Sy ''' and zadate = (select top 1 '); =>ADOQuery1.SQL.Add(' zaDate from test where zaDate <= ''' Sx ''' ) '); 3.然後,移到最後一筆,接著刪除該筆資料錄 AdoQuery1.Last; AdoQuery1.Delete; ok!問題就在這裏,當最後一筆資料刪除之後,Adoquery1會自動ReQuery(或ReFresh),但此時SQL條件已變更,ReQuery(或ReFresh)只能查詢到一筆資料(即第一筆資料),所以指標才會指到第一筆(應該是只有一筆吧)。如果不是第二步的動作改變了SQL指令的內容的話,應該不會有你所說的狀況才對。 ps:以上純屬假設,若有謬誤請勿見怪! _______________________________________ 深藍的魚,祝您好運..........連連
sl@cableplus.com.cn
高階會員


發表:168
回覆:359
積分:130
註冊:2004-03-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-19 11:14:35 IP:218.80.xxx.xxx 未訂閱
你在后面再加一句MOVELAST就可以啦 
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-19 12:42:22 IP:61.228.xxx.xxx 未訂閱
引言: 你在后面再加一句MOVELAST就可以啦 >= '>< face="Verdana, Arial, Helvetica">
系統時間:2024-06-29 16:30:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!