Объект Query

Объект Query представляет возможность построения выборки - пользовательского представления постоянных или временных таблиц ГБД/таблиц внешних БД. Данная версия ядра ГИС не предоставляет возможности создания смешанных выборок на основе постоянных и временных таблиц ГБД. Для доступа к записям, входящим в выборку, следует использовать метод Query::OpenRecordset, создающий объект Recordset - набор записей, удовлетворяющих критериям выборки.

Для конструктивного создания новой выборки необходимо выполнить следующую последовательность действий:

Для выборки, основанной на таблицах ГБД, создать объект Query с помощью метода GeoDatabase::CreateQuery. Для выборки, основанной на таблицах внешней БД, создать объект Query с помощью метода ExternalDatabase::CreateQuery. Таблица-аргумент методов является корневой таблицей выборки.

Естественное соединение базовых таблиц в выборке осуществляется с помощью метода Field::Join. Не все внешние БД поддерживают возможность многократного вхождения таблицы в соединение таблиц. Для проверки возможности многократного вхождения таблицы в соединение следует использовать свойство ExternalDatabase::CanMultiJoinTable. Для выборок, построенных на основе таблиц ГБД, многократное вхождение таблицы в соединение недопустимо.

Установка таблиц-справочников для полей выборки осуществляется с помощью метода Field::SetReference.

Для задания критериев поиска записей в базовых таблицах, на основе которых построена выборка, необходимо создать с помощью метода Field::CreateSearchCondition объекты FieldSearchCondition - критерии поиска по полям выборки. После настройки критериев поиска их необходимо поместить в коллекцию Query::FieldSearchConditions с помощью метода Append. Критерии поиска можно также изменить или установить путем настройки текущих критериев в коллекции Query::FieldSearchConditions.

Определение вычисляемых полей осуществляется с помощью метода Field::Calculate. Разбиение записей на группы, по которым происходит формирование значений вычисляемых полей, происходит по видимым невычисляемым полям выборки. Не все внешние БД поддерживают возможность определения вычисляемых полей. Для проверки возможности определения вычисляемых полей следует использовать свойство ExternalDatabase::SupportCalculations. Для выборок, построенных на основе таблиц ГБД, определение вычисляемых полей допустимо всегда.

Дублирующиеся записи в выборке можно устранить путем установки свойства Query::Duplicate.

Для задания критерия сортировки записей выборки, необходимо создать с помощью метода Field::CreateSortCondition объекты FieldSortCondition - критерии сортировки записей по заданному полю. Созданные критерии необходимо поместить в коллекцию Query::FieldSortConditions. Порядок объектов в коллекции определяет очередность сортировки записей по полям.

Для выборок, построенных на основе таблиц из внешних БД, допустимо создания новой выборки путем непосредственного задания SQL-оператора SELECT. Для создания такой выборки необходимо выполнить следующую последовательность действий:

Создать объект Query с помощью метода ExternalDatabase::CreateQuery. Аргументом метода должен быть Null.

Установить SQL-оператор SELECT в выборке с помощью свойства Query::SQL.

Установить значения параметров SQL-оператора SELECT путем создания объектов SQLParameter, установки значений этих объектов и добавления их в коллекцию Query::SQLParameters.

Для каталогизации выборки, следует установить имя созданной выборки с помощью свойства Query::Name и добавить объект в коллекцию GeoDatabase::Queries, если выборка построена на основе таблиц ГБД или в коллекцию ExternalDatabase::Queries, если выборка построена на основе таблиц внешней БД. Каталогизация выборок, основанных на временных таблицах недопустима.

При успешном добавлении выборки в коллекцию ей присваивается внутренний номер. Непрерывность последовательности внутренних номеров каталогизированных выборок не гарантируется. Для выборок, принадлежащих коллекции GeoDatabase::Queries или ExternalDatabase::Queries, если внешняя БД зарегистрирована в ГБД, присвоенные внутренние номера выборок не изменяются между сеансами доступа к ГБД. Изменения внутренних номеров может произойти при реорганизации ГБД с помощью метода GDBEngine::CompactGDB с режимом gdbCompactNoKeepISN. Кроме того, внутренние номера каталогизированных выборок внешней БД, незарегистрированной в ГБД, могут измениться при регистрации внешней БД в ГБД.

Для доступа к каталогизированным выборкам в коллекциях GeoDatabase::Queries и ExternalDatabase::Queries следует использовать метод Item. Аргументом метода может быть строка - имя выборки или целое число - внутренний номер выборки.

Для доступа к полям выборки в коллекции Query::Fields следует использовать метод Item. Аргументом метода может быть строка - имя поля или целое число - внутренний номер поля (коллекция обеспечивает непрерывность последовательности номеров полей).