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

為什麼RecordCount會是-1?

尚未結案
piggy213
一般會員


發表:16
回覆:6
積分:4
註冊:2002-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-08 20:51:31 IP:211.74.xxx.xxx 未訂閱
為什麼有時Dataset的屬性RecordCount出來的答案會是-1? 用相同的sql language在oracle下執行,就有兩筆資料呀.. 為什麼呀?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-08 21:51:33 IP:202.39.xxx.xxx 未訂閱
參考一下 Help 的說明:    Note: Use RecordCount with care, because record counting  can be a costly operation, especially for SQL queries that  return large result sets. Generally, an application should only use RecordCount with Paradox and dBASE tables. --- 歡迎光臨 KTop 研究院--<-<-<@
Mickey
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-08 22:04:29 IP:218.32.xxx.xxx 未訂閱
節錄一段 TDataSet.Recordcount Property Delphi 7 VCL 線上說明 : As implemented in TDataSet, RecordCount is always -1. Ordinarily an application does not access RecordCount at the TDataSet level. Instead a redeclared and implemented RecordCount property in a descendant class is accessed. RecordCount provides a fallback property for derived dataset classes that do not reimplement the property access method. 參考看看 : http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29579
heartsong
一般會員


發表:11
回覆:13
積分:4
註冊:2003-07-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-09 13:29:18 IP:202.107.xxx.xxx 未訂閱
在取query.RecordCount前加上这样一句: query.Last; 这样保证query.RecordCount不会为-1 心灵琴音界 灵透结界石
------
心灵琴音界
灵透结界石
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-09 14:58:26 IP:61.218.xxx.xxx 未訂閱
請一下為什麼要加query.last;呀[:)    
引言: 在取query.RecordCount前加上这样一句: query.Last; 这样保证query.RecordCount不会为-1 心灵琴音界 灵透结界石
]
heartsong
一般會員


發表:11
回覆:13
積分:4
註冊:2003-07-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-10 15:42:00 IP:202.107.xxx.xxx 未訂閱
这个问题我也不是很清楚,我查了一下DELPHI自带的db这个模块关于RecordCount部分的代码,里面是两个线程,都是这样定义RecordCount的 property RecordCount: Integer read GetRecordCount; 注意,上面两个GetRecordCount在两个线程中这样定义: function TDataLink.GetRecordCount: Integer; begin if DataSource.State = dsSetKey then Result := 1 else begin Result := DataSource.DataSet.FRecordCount; if Result > FBufferCount then Result := FBufferCount; end; end; 另外一个: function TDataSet.GetRecordCount: Longint; begin Result := -1; end; 我认为,第一个GetRecordCount值是正确的值,即数据集是实际的数据行数,只有RecordCount得到了第二个GetRecordCount值(即是-1)时,所以得到RecordCount为-1,至于怎么会得到第二个GetRecordCount值,我发现是在你的DBGrid的显示行数<数据集的行数得到,比如,我要查询的数据集中实际上是9行,而DBGrid的显示行数=8行,这时,用RecordCount时会得到第二个GetRecordCount值的,即为-1。 所以我认为,当用了Last以后,即把DBGrid所显示的行数不会使之小于实际的数据集中的数据行数,RecordCount也就能得到第一个GetRecordCount,即正确的值的。至于是否是这样,我想你可以通过断点进行一一执行查看(呵呵,这个比较费时间,我就是这样做,结果没有做完就退出来了) 心灵琴音界 灵透结界石
------
心灵琴音界
灵透结界石
系統時間:2024-05-02 13:20:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!