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

sql和recordcount的奇怪現象

答題得分者是:Mickey
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-05 14:48:04 IP:203.185.xxx.xxx 未訂閱
本人: select max(user_id) as max_user_id from user where ..... 當我用recordcount去check下時,居然係大過1,即係剛與我所有record的數目?為何呢?不是應該recordcount只有1個嗎? 用sqlquery去做
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-05 16:13:12 IP:218.163.xxx.xxx 未訂閱
如果MAX的那個usr剛好有兩個以上的Connection在DB上 那recordcount就會大於一 > 永遠追不上技術更新的速度 發表人 -
------
星期一,二...無窮迴圈@@
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-05 16:36:19 IP:203.185.xxx.xxx 未訂閱
但我那個user_id是auto increment的primary key? why?那我又何方法找到最大的record的id呢?
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-05 17:09:31 IP:218.162.xxx.xxx 未訂閱
引言: 但我那個user_id是auto increment的primary key? why?那我又何方法找到最大的record的id呢?
會不會是下了group by ....?
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-05 17:36:50 IP:203.185.xxx.xxx 未訂閱
無,只是一般select...不然你也試一試會否有同樣結果? ~_~"
Chance36
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-05 18:11:21 IP:211.20.xxx.xxx 未訂閱
BorlandUser 你好 不知你用的是那個資料集元件、連結資料庫為何及使用的連結為何(bde、odbc、ado、dbExpress)? 某些狀況下的DataSet.Recount是不正確的,在本站有相當多關於RecordCount的討論,常常都有提到這個情形,只是沒有人整理其真正的原因及什麼狀況下正確而又什麼情況下不正確? 反過來說,你要取得最大的ID,sql語法沒錯(我也常常這樣使用),怎麼會去檢查RecordCount呢?
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-05 23:52:35 IP:203.218.xxx.xxx 未訂閱
我用dbexpress 的sqlquery 不過我用recordcount的原因是假設找出來的結果是沒有,那可以作為一個validation..
Chance36
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-06 00:17:29 IP:203.204.xxx.xxx 未訂閱
引言: 我用dbexpress 的sqlquery 不過我用recordcount的原因是假設找出來的結果是沒有,那可以作為一個validation..
BorlandUser 你好
  一般我都是在 sqlQuery.Open;// 之後判斷SqlQuery是否Eof 方式解決
  If SqlQuery.Eof Then Begin
    // 表示找不到最大值
  End Else Begin
    // 表示有最大值
  End;
stillalive
初階會員


發表:7
回覆:148
積分:41
註冊:2004-04-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-05-06 08:27:59 IP:211.75.xxx.xxx 未訂閱
替chance36大大補充一下 , 完整程式碼 max_no := 0 ; while not SqlQuery.Eof do begin if SqlQuery.FieldByName('user_id').AsInteger > max_no then begin max_no := SqlQuery.FieldByName('user_id').Integer ; end; SqlQuery.Next ; end;
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-05-06 08:36:31 IP:218.163.xxx.xxx 未訂閱
正如 Chance36 兄所說的, 從 TCustomSQLDataSet.RecordCount 的說明看來,    RecordCount 很不可靠, 如果你的需求一定要取得正確的 RecordCount 的話,    可以考慮用 TSQLQuery->TDataSetProvider->TClientDataSet, 然後用    TClientDataSet 來操作, 但需付出增加 Midas 的代價, 您自己衡量看看吧.
系統時間:2024-06-29 9:40:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!