2010-10-07 3 views
0

Я хотел бы выполнить следующее:Предложения для кэширования набора данных

1) Откройте набор данных (с использованием TMSQuery, SDAC DevArt компонента)

2) кэширование контента на диск (представьте список cutsomers)

3) в следующий раз, когда мне нужно открыть набор данных, я сначала заполню его кэшированными данными, а затем просто обновить его, вызвав метод TMSQuery.RefreshQuick.

Таким образом, я планирую добиться существенного улучшения скорости, потому что мне не нужно извлекать записи, которые я уже получил в предыдущих запусках приложений.

Как я могу получить это кеширование? У меня много datamodules с TMSQuery, поэтому каким-то образом я хотел бы иметь глобальную подпрограмму, которая проверяет, что каждый раз, когда я пытаюсь открыть TMSQuery, если этот запрос каким-то образом помечен, я попытаюсь восстановить из кеша, вызовите RefreshQuick, если это не получается вызовет Open.

Не могли бы вы предложить?

(я использую Delphi 2009 и SDAC 4,80)

+1

При обновлении данных, вы должны сравнить его значения в базе данных, поэтому вам все равно придется запрашивать все данные. Как это улучшает скорость? У вас есть поле DateModified или что-то еще? –

+0

Я планирую использовать метод TMSQuery.RegreshQuick. – LaBracca

ответ

1

Вы можете сделать 2 вещи:

  1. Сделайте потомок компонента TMSQuery и переопределить функцию Open (вы будете искать все, что вы DataModule .dfm и .pas файлы с TMSQuery и заменить с TCachedTMSQuery)
  2. Объезд/крючок TMSQuery.Open (выполнения заплаток)
3

вы можете используйте для этого компоненты TClientDataSet и TDataSetProvider, соединяя компоненты таким образом.

TMSQuery-> TDataSetProvider-> TClientDataSet

The TClientDataSet является очень хорошей альтернативой сохраняются и извлекать данные из диска.

увидеть эти ссылки для получения дополнительной информации о ClientDataSet