Delphi ADO Query - объединение наборов результатов

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

Затем пользователь может проверить каждый отчет, выбрав его из меню, и отчет отображается путем загрузки отчета обратно в компонент запроса ADO (с помощью LoadFromFile) и последующей привязки его к представлению списка.

Теперь моя проблема в том, что пользователь должен иметь возможность выбрать любой или все отчеты и объединить их вместе, чтобы создать один большой отчет. Например:

Пользователь может определить запрос как SELECT * FROM (таблица), и затем он может запустить этот запрос в системе A, системе B и системе C. Вместо просмотра трех отдельных отчетов ему необходимо иметь возможность объединить отчеты вместе. из трех систем, так что он может просто просмотреть один большой отчет, охватывающий все три системы.

Можно ли это сделать с помощью компонентов ADO Query? В противном случае, поскольку файл сохраняется как XML-документ, можно ли будет объединить отчеты вместе, используя вместо этого XML-документы?

Я понятия не имею, с чего начать, поэтому любые указатели будут оценены.

РЕДАКТИРОВАТЬ: Важная информация, которую мне как-то удалось сначала забыть включить:

  1. Пользователь должен иметь доступ к данным в автономном режиме, то есть он должен иметь возможность запускать запросы в различных системах, а затем работать с отчетами позже. Следовательно, существует требование иметь возможность сохранять отчеты на диск, а затем повторно загружать их позже, когда они не подключены ни к одной из систем, в которых выполнялись запросы. На этом этапе пользователь может захотеть объединить отчеты.

  2. Все отчеты, которые должны быть объединены, будут одного типа - то есть все они будут созданы на основе одного запроса, поэтому будут давать одинаковое количество / тип полей и т. Д.


person Jeedee    schedule 22.09.2009    source источник
comment
Система A представляет собой базу данных, которая работает в определенной системе. Система B представляет собой базу данных, которая работает в другой системе и т. Д.   -  person Jeedee    schedule 22.09.2009


Ответы (2)


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

Конечно, это предполагает, что вы получаете аналогичные данные (одинаковые столбцы) из всех ваших источников.

person Bruce McGee    schedule 22.09.2009
comment
Это выглядит многообещающе, так как это позволит мне изначально сохранять отчеты на диск (как я делаю сейчас, в виде XML-документа), а затем повторно загружать их в компоненты ADO Query в автономном режиме (см. Изменения в моем исходном вопросе, так как вы отвечать). Кто-нибудь может подробнее рассказать об этом, пожалуйста? Я никогда раньше не использовал ClientDataSet, и хотя сейчас я изучаю его, пример был бы очень полезен. Спасибо! - person Jeedee; 22.09.2009
comment
Добавьте MidasLib в свой раздел uses, а затем перетащите TClientDataSet (из вкладки Data Access палитры компонентов) в свой модуль данных. Вы можете определять поля и т. Д., Как и любую другую таблицу. Возможно, вы захотите увидеть delphi.about.com/od/usedbvcl/a/tclientdataset .htm и ссылки, доступные с этой страницы. - person Ken White; 22.09.2009
comment
Осторожный. Если вы используете Delphi 2009, в модуле MidasLib есть утечка памяти, и вам лучше добавить midas.dll в вашу установку. Однако это было исправлено в 2010 году. Не уверен насчет более ранних версий. - person Mason Wheeler; 22.09.2009
comment
Хорошо - я использовал TClientDataSet и добавил результаты из нескольких компонентов TADOQuery в TClientDataSet. Теперь моя проблема в том, что мне нужно сохранить данные обратно в файл в том же формате, который использует TADOQuery (т.е. вызов процедуры SaveToFile в TADOQuery с использованием параметра pfXML). Вызов SaveToFile из TClientDataSet сохраняет его в другом формате. Обработка для просмотра результатов читает pfXML - так как я могу вернуть данные в TADOQuery, чтобы их можно было сохранить в этом формате? Могу ли я запросить TClientDataSet с помощью TADOQuery? - person Jeedee; 07.12.2009

Я только что закончил разбираться в этом. Мое приложение позволяет пользователю создавать отчеты, запрашивая их базы данных. Я могу заставить это работать, и это очень эффективно для небольших наборов результатов - однако, поскольку это приложение для создания отчетов, и вполне возможно, что могут быть возвращены сотни тысяч записей, использование ClientDataSet создает серьезные проблемы с производительностью. Как только вы превысите 50 000 записей (разумно, учитывая клиентскую базу), обработка начинает экспоненциально расти, так что теперь это в основном спорный вопрос.

person Jeedee    schedule 07.12.2009