2014-02-15 35 views
-1

編程語言:Delphi 6在Delphi中處理來自TAdoQuery的大量數據

SQL Server在後端。

問題:

使用的每個我們需要的東西,已結束了它擊中了2000次以上爲獲得某些事情時打數據庫應用,使問題的應用程序正在緩慢。這個命中數據庫發生了很多表,每個表具有不同的結構和不同的列數。所以我試圖減少電話的數量。 從每張表中我們一次可以獲得大約4000條記錄。

建議的解決方案:

讓我們從數據庫中的所有數據在一次使用它的時候,我們需要它,這樣我們就不必不停的按DB。

如何解決是迄今爲止轉向了:

有此德爾斐的版本沒有一本字典。所以我們已經有了一個來自String List的字典實現(讓我們假設實現是好的)。

解決方案1:

商店這是我們與創造的字典: 一個獨特的領域作爲重點。 並添加數據的其餘部分作爲字符串列表字符串分隔這樣的: FiledName1:FileValue,FieldName2:FieldValue2,... .. 可能要創建約2000字符串列表將數據映射到按鍵。 我看了看下面的鏈接: How Should I Implement a Huge but Simple Indexed StringList in Delphi? 看起來他們可以移動到不同的數據庫不可能和我在一起。 這是一個理智的解決方案嗎?

解決方案2:

將此存儲在帶List的字典中。 該列表將包含Delphi記錄。 Delphi TList of records

解決方案3:

或給予我使用TAdoQuery我應該用尋求或定位找我的記錄 記錄可以到讓我看了看這個鏈接不是直接加入。 請教最好的方法來做到這一點?

要求:

需要隨機存取此數據。 當我們根據需要獲取所有數據時,插入數據只會發生一次。

只需要讀取數據,不必修改。

需要不斷在主鍵的字詞進行搜索。

除了改變我們已經做了很好的索引上DB照顧的東西從DB側的應用程序。這更多的是讓應用程序順利運行。

+1

TClientDataSet有什麼問題? –

+0

謝謝我來自C#背景。使用TClientDataset是我所需要的一切。簡單但不知道在哪裏尋找。 – user3313541

+0

您不需要TClientDataset。 ADO數據集有能力以斷開/批處理模式工作。 – kobik

回答

1

這聽起來像一個完美的使用情況TClientDataSet。這是一個內存數據集,可以輕鬆進行索引,過濾和搜索,保存可以使用SQL語句從數據庫中檢索的任何信息,並且在數千行合理大小的數據行上具有相當不錯的性能。 (上面的鏈接是針對當前的文檔,因爲我沒有一個可用於Delphi 6文檔的鏈接,它們應該非常相似,但我不記得哪個特定版本能夠將MidasLib直接包含在您的使用條款中以消除與您的應用程序分發Midas.dll)。

凱里詹森幾年前寫了一系列有關它的文章,你可能會發現有用的。第一個可以在A ClientDataset in Every Database Application中找到 - 系列中的其他人是從它鏈接的。

+0

太棒了!感謝您的鏈接。 – user3313541