Набор данных, извлекающий данные из другого набора данных - PullRequest
1 голос
/ 11 мая 2011

Я работаю с приложением, которое переключается с файлового хранилища данных на базу данных.Он имеет очень большой объем кода, который написан специально для файловой системы.Чтобы сделать переход, я реализую функциональные возможности, которые будут работать как старая система, и в этом плане план более оптимально использует базу данных в новом коде.

Одна проблема заключается в том, что файловая система часто считывала отдельные записи и многократно читала их для отчетов.Это стало большим количеством запросов к базе данных, что очень медленно.

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

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

* 1011Причина, по которой я предпочел бы получить результат в другом наборе данных, а не перемещаться по первому, заключается в том, что в нем уже реализовано достаточное количество логики для эмуляции старой системы.Эта логика основана на наличии набора данных, содержащего только результаты, которые запрашивались в старом интерфейсе.

Функциональность должна поддерживать только чтение данных, а не их запись обратно.

Как я могу использовать один набор данных для предоставления значений для другого набора данных для выбора?

Я использую Delphi 2007 и MSSQL.

1 Ответ

1 голос
/ 11 мая 2011

Вы можете использовать пару ClientDataSet / DataSetProvider для извлечения данных из существующего DataSet.Вы можете использовать фильтры в исходном наборе данных, фильтры в ClientDataSet и событиях провайдера, чтобы обрезать набор данных только до интересных записей.

Я успешно использовал эту технику в нескольких переносимых проектах и ​​смягчил аналогичные.Ситуация, когда старая база данных SQL Server 7 запрашивалась тысячи раз для извлечения отдельных записей с болезненными затратами на производительность.Запрашивать его только один раз, а затем извлекать отдельные записи в набор данных клиента, было в то время не только элегантным решением, но и большим приростом производительности для этого конкретного приложения. Самым замечательным примером был 8-часовой процесс, сокращенный до 15 минут.Бедные пользователи любили меня в то время.

ClientDataSet - это просто TDataSet, который вы можете легко интегрировать в существующий код и пользовательский интерфейс.

...