Предложения по кэшированию набора данных - PullRequest
0 голосов
/ 07 октября 2010

Я бы хотел выполнить следующее:

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

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

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

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

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

Можете ли вы предложить?

(я использую Delphi 2009 и SDAC 4.80)

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

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

TMSQuery-> TDataSetProvider-> TClientDataSet

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

см. Эти ссылки для получения дополнительной информации о ClientDataset

1 голос
/ 07 октября 2010

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

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