Вопрос

Можно ли поместить результаты более чем одного запроса к более чем одной таблице в TClientDataSet?

Просто что-то вроде

SELECT * from t1;
SELECT * from t2;
SELECT * from t3;

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

Это было полезно?

Решение

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

Другие советы

ClientDatasets может содержать поля, которые сами по себе являются другими наборами данных.Итак, если вы хотите создать три таблицы в одном наборе данных, создайте три ClientDatasets держите в руках три нужных вам результирующих набора, а затем вы можете объединить их в один ClientDataSet.

Эта статья:

http://dn.codegear.com/article/29001

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

"Создание ClientDataSet's Структура во время выполнения с использованием TFields"

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

select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;

Теперь предположим, что вы придумали ключ (например, LineNr), который позволил бы осуществить такое объединение.Затем вы могли бы использовать полное внешнее объединение для включения всех записей (важно, если не все таблицы имеют одинаковое количество строк).Но это каким-то образом было бы взломом.Обязательно не используйте auto_number для ключа, поскольку он не использует ключи повторно и, следовательно, имеет тенденцию оставлять пробелы в нумерации, в результате чего многие строки заполняются значениями лишь частично.

Если вы хотите заполнить clientdataset из нескольких таблиц с одинаковым набором полей, вы можете использовать для этого оператор ОБЪЕДИНЕНИЯ.Это просто позволит использовать одни и те же столбцы и объединить все строки в одну таблицу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top