2011-04-07 26 views
3

cds.RecordCount存在問題嗎?cds.RecordCount存在問題

我通常用它來確定在查詢中是否有任何記錄。

但是在和一所大學談話時,他告訴我這會有一個表現的懲罰!

我做了一些測試,沒有發現任何主要問題。

那麼是否存在性能損失或RecordCount的其他問題?

如果是這樣,檢查查詢中是否有一些記錄的最佳方法是什麼?

感謝

回答

4

如果你使用的TClientdataSet(如您的「CDS」似乎暗示)與PacketRecords設置爲-1(默認)或FetchOnDemand設置爲False沒有區別,因爲在客戶端數據集接收並加載所有數據一次存入內存。 與其他數據集不同的是,在您前進光標時按需提取數據,使用RecordCount將首先獲取所有數據。在這種情況下,最好在打開後使用數據集的EOF屬性 - 如果您只想知道結果集是否爲空。

+0

'TClientDataSet'還支持本地緩存和取需求。 – 2011-04-07 11:54:12

+0

@Jørn謝謝,當禁止按需提取時,我添加了關於PacketRecords = -1的註釋。不確定本地緩存是什麼意思,或者它是如何與問題相關的。 – 2011-04-07 12:17:30

+0

RecordCount方法將顯示本地緩存記錄IIRC的數量。它不會首先獲取所有記錄。儘管這可能在不同的TDataSet後代中以不同的方式實現。 – 2011-04-07 12:36:14

3

最好的解決方案是執行SELECT COUNT(*)查詢。

如果您需要本地所有記錄,則應將FetchOnDemand屬性設置爲False,或者您可以在cds.RecordCount之前調用cds.Last

還有一個cds.IsEmpty方法,如果目的是檢查數據集中是否含有記錄...