2009-09-22 1 views
1

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

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

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

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

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

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

EDIT: Важная информация, которую я как-то удалось забыть включить в первый:

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

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

+0

Что такое система A? База данных? –

+0

Система A представляет базу данных, которая работает на определенной системе. Система B представляет собой базу данных, которая работает в другой системе и т. Д. – Jeedee

ответ

0

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

2

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

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

+0

Это выглядит многообещающим, так как это позволит мне сначала сохранять отчеты на диск (как я делаю в настоящее время в качестве документа XML), а затем повторно загружать их в компоненты ADO Query в автономном режиме (см. Правки на мой оригинальный вопрос, так как ваш ответ). Может ли кто-нибудь расширить этот вопрос, пожалуйста? Я никогда не использовал ClientDataSet раньше, и хотя я сейчас изучаю его, пример будет очень полезен. Благодаря! – Jeedee

+0

Добавьте MidasLib к вашему предложению, а затем отпустите TClientDataSet (со вкладки «Доступ к данным» палитры компонентов) в свой датамодуль. Вы можете определять поля и т. Д., Как и любую другую таблицу. Возможно, вы захотите увидеть http://delphi.about.com/od/usedbvcl/a/tclientdataset.htm и ссылки, доступные с этой страницы. –

+2

Осторожно. Если вы используете Delphi 2009, у устройства MidasLib есть утечка памяти, и вам будет лучше добавить файл midas.dll в вашу установку. Однако это было исправлено в 2010 году. Не уверен в более ранних версиях. –

 Смежные вопросы

  • Нет связанных вопросов^_^