Набор записей. Порядок выборки записей в наборе (ODBC)
Обновлен: Ноябрь 2007
В этом разделе приведены сведения, относящиеся к классам ODBC библиотеки MFC.
В данном разделе рассматриваются следующие вопросы:
Роль и возможности разработчика при выборке записей.
Порядок создания инструкций SQL для выборки записей в наборе.
Настройка выборки.
В наборе записей выборка записей из источника данных осуществляется посредством передачи инструкций SQL драйверу ODBC. Используемые инструкции SQL зависят от порядка разработки и открытия класса набора записей.
Возможности разработчика при выборке записей
В следующей таблице показаны возможности разработчика при выборке записей.
Возможности по работе с набором записей
Ситуация |
Возможные действия |
---|---|
Объявление класса набора записей с помощью мастера добавления классов |
Определение таблицы, из которой осуществляется выборка. Определение включаемых столбцов. См. раздел Добавление объекта-получателя ODBC MFC. |
Завершение реализации класса набора записей |
Настройка относящихся к приложению и используемых по умолчанию параметров функций-членов, таких как OnSetOptions (дополнительно), посредством переопределения таких функций. Определение членов данных параметров для создания параметризованного набора записей. |
Создание объекта набора записей (перед вызовом метода Open) |
Определение условий поиска (в том числе составных), которые используются для фильтрации записей с помощью предложения WHERE. См. раздел Набор записей. Фильтрация записей (ODBC). Определение порядка сортировки записей с помощью предложения ORDER BY. См. раздел Набор записей. Сортировка записей (ODBC). Определение значений параметров, добавляемых в класс. См. раздел Набор записей. Параметризация набора записей (ODBC). |
Выполнение запроса набора записей посредством вызова метода Open |
Определение пользовательской строки SQL, которая замещает строку SQL, установленную по умолчанию с помощью мастера. См. описание функции CRecordset::Open в справочнике по библиотеке классов, а также раздел SQL. Настройка инструкций SQL набора записей (ODBC). |
Вызов метода Requery для запроса последних значений из источника данных |
Определение новых параметров, а также условий фильтрации и сортировки. См. раздел Набор записей. Запрос набора записей (ODBC). |
Порядок создания инструкций SQL в наборе записей
При вызове функции-члена Open объекта набора записей с ее помощью автоматически создается инструкция SQL на базе одного или всех из указанных ниже компонентов:
Параметр lpszSQL, передаваемый в функцию-член Open. При отличном от NULL значении этот параметр определяет часть пользовательской строки SQL или строку целиком. Эта строка анализируется в среде .NET Framework. Если строка представляет собой инструкцию SELECT SQL или инструкцию CALL ODBC, она используется в качестве инструкции SQL набора записей. Если строка не начинается с фразы "SELECT" или "{CALL", она используется для построения предложения FROM SQL.
Строка, возвращаемая с помощью функции GetDefaultSQL. По умолчанию возвращается имя таблицы набора записей, определенной с помощью мастера. При необходимости можно определить другое значение, возвращаемое функцией. Если строка не начинается с фразы "SELECT" или "{CALL", автоматически вызывается функция GetDefaultSQL, поскольку в этом случае предполагается, что строка содержит имя таблицы и может использоваться для создания строки SQL.
Члены данных полей в наборе записей, которые связываются с конкретными столбцами таблицы. Столбцы записей автоматически связываются с адресами этих членов, используя их в качестве буфера. Чтобы определить связь членов данных полей со столбцами таблицы, в .NET Framework применяется вызов функции RFX или Bulk RFX в функциях-членах DoFieldExchange или DoBulkFieldExchange набора записей.
Фильтр набора записей (если используется), содержащийся в члене данных m_strFilter. Эта строка используется в .NET Framework для построения предложения WHERE SQL.
Порядок сортировки набора записей (если используется), определенный в члене данных m_strSort. Эта строка используется в .NET Framework для построения предложения ORDER BY SQL.
Совет. Чтобы использовать предложение GROUP BY (и, по возможности, предложение HAVING) SQL, добавьте предложения в конец строки фильтра.
Определенные для класса значения членов данных параметров. Значения параметров задаются до вызова метода Open или Requery. В .NET Framework значения параметров привязываются к местозаполнителям "?" в строке SQL. Во время компиляции задается строка с местозаполнителями. Во время выполнения отсутствующие сведения автоматически заполняются на основании передаваемых значений.
На основании указанных выше компонентов с помощью метода Open создается инструкция SELECT SQL. Дополнительные сведения об использовании этих компонентов в .NET Framework см. в разделе Настройка выборки.
После построения инструкции SQL метод Open передает ее в диспетчер драйвера ODBC и библиотеку курсоров ODBC (если она загружена в память), откуда она передается в драйвер ODBC для конкретной СУБД. Драйвер подключается с СУБД для выборки записей из источника данных и извлекает первую запись. Извлеченная запись загружается в члены данных полей в наборе записей.
Сочетание этих способов можно использовать для открытия таблиц и построения запросов, основанных на объединении нескольких таблиц. После дополнительной настройки можно вызывать готовые запросы (хранимые процедуры), выбирать неизвестные во время разработки столбцы таблицы и привязывать их к полям набора записей, а также выполнять множество других задач доступа к данным. Задачи, которые не могут быть выполнены с помощью настраиваемых наборов записей, можно выполнить посредством вызова функций интерфейса API ODBC или непосредственного выполнения инструкций SQL с помощью функции CDatabase::ExecuteSQL.
Настройка выборки
Помимо определения фильтра, порядка сортировки или параметров, можно выполнить следующие действия по настройке выборки набора записей:
Передача пользовательской строки SQL в функцию lpszSQL при вызове метода Open для набора записей. Любые передаваемые в функцию lpsqSQL значения обладают приоритетом по отношению к возвращаемым значениям функции GetDefaultSQL.
Дополнительные сведения см. в разделе SQL. Настройка инструкций SQL набора записей (ODBC). В этом разделе описываются типы инструкций SQL (или частичных инструкций), которые можно передавать в метод Open, а также выполняемые с ними операции .NET Framework.
Примечание. Если передаваемая пользовательская строка не начинается с фразы "SELECT" или "{CALL", в MFC предполагается, что она содержит имя таблицы. Это примечание также относится к следующему элементу маркированного списка.
Изменение строки, которая записывается в функцию-член GetDefaultSQL набора записей с помощью мастера. Измените возвращаемое значение в коде функции. По умолчанию с помощью мастера записывается функция GetDefaultSQL, возвращающая имя одиночной таблицы.
С помощью функции GetDefaultSQL можно возвращать любые элементы, передаваемые в параметре lpszSQL метода Open. Если в параметре lpszSQL не передается пользовательская строка, используется строка, возвращаемая функцией GetDefaultSQL. Функция GetDefaultSQL должна возвращать как минимум имя одиночной таблицы. Также в этой функции можно возвращать имена нескольких таблиц, полную инструкцию SELECT, инструкцию CALL ODBC и другие элементы. Перечень элементов, которые могут передаваться в параметре lpszSQL или возвращаться в функции GetDefaultSQL, см. в разделе SQL. Настройка инструкций SQL набора записей (ODBC).
Если выполняется объединение нескольких таблиц, измените функцию GetDefaultSQL, чтобы настроить список таблиц, используемых в предложении FROM SQL. Дополнительные сведения см. в разделе Набор записей. Объединение (ODBC).
Привязка дополнительных членов данных полей вручную, в том числе на основании сведений о схеме источника данных, полученных во время выполнения. Члены полей данных добавляются в класс набора записей. Вызовы функций RFX и Bulk RFX, в которых используются эти члены добавляются в функции-члены DoFieldExchange или DoBulkFieldExchange. Инициализация членов данных определяется в конструкторе класса. Дополнительные сведения см. в разделе Набор записей. Динамическая привязка столбцов данных (ODBC).
Настройка относящихся к приложению и используемых по умолчанию параметров функций-членов, таких как OnSetOptions, посредством переопределения таких функций.
Чтобы определить в качестве базы набора записей составную инструкцию SQL, следует использовать сочетание описанных выше способов настройки. Например, таким образом можно объединять несколько таблиц или использовать предложения и ключевые слова SQL, которые не поддерживаются напрямую в наборах записей.