Поделиться через


CRecordset::Open

Открытие набора записей с помощью восстановления таблицы или выполнять запрос, который представляет набор записей.

virtual BOOL Open( 
   UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   DWORD dwOptions = none  
);

Параметры

  • nOpenType
    Примите значение по умолчанию AFX_DB_USE_DEFAULT_TYPE или использовать одно из следующих значений из enum OpenType:

    • Набор записей CRecordset::dynaset a с двухнаправленным скроллингом.Членство и упорядочение записей определяется при открытии набора записей, но изменения, сделанные другими пользователями к значениям данных видимы за операцией выборки.Динамические подмножества данных также называется keyset- управляемыми наборами записей.

    • Набор записей CRecordset::snapshot a static с двухнаправленным скроллингом.Членство и упорядочение записей определяется при открытии набора записей; значения данных определяется при выборке записей.Изменения, сделанные другими пользователями, не видны до тех пор, пока набор записей не закрыть, а затем вновь открыт.

    • Набор записей CRecordset::dynamic a с двухнаправленным скроллингом.Изменения, сделанные другими пользователями to membership, упорядочение и значениям данных видимы за операцией выборки.Обратите внимание, что многие драйверы ODBC не поддерживает этот тип набора записей.

    • Набор записей CRecordset::forwardOnly a только для чтения только с передним скроллингом.

      Для CRecordset, значение по умолчанию CRecordset::snapshot.Механизм значения по умолчанию разрешает мастера Visual C++ для взаимодействия с CRecordset как ODBC и DAO CDaoRecordset, которые имеют разные значения по умолчанию.

    Дополнительные сведения об этих типах набора записей см. в статье набор записей (ODBC).Дополнительные сведения см. в статье "использование блока и прокручиваемые курсоры" в Windows SDK.

    Предупреждающее замечаниеВнимание

    Если запрошенный тип не поддерживается, то платформа вызывает исключение.

  • lpszSQL
    Указатель строки, содержащей одно из следующих действий:

    • Указатель NULL.

    • Имя таблицы.

    • Оператор SELECT SQL (по желанию с SQL WHERE или предложением ORDER BY ).

    • Оператор вызов при указании имени предопределенного запроса (хранимой процедуры).Будьте внимательны, что не вставки пробела между фигурной скобкой и ключевым словом вызов.

    Дополнительные сведения об этой строке см. в таблице под примечаниями ClassWizard и описание роли.

    ПримечаниеПримечание

    Порядок столбцов в результирующем наборе должен соответствовать порядку bulk RFX или вызовы функций RFX в переопределение функции DoFieldExchange или DoBulkFieldExchange.

  • dwOptions
    Битовая маска, которая может указать сочетание значений перечислила ниже.Некоторые из них являются взаимоисключающими.По умолчанию используется значение none.

    • CRecordset::none нет установленных параметров.Это значение параметров являются взаимоисключающими со всеми другими значениями.По умолчанию набор записей можно обновить с правка или удалить и позволяет добавлять новые записи с AddNew.Зависит от обновляемости источник данных, а также в параметре nOpenType.Оптимизация для массовых добавлений недоступна.Пакетная выборка строк не будет реализован.Удаленные записи не будут пропуститьы при перемещении по набору записей.Закладки не доступны.Автоматическая пакостный проверить поля реализован.

    • CRecordset::appendOnly не допускает Изменить или Удалить в наборе записей.Разрешить только AddNew.Этот параметр является взаимоисключающим с CRecordset::readOnly.

    • Открытый CRecordset::readOnly набор записей только для чтения.Этот параметр является взаимоисключающим с CRecordset::appendOnly.

    • Использование CRecordset::optimizeBulkAdd подготовленное инструкция SQL оптимизировать добавить много записей одновременно.Область применения.только в том случае, если не используется функция SQLSetPos ODBC API для обновления набора записей.Первое обновление определяет, какие поля помечена как измененные.Этот параметр является взаимоисключающим с CRecordset::useMultiRowFetch.

    • Строка bulk CRecordset::useMultiRowFetch выборка ", чтобы разрешить несколько строк, получаемых за одну операцию выборки.Это продвинутая особенность конструированная для повышения производительности; однако блочный обмен полей записей не поддерживается ClassWizard.Этот параметр является взаимоисключающим с CRecordset::optimizeBulkAdd.Обратите внимание, что при указании CRecordset::useMultiRowFetch, то параметр CRecordset::noDirtyFieldCheck будет включать автоматически (двойная буферизация будет недоступна); в наборах записей только вперед - параметр CRecordset::useExtendedFetch будет включать автоматически.Дополнительные сведения о массовой строке выборке см. в статье Набор записей. Пакетная выборка строк (ODBC).

    • Скип CRecordset::skipDeletedRecords все удаленные записи переходя по набору записей.Это позволит снизить производительность в некоторых относительных выборку.Данный параметр недопустим в наборах записей - только вперед.При вызове Перемещение с параметром nRows устанавливается в значение 0 и набор параметров CRecordset::skipDeletedRecords, то Переместить утвердит.Обратите внимание, что CRecordset::skipDeletedRecords похоже на упаковке драйвера, поэтому это означает, что удаленные строки удалены из набора записей.Однако если драйвер упаковывает записи, то его пропустит только те записи, которые удалении; он не пропустит записей удаленные другими пользователями в то время как набор записей открыт.CRecordset::skipDeletedRecords пропустит строки, удаленные другим пользователям.

    • Закладки для использования CRecordset::useBookmarks мая в наборе записей, если поддерживается.Поиск данных закладки медленный но повышает производительность для перемещения данных.Недопустимый на наборах записей - только вперед.Дополнительные сведения см. в статье Набор записей. Закладки и абсолютное позиционирование (ODBC).

    • CRecordset::noDirtyFieldCheck отключает автоматическую пакостный проверить поля (двойная буферизация).Это повысит производительность. однако необходимо вручную пометить поля как пакостный путем вызова функции-члены SetFieldDirty и SetFieldNull. Обратите внимание, что двойная буферизация в классе CRecordset аналогична двойной буферизации в классе CDaoRecordset.Однако в CRecordset, нельзя включить двойную буферизацию в отдельных полей; можно либо включить ее для всех полей или отключите его для всех полей.Обратите внимание, что если указывается параметр CRecordset::useMultiRowFetch, то CRecordset::noDirtyFieldCheck будет автоматически включитьо; однако SetFieldDirty и SetFieldNull нельзя использовать в наборах записей, выборка строк bulk ".

    • Подготовленное CRecordset::executeDirect не использует инструкцию SQL.Для повышения производительности задайте этот параметр, если функция-член Requery никогда не будет вызван.

    • Реализуйте SQLExtendedFetchCRecordset::useExtendedFetch вместо SQLFetch.Это предназначено для реализации bulk строку выборке наборов записей - только вперед.Если указан параметр CRecordset::useMultiRowFetch в наборе записей вперед - только CRecordset::useExtendedFetch будет включитьо автоматически.

    • CRecordset::userAllocMultiRowBuffers пользователь выделяет буферы хранения данных.Используйте этот параметр совместно с CRecordset::useMultiRowFetch если необходимо выбрать собственное хранилище; в противном случае платформа автоматически выбирают необходимое для хранения.Дополнительные сведения см. в статье Набор записей. Пакетная выборка строк (ODBC).Обратите внимание на то, CRecordset::userAllocMultiRowBuffers без указания CRecordset::useMultiRowFetch приведет к становятся утверждении.

Возвращаемое значение

Ненулевой CRecordset если объект был успешно открыт; в противном случае – значение 0, если CDatabase::Open возвращают 0 (если вызываются).

Заметки

Необходимо вызвать функцию-член, чтобы выполнить этот запрос, определенный набор записей.Перед вызовом Открыть, необходимо создать объект набора записей.

Соединение этого набора записей зависит от источника данных как построении набор записей перед вызовом Открыть.Если передается объект CDatabase конструктору, то набора записей, который не подключен к источнику данных, используйте GetDefaultConnect этого функции-члена попытаться открыть объект базы данных.Если передать NULL в конструктор набора записей, то конструктор создает объект CDatabase, а попытки подключения Открыть объект базы данных.Дополнительные сведения о закрыть набор записей, а соединение в следующих обстоятельствах см. в разделе varying Закрыть.

ПримечаниеПримечание

Доступ к источнику данных через объект CRecordset всегда совместного использования.В отличие от класса CDaoRecordset, нельзя использовать объект CRecordset для открытия источника данных с исключительным доступом.

При вызове Открыть, запрос, обычно оператор SELECT SQL выбирает записи на основе критериев, отображаемом в следующей таблице.

Значение параметра lpszSQL

Выбранные записи определяются by

Пример

NULL

Строка, возвращаемая GetDefaultSQL.

 

Имя таблицы SQL

Все столбцы таблица-списка в DoFieldExchange или DoBulkFieldExchange.

"Customer"

Предопределенное имя запроса (хранимых процедур)

Столбцы запроса определяются для возврата.

"{call OverDueAccts}"

Таблица-список FROM столбец-списка SELECT

Указанные столбцы из указанной таблицы.

"SELECT CustId, CustName FROM

Customer"

Предупреждающее замечаниеВнимание

Будьте внимательны, что не вставить дополнительный пробел в строку SQL.Например, при вводе пробела между фигурной скобкой и ключевым словом вызов, MFC неправильно истолкует строку SQL, как имя таблицы и включит его в выписку SELECT, которая приведет к созданию, бросанной исключении.Аналогично, если предопределенный запрос использует параметр вывода, не вставляйте пробелы между фигурной скобкой и "?" символ.Наконец, не нужно вставлять пробел перед фигурной скобкой в выписку вызов или перед ключевым словом SELECT в выписку SELECT.

Обычная процедура передачи NULL к Открыть; в этом случае вызовы GetDefaultSQLОткрыть.Если используется производный класс CRecordset, то GetDefualtSQL предоставляет имя таблицы, указанной в ClassWizard.Вместо этого можно указать другие сведения в параметре lpszSQL.

Все действия передаче, конструкции Открыть окончательной строки SQL для запроса (строка может иметь SQL WHERE и предложения ORDER BY, добавленные в lpszSQL шнуруют пользователя, передаваемые), а затем выполнить запрос.Можно проверить, построенную строку путем вызова GetSQL после вызова Открыть.Дополнительные сведения о том, как набор записей создает инструкцию SQL и выбирает записи см. в статье Набор записей. Порядок выборки записей в наборе (ODBC).

Элементы данных полей класса набора записей привязатьы к столбцам выбранных данных.Если какие-либо записи возвращаются, то первая запись становится текущей записью.

Если требуется задать параметры для набора записей, таких как сортировка, фильтр или задайте эти после построения объекта набора записей, но перед вызовом Открыть.Если требуется для обновления записей в наборе записей, то после набора записей уже открыт, необходимо вызвать Requery.

Дополнительные сведения, включая дополнительные примеры см. в разделе набор записей (ODBC), статьи Набор записей. Порядок выборки записей в наборе (ODBC) и Набор записей. Создание и закроющ наборы записей (ODBC).

Исключения

Этот метод может создавать исключения типа CDBException* и CMemoryException*.

Пример

Показать различные формы следующей примеры кода вызова Открыть.

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks | 
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

Требования

Header: afxdb.h

См. также

Ссылки

Класс CRecordset

Диаграмма иерархии

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery