Класс CDaoRecordset

Представляет набор записей, выбранных из источника данных.

Синтаксис

class CDaoRecordset : public CObject

Участники

Открытые конструкторы

Имя Описание
CDaoRecordset::CDaoRecordset Формирует объект CDaoRecordset.

Открытые методы

Имя Описание
CDaoRecordset::AddNew Готовится к добавлению новой записи. Вызов обновления для завершения добавления.
CDaoRecordset::CanAppend Возвращает ненулевое значение, если новые записи можно добавить в набор записей с помощью функции-члена AddNew .
CDaoRecordset::CanBookmark Возвращает ненулевое значение, если набор записей поддерживает закладки.
CDaoRecordset::CancelUpdate Отменяет все ожидающие обновления из-за операции "Изменить " или "ДобавитьNew ".
CDaoRecordset::CanRestart Возвращает ненулевое значение, если requery можно вызвать для повторного выполнения запроса набора записей.
CDaoRecordset::CanScroll Возвращает ненулевое значение, если можно прокрутить записи.
CDaoRecordset::CanTransact Возвращает ненулевое значение, если источник данных поддерживает транзакции.
CDaoRecordset::CanUpdate Возвращает ненулевое значение, если набор записей можно обновить (можно добавлять, обновлять или удалять записи).
CDaoRecordset::Close Закрывает набор записей.
CDaoRecordset::D elete Удаляет текущую запись из набора записей. После удаления необходимо явно прокрутить другую запись.
CDaoRecordset::D oFieldExchange Вызывается для обмена данными (в обоих направлениях) между элементами данных поля набора записей и соответствующей записью в источнике данных. Реализует обмен полями записей DAO (DFX).
CDaoRecordset::Edit Готовится к изменениям текущей записи. Вызов Update для завершения редактирования.
CDaoRecordset::FillCache Заполняет все или часть локального кэша для объекта набора записей, содержащего данные из источника данных ODBC.
CDaoRecordset::Find Находит первое, следующее, предыдущее или последнее расположение определенной строки в наборе записей типа dynaset, которое удовлетворяет указанным критериям и делает запись текущей записи.
CDaoRecordset::FindFirst Находит первую запись в наборе записей типа dynaset или типа моментальных снимков, удовлетворяющих заданным критериям, и делает запись текущей записи.
CDaoRecordset::FindLast Находит последнюю запись в наборе записей типа dynaset или типа моментальных снимков, удовлетворяющих заданным критериям, и делает запись текущей записи.
CDaoRecordset::FindNext Находит следующую запись в наборе записей типа dynaset или типа моментальных снимков, удовлетворяющих указанным критериям, и делает запись текущей записи.
CDaoRecordset::FindPrev Находит предыдущую запись в наборе записей типа dynaset или типа моментальных снимков, удовлетворяющих заданным критериям, и делает запись текущей записи.
CDaoRecordset::GetAbsolutePosition Возвращает номер записи текущей записи объекта набора записей.
CDaoRecordset::GetBookmark Возвращает значение, представляющее закладку в записи.
CDaoRecordset::GetCacheSize Возвращает значение, указывающее количество записей в наборе записей типа dynaset, содержащего данные, которые будут локально кэшироваться из источника данных ODBC.
CDaoRecordset::GetCacheStart Возвращает значение, указывающее закладку первой записи в наборе записей, которую необходимо кэшировать.
CDaoRecordset::GetCurrentIndex CString Возвращает имя индекса, который недавно использовался для индексированного типа таблицыCDaoRecordset.
CDaoRecordset::GetDateCreated Возвращает дату и время создания базовой таблицы, базовой CDaoRecordset базы данных объекта
CDaoRecordset::GetDateLastUpdated Возвращает дату и время последнего изменения, внесенного в структуру базовой таблицы, лежащей в CDaoRecordset основе объекта.
CDaoRecordset::GetDefaultDBName Возвращает имя источника данных по умолчанию.
CDaoRecordset::GetDefaultSQL Вызывается для получения строки SQL по умолчанию для выполнения.
CDaoRecordset::GetEditMode Возвращает значение, указывающее состояние редактирования текущей записи.
CDaoRecordset::GetFieldCount Возвращает значение, представляющее количество полей в наборе записей.
CDaoRecordset::GetFieldInfo Возвращает определенные типы сведений о полях в наборе записей.
CDaoRecordset::GetFieldValue Возвращает значение поля в наборе записей.
CDaoRecordset::GetIndexCount Извлекает количество индексов в таблице, базовой набором записей.
CDaoRecordset::GetIndexInfo Возвращает различные виды сведений об индексе.
CDaoRecordset::GetLastModifiedBookmark Используется для определения последней добавленной или обновленной записи.
CDaoRecordset::GetLockingMode Возвращает значение, указывающее тип блокировки, который действует во время редактирования.
CDaoRecordset::GetName CString Возвращает имя набора записей.
CDaoRecordset::GetParamValue Извлекает текущее значение указанного параметра, хранящегося в базовом объекте DAOParameter.
CDaoRecordset::GetPercentPosition Возвращает позицию текущей записи в процентах от общего количества записей.
CDaoRecordset::GetRecordCount Возвращает количество записей, к которых обращается объект набора записей.
CDaoRecordset::GetSQL Возвращает строку SQL, используемую для выбора записей для набора записей.
CDaoRecordset::GetType Вызывается для определения типа набора записей: табличного типа, типа dynaset или типа моментального снимка.
CDaoRecordset::GetValidationRule CString Возвращает значение, содержащее значение, которое проверяет данные по мере ввода в поле.
CDaoRecordset::GetValidationText Извлекает текст, отображаемый, когда правило проверки не удовлетворено.
CDaoRecordset::IsBOF Возвращает ненулевое значение, если набор записей был размещен до первой записи. Текущая запись отсутствует.
CDaoRecordset::IsDeleted Возвращает ненулевое значение, если набор записей размещается в удаленной записи.
CDaoRecordset::IsEOF Возвращает ненулевое значение, если набор записей был размещен после последней записи. Текущая запись отсутствует.
CDaoRecordset::IsFieldDirty Возвращает ненулевое значение, если указанное поле в текущей записи было изменено.
CDaoRecordset::IsFieldNull Возвращает ненулевое значение, если указанное поле в текущей записи равно NULL (не имеет значения).
CDaoRecordset::IsFieldNullable Возвращает ненулевое значение, если указанное поле в текущей записи может иметь значение NULL (без значения).
CDaoRecordset::IsOpen Возвращает ненулевое значение, если ранее был вызван open .
CDaoRecordset::Move Помещает набор записей в указанное число записей из текущей записи в любом направлении.
CDaoRecordset::MoveFirst Помещает текущую запись в первую запись в наборе записей.
CDaoRecordset::MoveLast Помещает текущую запись в последнюю запись в наборе записей.
CDaoRecordset::MoveNext Позиционирует текущую запись на следующей записи в наборе записей.
CDaoRecordset::MovePrev Позиционирует текущую запись на предыдущей записи в наборе записей.
CDaoRecordset::Open Создает набор записей из таблицы, dynaset или моментального снимка.
CDaoRecordset::Requery Снова запускает запрос набора записей, чтобы обновить выбранные записи.
CDaoRecordset::Seek Находит запись в объекте набора записей индексированного типа таблицы, который удовлетворяет заданным критериям текущего индекса и делает запись текущей записи.
CDaoRecordset::SetAbsolutePosition Задает номер записи текущей записи объекта набора записей.
CDaoRecordset::SetBookmark Помещает набор записей в запись, содержащую указанную закладку.
CDaoRecordset::SetCacheSize Задает значение, указывающее количество записей в наборе записей типа dynaset, содержащего данные, которые будут локально кэшироваться из источника данных ODBC.
CDaoRecordset::SetCacheStart Задает значение, указывающее закладку первой записи в наборе записей для кэширования.
CDaoRecordset::SetCurrentIndex Вызывается для задания индекса в наборе записей типа таблицы.
CDaoRecordset::SetFieldDirty Помечает указанное поле в текущей записи как изменено.
CDaoRecordset::SetFieldNull Задает значение указанного поля в текущей записи значение NULL (без значения).
CDaoRecordset::SetFieldValue Задает значение поля в наборе записей.
CDaoRecordset::SetFieldValueNull Задает значение поля в наборе записей значение NULL. (не имеет значения).
CDaoRecordset::SetLockingMode Задает значение, указывающее тип блокировки для применения во время редактирования.
CDaoRecordset::SetParamValue Задает текущее значение указанного параметра, хранящегося в базовом объекте DAOParameter.
CDaoRecordset::SetParamValueNull Задает текущее значение указанного параметра значение NULL (без значения).
CDaoRecordset::SetPercentPosition Задает положение текущей записи в расположение, соответствующее проценту общего количества записей в наборе записей.
CDaoRecordset::Update Выполняет AddNew или Edit выполняет операцию, сохраняя новые или измененные данные в источнике данных.

Открытые члены данных

Имя Описание
CDaoRecordset::m_bCheckCacheForDirtyFields Содержит флаг, указывающий, будут ли поля автоматически помечены как измененные.
CDaoRecordset::m_nFields Содержит количество элементов данных поля в классе наборов записей и количество столбцов, выбранных набором записей из источника данных.
CDaoRecordset::m_nParams Содержит количество элементов данных параметра в классе наборов записей — количество параметров, переданных запросом набора записей.
CDaoRecordset::m_pDAORecordset Указатель на интерфейс DAO, базовый объект набора записей.
CDaoRecordset::m_pDatabase Исходная база данных для этого результирующий набор. Содержит указатель на объект CDaoDatabase .
CDaoRecordset::m_strFilter Содержит строку, используемую для создания инструкции SQL WHERE .
CDaoRecordset::m_strSort Содержит строку, используемую для создания инструкции SQL ORDER BY .

Замечания

Известные как "наборы записей" CDaoRecordset , объекты доступны в следующих трех формах:

  • Наборы записей типа таблицы представляют базовую таблицу, которую можно использовать для проверки, добавления, изменения или удаления записей из одной таблицы базы данных.

  • Наборы записей типа Dynaset являются результатом запроса, который может содержать обновляемые записи. Эти наборы записей — это набор записей, которые можно использовать для проверки, добавления, изменения или удаления записей из базовой таблицы или таблиц базы данных. Наборы записей типа Dynaset могут содержать поля из одной или нескольких таблиц в базе данных.

  • Наборы записей типа моментальных снимков — это статическое копирование набора записей, которые можно использовать для поиска данных или создания отчетов. Эти наборы записей могут содержать поля из одной или нескольких таблиц в базе данных, но не могут быть обновлены.

Каждая форма набора записей представляет набор записей, фиксированный во время открытия набора записей. При прокрутке до записи в наборе записей типа таблицы или наборе записей типа dynaset он отражает изменения, внесенные в запись после открытия набора записей, либо другими пользователями, либо другими наборами записей в приложении. (Не удается обновить набор записей типа моментального снимка.) Вы можете использовать CDaoRecordset непосредственно или наследовать класс набора записей для конкретного приложения.CDaoRecordset Можно выполнить следующее.

  • Прокрутите записи.

  • Задайте индекс и быстро найдите записи с помощью поиска (только наборы записей типа таблицы).

  • Найдите записи на основе сравнения строк: "", "<=", "<=", "=", ">=" или ">" (наборы записей типа dynaset и моментального снимка).

  • Обновите записи и укажите режим блокировки (кроме наборов записей типа моментальных снимков).

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

  • Сортировка набора записей.

  • Параметризируйте набор записей, чтобы настроить его выбор с информацией, неизвестной до времени выполнения.

Класс CDaoRecordset предоставляет интерфейс, аналогичный классу CRecordset. Основное различие заключается в том, что класс CDaoRecordset обращается к данным через объект доступа к данным (DAO) на основе OLE. Класс CRecordset обращается к СУБД через open Database Подключение ivity (ODBC) и драйвер ODBC для этой СУБД.

Примечание.

Классы базы данных DAO отличаются от классов баз данных MFC на основе Подключение тивности открытой базы данных (ODBC). Все имена классов базы данных DAO имеют префикс CDao. Вы по-прежнему можете получить доступ к источникам данных ODBC с помощью классов DAO; Классы DAO обычно предлагают превосходные возможности, так как они относятся к ядру СУБД Microsoft Jet.

Вы можете использовать CDaoRecordset непосредственно или производный класс от CDaoRecordset. Чтобы использовать класс набора записей в любом случае, откройте базу данных и создайте объект набора записей, передав конструктор указатель на CDaoDatabase объект. Можно также создать CDaoRecordset объект и позволить MFC создать временный CDaoDatabase объект. Затем вызовите функцию open-member набора записей набора записей, указав, является ли объект набором записей типа таблицы, набором записей типа dynaset или набором записей типа моментального снимка. Вызов Open выбирает данные из базы данных и извлекает первую запись.

Используйте функции-члены объекта и члены данных, чтобы прокручивать записи и работать с ними. Доступные операции зависят от того, является ли объект набором записей типа таблицы, набором записей типа dynaset или набором записей типа моментальных снимков, а также от того, можно ли обновить или только для чтения, это зависит от возможности базы данных или источника данных Open Database Подключение ivity (ODBC). Чтобы обновить записи, которые могли быть изменены или добавлены с момента Open вызова, вызовите функцию элемента Requery объекта. Вызовите функцию-член объекта Close и уничтожите объект после завершения работы с ним.

CDaoRecordsetиспользует обмен полями записей DAO (DFX) для поддержки чтения и обновления полей записей с помощью элементов C++ типа или CDaoRecordsetпроизводного от типаCDaoRecordset. Вы также можете реализовать динамическую привязку столбцов в базе данных без использования механизма DFX с помощью GetFieldValue и SetFieldValue.

Дополнительные сведения см. в разделе "Объект Recordset" в справке DAO.

Иерархия наследования

CObject

CDaoRecordset

Требования

Header: afxdao.h

CDaoRecordset::AddNew

Вызовите эту функцию-член, чтобы добавить новую запись в набор записей типа таблицы или dynaset-type.

virtual void AddNew();

Замечания

Поля записи изначально имеют значение NULL. (В терминологии базы данных null означает "отсутствие значения" и не совпадает со значением NULL в C++.) Чтобы завершить операцию, необходимо вызвать функцию элемента Update . Update сохраняет изменения в источнике данных.

Внимание

Если изменить запись, а затем прокрутить другую запись без вызова Update, изменения будут потеряны без предупреждения.

При добавлении записи в набор записей типа dynaset путем вызова AddNew запись отображается в наборе записей и включена в базовую таблицу, где она становится видимой для любых новых CDaoRecordset объектов.

Позиция новой записи зависит от типа набора записей:

  • В наборе записей типа dynaset, где новая запись вставляется, не гарантируется. Это поведение изменилось с Microsoft Jet 3.0 по соображениям производительности и параллелизма. Если ваша цель состоит в том, чтобы сделать только что добавленную запись текущей, получите закладку последней измененной записи и перейдите к этой закладке:
rs.SetBookmark(rs.GetLastModifiedBookmark());
  • В наборе записей типа таблицы, для которого был указан индекс, записи возвращаются в правильном месте в порядке сортировки. Если индекс не указан, новые записи возвращаются в конце набора записей.

Запись, которая была текущей, прежде чем вы использовали, AddNew остается текущей. Если вы хотите сделать новую запись текущей и набор записей поддерживает закладки, вызовите SetBookmark в закладку, определяемую параметром свойства LastModified базового объекта набора записей DAO. Это полезно для определения значения полей счетчика (автоматического увеличения) в добавленной записи. Дополнительные сведения см. в разделе GetLastModifiedBookmark.

Если база данных поддерживает транзакции, можно выполнить AddNew вызов в рамках транзакции. Дополнительные сведения о транзакциях см. в классе CDaoWorkspace. Обратите внимание, что перед вызовом AddNewследует вызвать CDaoWorkspace::BeginTrans.

Это недопустимо для вызова AddNew набора записей, чья функция Open-член не была вызвана. Вызывается CDaoException при вызове AddNew набора записей, который не может быть добавлен. Можно определить, можно ли обновить набор записей, вызвав CanAppend.

Платформа помечает измененные элементы данных поля, чтобы убедиться, что они будут записаны в запись в источнике данных механизмом обмена полями DAO (DFX). Изменение значения поля обычно задает поле грязное автоматически, поэтому вам редко нужно вызывать SetFieldDirty самостоятельно, но иногда требуется убедиться, что столбцы будут явно обновлены или вставлены независимо от значения элемента данных поля. Механизм DFX также использует метод PSEUDO NULL. Дополнительные сведения см. в разделе CDaoFieldExchange::m_nOperation.

Если механизм двойной буферизации не используется, изменение значения поля не автоматически задает поле как грязное. В этом случае необходимо явно задать поле грязное. Флаг, содержащийся в m_bCheckCacheForDirtyFields, управляет этим автоматическим полем проверка.

Примечание.

Если записи дважды буферизовываются (то есть автоматическое проверка проверка ing включен), вызов CancelUpdate восстановит переменные-члены в значениях, которые они имели раньше AddNew или Edit были вызваны.

Дополнительные сведения см. в разделах "Метод AddNew", "CancelUpdate Method", "LastModified Property" и "EditMode Property" в справке DAO.

CDaoRecordset::CanAppend

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

BOOL CanAppend() const;

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

Ненулевое значение, если набор записей позволяет добавлять новые записи; в противном случае — 0. CanAppend возвращает значение 0, если вы открыли набор записей только для чтения.

Замечания

Дополнительные сведения см. в разделе "Метод добавления" в справке DAO.

CDaoRecordset::CanBookmark

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

BOOL CanBookmark();

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

Ненулевое значение, если набор записей поддерживает закладки, в противном случае — значение 0.

Замечания

Если вы используете наборы записей, основанные полностью на таблицах ядра СУБД Microsoft Jet, закладки можно использовать, кроме наборов записей типа моментальных снимков, помеченных как наборы записей только вперед. Другие продукты базы данных (внешние источники данных ODBC) могут не поддерживать закладки.

Дополнительные сведения см. в разделе "Свойство закладки" в справке DAO.

CDaoRecordset::CancelUpdate

Функция-член CancelUpdate отменяет все ожидающие обновления из-за операции "Изменить " или "ДобавитьNew ".

virtual void CancelUpdate();

Замечания

Например, если приложение вызывает Edit функцию или AddNew функцию-член и не вызывает update, отменяет любые изменения, CancelUpdate внесенные после Edit или AddNew вызываемого.

Примечание.

Если записи дважды буферизовываются (то есть автоматическое проверка проверка ing включен), вызов CancelUpdate восстановит переменные-члены в значениях, которые они имели раньше AddNew или Edit были вызваны.

Если ожидалось Edit или AddNew не выполняется операция, CancelUpdate то MFC вызывает исключение. Вызовите функцию-член GetEditMode, чтобы определить, существует ли ожидающая операция, которую можно отменить.

Дополнительные сведения см. в разделе "Метод CancelUpdate" в справке DAO.

CDaoRecordset::CanRestart

Вызовите эту функцию-член, чтобы определить, разрешает ли набор записей перезапускать запрос (обновлять записи), вызывая Requery функцию-член.

BOOL CanRestart();

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

Ненулевое значение, если Requery его можно вызвать для повторного выполнения запроса набора записей, в противном случае — значение 0.

Замечания

Наборы записей типа таблицы не поддерживаются Requery.

Если Requery это не поддерживается, вызов закройте, а затем откройте, чтобы обновить данные. После изменения значений параметров можно вызвать Requery запрос базового параметра объекта набора записей.

Дополнительные сведения см. в разделе "Перезапущенное свойство" в справке DAO.

CDaoRecordset::CanScroll

Вызовите эту функцию-член, чтобы определить, разрешен ли набор записей прокрутки.

BOOL CanScroll() const;

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

Ненулевое значение, если можно прокрутить записи, в противном случае — значение 0.

Замечания

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

Дополнительные сведения см. в разделе "Размещение указателя текущей записи с помощью DAO" в справке DAO.

CDaoRecordset::CanTransact

Вызовите эту функцию-член, чтобы определить, разрешен ли набор записей транзакций.

BOOL CanTransact();

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

Ненулевое значение, если базовый источник данных поддерживает транзакции, в противном случае — значение 0.

Замечания

Дополнительные сведения см. в разделе "Свойства транзакций" в справке DAO.

CDaoRecordset::CanUpdate

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

BOOL CanUpdate() const;

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

Ненулевое значение, если набор записей можно обновить (добавить, обновить и удалить записи), в противном случае — значение 0.

Замечания

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

Дополнительные сведения см. в разделах "AddNew Method", "Edit Method", "Delete Method", "Update Method" и "Updatable Property" в справке DAO.

CDaoRecordset::CDaoRecordset

Формирует объект CDaoRecordset.

CDaoRecordset(CDaoDatabase* pDatabase = NULL);

Параметры

pDatabase
Содержит указатель на объект CDaoDatabase или значение NULL. Если функция-член объекта Open не была вызвана, CDaoDatabase чтобы подключить ее к источнику данных, набор записей пытается открыть его для вас во время собственного вызова Open. При передаче NULL объект создается и подключается для вас с помощью сведений об источнике данных, CDaoDatabase указанных при получении класса наборов записей.CDaoRecordset

Замечания

Можно использовать CDaoRecordset непосредственно или производный класс для конкретного приложения.CDaoRecordset КлассWizard можно использовать для получения классов наборов записей.

Примечание.

Если вы наследуете класс, производный класс должен предоставить собственный CDaoRecordset конструктор. В конструкторе производного класса вызовите конструктор CDaoRecordset::CDaoRecordset, передавая соответствующие параметры вместе с ним.

Передайте значение NULL в конструктор набора записей, чтобы CDaoDatabase объект был создан и подключен автоматически. Это полезный ярлык, который не требует создания и подключения CDaoDatabase объекта до создания набора записей. CDaoDatabase Если объект не открыт, то для вас также будет создан объект CDaoWorkspace, использующий рабочую область по умолчанию. Дополнительные сведения см. в разделе CDaoDatabase::CDaoDatabase.

CDaoRecordset::Close

CDaoRecordset Закрытие объекта удаляет его из коллекции открытых наборов записей в связанной базе данных.

virtual void Close();

Замечания

Так как Close объект не уничтожается CDaoRecordset , можно повторно использовать объект, вызвав Open один источник данных или другой источник данных.

Все ожидающие инструкции AddNew или Edit отменяются, а все ожидающие транзакции откатываются. Если вы хотите сохранить ожидающие дополнения или изменения, вызовите Update перед вызовом Close каждого набора записей.

После вызова можно снова вызвать OpenClose. Это позволяет повторно использовать объект набора записей. Лучшей альтернативой является вызов Requery, если это возможно.

Дополнительные сведения см. в разделе "Закрыть метод" в справке DAO.

CDaoRecordset::D elete

Вызовите эту функцию-член, чтобы удалить текущую запись в открытом объекте набора записей типа dynaset или табличного типа.

virtual void Delete();

Замечания

После успешного удаления элементы данных набора записей имеют значение NULL, и для удаления удаленной записи необходимо явно вызвать одну из функций элемента навигации набора записей (Move, Seek, SetBookmark и т. д.). При удалении записей из набора записей перед вызовом Deleteдолжен быть текущая запись. В противном случае MFC создает исключение.

Delete Удаляет текущую запись и делает ее недоступной. Хотя вы не можете изменить или использовать удаленную запись, она остается текущей. Однако после перехода на другую запись невозможно снова сделать удаленную запись текущей.

Внимание

Набор записей должен быть обновляемым, и при вызове Deleteнабора записей должна быть допустимая запись. Например, если удалить запись, но не прокрутите новую запись перед повторным вызовом Delete , Delete создает исключение CDaoException.

Запись можно отменить, если вы используете транзакции и вызываете функцию члена CDaoWorkspace::Rollback . Если базовая таблица является основной таблицей в каскадной связи удаления, удаление текущей записи также может удалить одну или несколько записей в внешней таблице. Дополнительные сведения см. в определении "каскадное удаление" в справке DAO.

В отличие AddNew от этого Edit, вызов Delete не следует вызову Update.

Дополнительные сведения см. в разделах "AddNew Method", "Edit Method", "Delete Method", "Update Method" и "Updatable Property" в справке DAO.

CDaoRecordset::D oFieldExchange

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

virtual void DoFieldExchange(CDaoFieldExchange* pFX);

Параметры

Pfx
Содержит указатель на CDaoFieldExchange объект. Платформа уже настроит этот объект, чтобы указать контекст для операции обмена полями.

Замечания

Он также привязывает элементы данных параметров, если таковые есть, к заполнителям параметров в строке инструкции SQL для выбора набора записей. Обмен данными поля с именем обмена полями DAO (DFX) работает в обоих направлениях: от элементов данных поля объекта набора записей к полям записи источника данных и из записи источника данных в объект набора записей. Если столбцы привязки динамически, для реализации DoFieldExchangeне требуется.

Единственное действие, которое необходимо выполнить DoFieldExchange для класса производного набора записей, — создать класс с помощью ClassWizard и указать имена и типы данных элементов данных поля. Вы также можете добавить код в то, что КлассWizard записывает, чтобы указать члены данных параметров. Если все поля должны быть привязаны динамически, эта функция будет неактивна, если не указать элементы данных параметров.

При объявлении класса производного набора записей с помощью ClassWizard мастер записывает переопределение DoFieldExchange для вас, которое напоминает следующий пример:

void CCustSet::DoFieldExchange(CDaoFieldExchange *pFX)
{
   pFX->SetFieldType(CDaoFieldExchange::param);
   DFX_Text(pFX, _T("Param"), m_strParam);
   pFX->SetFieldType(CDaoFieldExchange::outputColumn);
   DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
   DFX_Text(pFX, _T("LastName"), m_LastName);
   DFX_Short(pFX, _T("Age"), m_Age);
   DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
   DFX_DateTime(pFX, _T("termination_date"), m_termination_date);

   CDaoRecordset::DoFieldExchange(pFX);
}

CDaoRecordset::Edit

Вызовите эту функцию-член, чтобы разрешить изменения текущей записи.

virtual void Edit();

Замечания

После вызова Edit функции-члена изменения, внесенные в поля текущей записи, копируются в буфер копирования. После внесения необходимых изменений в запись вызовите Update сохранение изменений. Edit сохраняет значения элементов данных набора записей. При вызове EditEdit внесите изменения, вызовите снова, значения записи восстанавливаются до первого Edit вызова.

Внимание

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

В некоторых случаях может потребоваться обновить столбец, сделав его null (не содержащим данных). Для этого вызовите SetFieldNull параметр TRUE, чтобы пометить поле NULL. Это также приводит к обновлению столбца. Если вы хотите записать поле в источник данных, даже если его значение не изменилось, вызовите SetFieldDirty параметр TRUE. Это работает, даже если поле имеет значение NULL.

Платформа помечает измененные элементы данных поля, чтобы убедиться, что они будут записаны в запись в источнике данных механизмом обмена полями DAO (DFX). Изменение значения поля обычно задает поле грязное автоматически, поэтому вам редко нужно вызывать SetFieldDirty самостоятельно, но иногда требуется убедиться, что столбцы будут явно обновлены или вставлены независимо от значения элемента данных поля. Механизм DFX также использует метод PSEUDO NULL. Дополнительные сведения см. в разделе CDaoFieldExchange::m_nOperation.

Если механизм двойной буферизации не используется, изменение значения поля не автоматически задает поле как грязное. В этом случае необходимо явно задать поле грязное. Флаг, содержащийся в m_bCheckCacheForDirtyFields, управляет этим автоматическим полем проверка.

Когда объект набора записей пессимистично заблокирован в среде с несколькими пользователями, запись остается заблокированной с момента Edit завершения обновления. Если набор записей оптимистично заблокирован, запись заблокирована и сравнивается с предварительно измененной записью непосредственно перед обновлением в базе данных. Если запись изменилась с момента вызова Edit, операция завершается ошибкой, Update и MFC создает исключение. Вы можете изменить режим блокировки с помощью SetLockingMode.

Примечание.

Оптимистическая блокировка всегда используется во внешних форматах баз данных, таких как ODBC и устанавливаемый ISAM.

Текущая запись остается текущей после вызова Edit. Для вызова Editдолжна быть текущая запись. Если текущей записи нет или если набор записей не ссылается на открытый объект набора записей типа таблицы или dynaset, возникает исключение. Вызов Edit вызывает CDaoException исключение при следующих условиях:

  • Текущая запись отсутствует.

  • База данных или набор записей доступна только для чтения.

  • Поля в записи не обновляются.

  • База данных или набор записей была открыта для монопольного использования другим пользователем.

  • Другой пользователь заблокировал страницу, содержащую запись.

Если источник данных поддерживает транзакции, можно выполнить Edit вызов части транзакции. Обратите внимание, что необходимо вызвать перед вызовом CDaoWorkspace::BeginTransEdit и после открытия набора записей. Кроме того, обратите внимание, что вызов CDaoWorkspace::CommitTrans не является заменой вызова Update для завершения Edit операции. Дополнительные сведения о транзакциях см. в классе CDaoWorkspace.

Дополнительные сведения см. в разделах "AddNew Method", "Edit Method", "Delete Method", "Update Method" и "Updatable Property" в справке DAO.

CDaoRecordset::FillCache

Вызовите эту функцию-член, чтобы кэшировать указанное количество записей из набора записей.

void FillCache(
    long* pSize = NULL,
    COleVariant* pBookmark = NULL);

Параметры

pSize
Указывает количество строк для заполнения кэша. Если этот параметр опущен, значение определяется параметром свойства CacheSize базового объекта DAO.

pBookmark
COleVariant, указывающий закладку. Кэш заполняется начиная с записи, указанной этой закладкой. Если этот параметр не указан, кэш заполняется начиная с записи, указанной свойством CacheStart базового объекта DAO.

Замечания

Кэширование повышает производительность приложения, которое извлекает или извлекает данные с удаленного сервера. Кэш — это место в локальной памяти, в которой хранятся последние данные, полученные с сервера, предполагая, что данные, вероятно, будут запрашиваться снова во время работы приложения. Когда запрашивается запрос данных, ядро СУБД Microsoft Jet проверка кэш для данных в первую очередь, а не извлекает его с сервера, что занимает больше времени. Использование кэширования данных в источниках данных, отличных от ODBC, не влияет, так как данные не сохраняются в кэше.

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

Любая база данных ODBC, доступ к ней с объектами набора записей, может иметь локальный кэш. Чтобы создать кэш, откройте объект набора записей из удаленного источника данных, а затем вызовите SetCacheSize функции и SetCacheStart член набора записей. Если lSize и lBookmark создают диапазон, который частично или полностью выходит за пределы заданного диапазона SetCacheSize , и SetCacheStartчасть набора записей за пределами этого диапазона игнорируется и не загружается в кэш. Если FillCache запросы больше записей, чем осталось в удаленном источнике данных, извлекаются только остальные записи, и исключение не возникает.

Записи, полученные из кэша, не отражают изменения, внесенные одновременно в исходные данные другими пользователями.

FillCache извлекает только записи, которые еще не кэшируются. Чтобы принудительно обновить все кэшированные данные, вызовите функцию-член с параметром lSize равным 0, снова вызовите SetCacheSizeSetCacheSize параметр lSize, равный размеру запрошенного кэша, а затем вызовите .FillCache

Дополнительные сведения см. в разделе "Метод FillCache" в справке DAO.

CDaoRecordset::Find

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

virtual BOOL Find(
    long lFindType,
    LPCTSTR lpszFilter);

Параметры

lFindType
Значение, указывающее тип операции Find, требуемой. Возможны следующие значения:

  • AFX_DAO_NEXT Найти следующее расположение соответствующей строки.

  • AFX_DAO_PREV Найти предыдущее расположение соответствующей строки.

  • AFX_DAO_FIRST Найти первое расположение соответствующей строки.

  • AFX_DAO_LAST Найти последнее расположение соответствующей строки.

lpszFilter
Строковое выражение (например, предложение WHERE в инструкции SQL без слова WHERE), используемое для поиска записи. Например:

rs.Find(AFX_DAO_FIRST, _T("EmployeeID = 7"));
rs.Find(AFX_DAO_NEXT, _T("LastName = 'Jones'"));

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

Ненулевое значение, если найдены соответствующие записи, в противном случае — значение 0.

Замечания

Первый, следующий, предыдущий или последний экземпляр строки можно найти. Find — это виртуальная функция, поэтому ее можно переопределить и добавить собственную реализацию. Функции-члены FindFirstFindLastFindNextи FindPrev функции-члены вызывают Find функцию-член, поэтому можно использовать Find для управления поведением всех операций Поиска.

Чтобы найти запись в наборе записей типа таблицы, вызовите функцию элемента Поиска .

Совет

Чем меньше набор записей, тем эффективнее Find будет. В целом, особенно с данными ODBC, лучше создать новый запрос, который извлекает только нужные записи.

Дополнительные сведения см. в разделе "FindFirst, FindLast, FindNext, FindPrevious Methods" в справке DAO.

CDaoRecordset::FindFirst

Вызовите эту функцию-член, чтобы найти первую запись, соответствующую указанному условию.

BOOL FindFirst(LPCTSTR lpszFilter);

Параметры

lpszFilter
Строковое выражение (например, предложение WHERE в инструкции SQL без слова WHERE), используемое для поиска записи.

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

Ненулевое значение, если найдены соответствующие записи, в противном случае — значение 0.

Замечания

Функция-член FindFirst начинает поиск с начала набора записей и выполняет поиск до конца набора записей.

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

Если запись, соответствующая условиям, не находится, текущий указатель записи не определен и FindFirst возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirstFindNext находит следующее вхождение и т. д.

Внимание

Если изменить текущую запись, обязательно сохраните изменения, вызвав функцию-член перед переходом Update на другую запись. При переходе на другую запись без обновления изменения изменения будут потеряны без предупреждения.

Поиск Find функций-членов из расположения и в направлении, указанном в следующей таблице:

Поиск операций Начать Направление поиска
FindFirst Начало набора записей Конец набора записей
FindLast Конец набора записей Начало набора записей
FindNext Текущая запись Конец набора записей
FindPrevious Текущая запись Начало набора записей

Примечание.

При вызове FindLastядро СУБД Microsoft Jet полностью заполняет набор записей перед началом поиска, если это еще не сделано. Первый поиск может занять больше времени, чем последующие поиски.

Использование одной из операций поиска не совпадает с вызовом MoveFirst или MoveNext, однако, что просто делает первую или следующую запись текущей без указания условия. Вы можете выполнить операцию "Найти" с помощью операции перемещения.

Помните следующее при использовании операций поиска:

  • Если Find возвращается ненулевое значение, текущая запись не определена. В этом случае необходимо разместить указатель текущей записи обратно в допустимую запись.

  • Невозможно использовать операцию "Поиск" с набором записей, доступных только для прокрутки моментального снимка.

  • При поиске полей, содержащих даты, следует использовать формат даты в США (месяц-день года), даже если вы не используете версию ядра СУБД Microsoft Jet; В противном случае могут быть найдены соответствующие записи.

  • При работе с базами данных ODBC и большими наборами данных можно обнаружить, что использование операций поиска медленно, особенно при работе с большими наборами записей. Вы можете повысить производительность с помощью sql-запросов с настраиваемыми предложениями ORDERBY или WHERE , запросами параметров или CDaoQuerydef объектами, которые получают определенные индексированные записи.

Дополнительные сведения см. в разделе "FindFirst, FindLast, FindNext, FindPrevious Methods" в справке DAO.

CDaoRecordset::FindLast

Вызовите эту функцию-член, чтобы найти последнюю запись, соответствующую указанному условию.

BOOL FindLast(LPCTSTR lpszFilter);

Параметры

lpszFilter
Строковое выражение (например, предложение WHERE в инструкции SQL без слова WHERE), используемое для поиска записи.

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

Ненулевое значение, если найдены соответствующие записи, в противном случае — значение 0.

Замечания

Функция-член FindLast начинает поиск в конце набора записей и выполняет поиск назад к началу набора записей.

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

Если запись, соответствующая условиям, не находится, текущий указатель записи не определен и FindLast возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirstFindNext находит следующее вхождение после первого вхождения и т. д.

Внимание

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

Использование одной из операций поиска не совпадает с вызовом MoveFirst или MoveNext, однако, что просто делает первую или следующую запись текущей без указания условия. Вы можете выполнить операцию "Найти" с помощью операции перемещения.

Помните следующее при использовании операций поиска:

  • Если Find возвращается ненулевое значение, текущая запись не определена. В этом случае необходимо разместить указатель текущей записи обратно в допустимую запись.

  • Невозможно использовать операцию "Поиск" с набором записей, доступных только для прокрутки моментального снимка.

  • При поиске полей, содержащих даты, следует использовать формат даты в США (месяц-день года), даже если вы не используете версию ядра СУБД Microsoft Jet; В противном случае могут быть найдены соответствующие записи.

  • При работе с базами данных ODBC и большими наборами данных можно обнаружить, что использование операций поиска медленно, особенно при работе с большими наборами записей. Вы можете повысить производительность с помощью sql-запросов с настраиваемыми предложениями ORDERBY или WHERE , запросами параметров или CDaoQuerydef объектами, которые получают определенные индексированные записи.

Дополнительные сведения см. в разделе "FindFirst, FindLast, FindNext, FindPrevious Methods" в справке DAO.

CDaoRecordset::FindNext

Вызовите эту функцию-член, чтобы найти следующую запись, соответствующую указанному условию.

BOOL FindNext(LPCTSTR lpszFilter);

Параметры

lpszFilter
Строковое выражение (например, предложение WHERE в инструкции SQL без слова WHERE), используемое для поиска записи.

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

Ненулевое значение, если найдены соответствующие записи, в противном случае — значение 0.

Замечания

Функция-член FindNext начинает поиск по текущей записи и выполняет поиск до конца набора записей.

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

Если запись, соответствующая условиям, не находится, текущий указатель записи не определен и FindNext возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirstFindNext находит следующее вхождение и т. д.

Внимание

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

Использование одной из операций поиска не совпадает с вызовом MoveFirst или MoveNext, однако, что просто делает первую или следующую запись текущей без указания условия. Вы можете выполнить операцию "Найти" с помощью операции перемещения.

Помните следующее при использовании операций поиска:

  • Если Find возвращается ненулевое значение, текущая запись не определена. В этом случае необходимо разместить указатель текущей записи обратно в допустимую запись.

  • Невозможно использовать операцию "Поиск" с набором записей, доступных только для прокрутки моментального снимка.

  • При поиске полей, содержащих даты, следует использовать формат даты в США (месяц-день года), даже если вы не используете версию ядра СУБД Microsoft Jet; В противном случае могут быть найдены соответствующие записи.

  • При работе с базами данных ODBC и большими наборами данных можно обнаружить, что использование операций поиска медленно, особенно при работе с большими наборами записей. Вы можете повысить производительность с помощью sql-запросов с настраиваемыми предложениями ORDERBY или WHERE , запросами параметров или CDaoQuerydef объектами, которые получают определенные индексированные записи.

Дополнительные сведения см. в разделе "FindFirst, FindLast, FindNext, FindPrevious Methods" в справке DAO.

CDaoRecordset::FindPrev

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

BOOL FindPrev(LPCTSTR lpszFilter);

Параметры

lpszFilter
Строковое выражение (например, предложение WHERE в инструкции SQL без слова WHERE), используемое для поиска записи.

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

Ненулевое значение, если найдены соответствующие записи, в противном случае — значение 0.

Замечания

Функция-член FindPrev начинает поиск по текущей записи и выполняет поиск назад к началу набора записей.

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

Если запись, соответствующая условиям, не находится, текущий указатель записи не определен и FindPrev возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirstFindNext находит следующее вхождение и т. д.

Внимание

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

Использование одной из операций поиска не совпадает с вызовом MoveFirst или MoveNext, однако, что просто делает первую или следующую запись текущей без указания условия. Вы можете выполнить операцию "Найти" с помощью операции перемещения.

Помните следующее при использовании операций поиска:

  • Если Find возвращается ненулевое значение, текущая запись не определена. В этом случае необходимо разместить указатель текущей записи обратно в допустимую запись.

  • Невозможно использовать операцию "Поиск" с набором записей, доступных только для прокрутки моментального снимка.

  • При поиске полей, содержащих даты, следует использовать формат даты в США (месяц-день года), даже если вы не используете версию ядра СУБД Microsoft Jet; В противном случае могут быть найдены соответствующие записи.

  • При работе с базами данных ODBC и большими наборами данных можно обнаружить, что использование операций поиска медленно, особенно при работе с большими наборами записей. Вы можете повысить производительность с помощью sql-запросов с настраиваемыми предложениями ORDERBY или WHERE , запросами параметров или CDaoQuerydef объектами, которые получают определенные индексированные записи.

Дополнительные сведения см. в разделе "FindFirst, FindLast, FindNext, FindPrevious Methods" в справке DAO.

CDaoRecordset::GetAbsolutePosition

Возвращает номер записи текущей записи объекта набора записей.

long GetAbsolutePosition();

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

Целое число от 0 до количества записей в наборе записей. Соответствует порядковой позиции текущей записи в наборе записей.

Замечания

Значение свойства AbsolutePosition базового объекта DAO основано на нулях; Параметр 0 ссылается на первую запись в наборе записей. Вы можете определить количество заполненных записей в наборе записей, вызвав Метод GetRecordCount. Вызов GetRecordCount может занять некоторое время, так как он должен получить доступ ко всем записям, чтобы определить количество.

Если текущая запись отсутствует, как и при отсутствии записей в наборе записей, возвращается значение 1. Если текущая запись удаляется, значение свойства AbsolutePosition не определено, и MFC создает исключение, если он ссылается. Для наборов записей типа dynaset новые записи добавляются в конец последовательности.

Примечание.

Это свойство не предназначено для использования в качестве суррогатного номера записи. Закладки по-прежнему являются рекомендуемыми способами сохранения и возврата к заданной позиции и единственным способом размещения текущей записи во всех типах объектов набора записей. В частности, позиция заданной записи изменяется при удалении записей, предшествующих ей. Кроме того, нет уверенности в том, что указанная запись будет иметь ту же абсолютную позицию, если набор записей создается повторно, так как порядок отдельных записей в наборе записей не гарантируется, если только он не создан с помощью инструкции SQL с помощью предложения ORDERBY .

Примечание.

Эта функция-член действительна только для наборов записей типа dynaset и моментальных снимков.

Дополнительные сведения см. в разделе "Свойство AbsolutePosition" в справке DAO.

CDaoRecordset::GetBookmark

Вызовите эту функцию-член, чтобы получить значение закладки в определенной записи.

COleVariant GetBookmark();

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

Возвращает значение, представляющее закладку в текущей записи.

Замечания

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

Закладку для текущей записи можно сохранить, назначив значение закладки объекту COleVariant . Чтобы быстро вернуться к этой записи в любое время после перехода в другую запись, вызовите SetBookmark параметр, соответствующий значению этого COleVariant объекта.

Примечание.

Вызов повторного запроса изменяет закладки DAO.

Дополнительные сведения см. в разделе "Свойство закладки" в справке DAO.

CDaoRecordset::GetCacheSize

Вызовите эту функцию-член, чтобы получить количество кэшированных записей.

long GetCacheSize();

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

Значение, указывающее количество записей в наборе записей типа dynaset, содержащего данные, которые будут локально кэшироваться из источника данных ODBC.

Замечания

Кэширование данных повышает производительность приложения, которое извлекает данные из удаленного сервера с помощью объектов набора записей типа dynaset. Кэш — это пространство в локальной памяти, в котором хранятся последние данные, полученные с сервера, в случае, если данные будут запрашиваться еще раз во время выполнения приложения. При запросе данных ядро СУБД Microsoft Jet проверка кэш запрашиваемых данных, а не извлекает его с сервера, что занимает больше времени. Данные, не поступающие из источника данных ODBC, не сохраняются в кэше.

Любой источник данных ODBC, например подключенная таблица, может иметь локальный кэш.

Дополнительные сведения см. в разделе "CacheSize, CacheStart Properties" в справке DAO.

CDaoRecordset::GetCacheStart

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

COleVariant GetCacheStart();

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

Значение, COleVariant указывающее закладку первой записи в наборе записей, которая будет кэширована.

Замечания

Ядро СУБД Microsoft Jet запрашивает записи в диапазоне кэша из кэша и запрашивает записи за пределами диапазона кэша с сервера.

Примечание.

Записи, полученные из кэша, не отражают изменения, внесенные одновременно в исходные данные другими пользователями.

Дополнительные сведения см. в разделе "CacheSize, CacheStart Properties" в справке DAO.

CDaoRecordset::GetCurrentIndex

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

CString GetCurrentIndex();

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

Значение CString , содержащее имя индекса, используемого в настоящее время с набором записей типа таблицы. Возвращает пустую строку, если индекс не задан.

Замечания

Этот индекс является основой для упорядочивания записей в наборе записей типа таблицы и используется функцией элемента Поиска для поиска записей.

Объект CDaoRecordset может иметь несколько индексов, но может использовать только один индекс за раз (хотя объект CDaoTableDef может иметь несколько индексов, определенных на нем).

Дополнительные сведения см. в разделе "Индекс объекта" и определении "текущий индекс" в справке DAO.

CDaoRecordset::GetDateCreated

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

COleDateTime GetDateCreated();

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

Объект COleDateTime, содержащий дату и время создания базовой таблицы.

Замечания

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

Дополнительные сведения см. в разделе "Свойства DateCreated, LastUpdated" в справке DAO.

CDaoRecordset::GetDateLastUpdated

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

COleDateTime GetDateLastUpdated();

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

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

Замечания

Параметры даты и времени являются производными от компьютера, на котором была обновлена базовая структура таблицы (схема).

Дополнительные сведения см. в разделе "Свойства DateCreated, LastUpdated" в справке DAO.

CDaoRecordset::GetDefaultDBName

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

virtual CString GetDefaultDBName();

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

Значение CString , содержащее путь и имя базы данных, из которой является производный набор записей.

Замечания

Если набор записей создается без указателя на CDaoDatabase, этот путь используется набором записей для открытия базы данных по умолчанию. По умолчанию эта функция возвращает пустую строку. Когда ClassWizard получает новый набор записей, CDaoRecordsetон создаст эту функцию для вас.

В следующем примере показано использование двойной обратной косой черты (\\) в строке, как требуется для правильной интерпретации строки.

CString CCustSet::GetDefaultDBName()
{
   return _T("c:\\mydir\\datasrc.mdb");
}

CDaoRecordset::GetDefaultSQL

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

virtual CString GetDefaultSQL();

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

Значение, CString содержащее инструкцию SQL по умолчанию.

Замечания

Это может быть имя таблицы или инструкция SQL SELECT .

Вы косвенно определяете инструкцию SQL по умолчанию, объявляя класс набора записей с classWizard, а ClassWizard выполняет эту задачу.

Если вы передаете строку NULL SQL в Open, то эта функция вызывается для определения имени таблицы или SQL для набора записей.

CDaoRecordset::GetEditMode

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

short GetEditMode();

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

Возвращает значение, указывающее состояние редактирования текущей записи.

Замечания

значение Description
dbEditNone Операция редактирования не выполняется.
dbEditInProgress Edit был вызван.
dbEditAdd AddNew был вызван.

Дополнительные сведения см. в разделе "EditMode Property" в справке DAO.

CDaoRecordset::GetFieldCount

Вызовите эту функцию-член, чтобы получить количество полей (столбцов), определенных в наборе записей.

short GetFieldCount();

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

Количество полей в наборе записей.

Замечания

Дополнительные сведения см. в разделе "Count Property" в справке DAO.

CDaoRecordset::GetFieldInfo

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

void GetFieldInfo(
    int nIndex,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetFieldInfo(
    LPCTSTR lpszName,
    CDaoFieldInfo& fieldinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Параметры

Nindex
Отсчитываемый от нуля индекс предопределенного поля в коллекции полей набора записей для поиска по индексу.

Fieldinfo
Ссылка на структуру CDaoFieldInfo .

dwInfoOptions
Параметры, определяющие, какие сведения о наборе записей для получения. Доступные параметры перечислены здесь вместе с тем, что они вызывают возврат функции. Для повышения производительности извлеките только необходимый уровень информации:

  • AFX_DAO_PRIMARY_INFO (по умолчанию) Имя, тип, размер, атрибуты

  • AFX_DAO_SECONDARY_INFO Основные сведения, а также: порядковое положение, обязательный, разрешить нулевую длину, сортировку порядка, иностранное имя, исходное поле, исходную таблицу

  • AFX_DAO_ALL_INFO Основные и вторичные сведения, а также: значение по умолчанию, правило проверки, текст проверки

lpszName
Имя поля.

Замечания

Одна из версий функции позволяет искать поле по индексу. Другая версия позволяет искать поле по имени.

Описание возвращаемых сведений см. в структуре CDaoFieldInfo . Эта структура содержит элементы, соответствующие элементам информации, перечисленным выше в описании dwInfoOptions. При запросе сведений на одном уровне вы также получаете информацию для всех предыдущих уровней.

Дополнительные сведения см. в разделе "Свойство атрибутов" в справке DAO.

CDaoRecordset::GetFieldValue

Вызовите эту функцию-член, чтобы получить данные в наборе записей.

virtual void GetFieldValue(
    LPCTSTR lpszName,
    COleVariant& varValue);

virtual void GetFieldValue(
    int nIndex,
    COleVariant& varValue);

virtual COleVariant GetFieldValue(LPCTSTR lpszName);
virtual COleVariant GetFieldValue(int nIndex);

Параметры

lpszName
Указатель на строку, содержащую имя поля.

varValue
Ссылка на COleVariant объект, который будет хранить значение поля.

Nindex
Отсчитываемый от нуля индекс поля в коллекции полей набора записей для поиска по индексу.

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

Две версии GetFieldValue , возвращающие значение, возвращают объект COleVariant , содержащий значение поля.

Замечания

Вы можете найти поле по имени или по порядковой позиции.

Примечание.

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

Используйте GetFieldValue и setFieldValue для динамической привязки полей во время выполнения, а не статически привязки столбцов с помощью механизма DoFieldExchange .

GetFieldValueDoFieldExchange и механизм можно объединить для повышения производительности. Например, используйте GetFieldValue для получения значения, которое требуется только по запросу, и назначьте этот вызов кнопке "Дополнительные сведения" в интерфейсе.

Дополнительные сведения см. в разделах "Объект поля" и "Свойство значения" в справке DAO.

CDaoRecordset::GetIndexCount

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

short GetIndexCount();

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

Количество индексов в наборе записей типа таблицы.

Замечания

GetIndexCount полезно для циклического цикла по всем индексам в наборе записей. Для этого используйте GetIndexCount в сочетании с GetIndexInfo. Если вызвать эту функцию-член в наборах записей типа dynaset или snapshot-type, MFC создает исключение.

Дополнительные сведения см. в разделе "Свойство атрибутов" в справке DAO.

CDaoRecordset::GetIndexInfo

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

void GetIndexInfo(
    int nIndex,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetIndexInfo(
    LPCTSTR lpszName,
    CDaoIndexInfo& indexinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Параметры

Nindex
Отсчитываемый от нуля индекс в коллекции индексов таблицы для поиска по числовым позициям.

indexinfo
Ссылка на структуру CDaoIndexInfo .

dwInfoOptions
Параметры, определяющие, какие сведения о индексе необходимо получить. Доступные параметры перечислены здесь вместе с тем, что они вызывают возврат функции. Для повышения производительности извлеките только необходимый уровень информации:

  • AFX_DAO_PRIMARY_INFO (по умолчанию) Имя, сведения о поле, поля

  • AFX_DAO_SECONDARY_INFO Основные сведения, плюс: primary, Unique, Clustered, IgnoreNulls, Required, Foreign

  • AFX_DAO_ALL_INFO Основная и вторичная информация, а также: количество отдельных данных

lpszName
Указатель на имя объекта индекса для поиска по имени.

Замечания

Одна из версий функции позволяет искать индекс по его позиции в коллекции. Другая версия позволяет искать индекс по имени.

Описание возвращаемых сведений см. в структуре CDaoIndexInfo . Эта структура содержит элементы, соответствующие элементам информации, перечисленным выше в описании dwInfoOptions. При запросе сведений на одном уровне вы также получаете информацию для всех предыдущих уровней.

Дополнительные сведения см. в разделе "Свойство атрибутов" в справке DAO.

CDaoRecordset::GetLastModifiedBookmark

Вызовите эту функцию-член, чтобы получить закладку последней добавленной или обновленной записи.

COleVariant GetLastModifiedBookmark();

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

Содержит COleVariant закладку, которая указывает на последнюю добавленную или измененную запись.

Замечания

При создании или открытии объекта набора записей каждая из его записей уже имеет уникальную закладку, если она поддерживает их. Вызовите GetBookmark , чтобы определить, поддерживает ли набор записей закладки. Если набор записей не поддерживает закладки, CDaoException создается исключение.

При добавлении записи он отображается в конце набора записей и не является текущей записью. Чтобы сделать новую запись текущей, вызовите GetLastModifiedBookmark и вызов SetBookmark , чтобы вернуться к только что добавленной записи.

Дополнительные сведения см. в разделе "Свойство LastModified" в справке DAO.

CDaoRecordset::GetLockingMode

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

BOOL GetLockingMode();

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

Ненулевое значение, если тип блокировки пессимистичен, в противном случае — значение 0 для оптимистической блокировки записей.

Замечания

При действии пессимистической блокировки страница данных, содержащая редактируемую запись, блокируется сразу после вызова функции "Изменить член". Страница разблокируется при вызове функции "Обновить " или "Закрыть" или "Переместить " или "Найти".

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

При работе с источниками данных ODBC режим блокировки всегда оптимистичен.

Дополнительные сведения см. в разделах "Свойство LockEdits" и "Блокировка поведения в многопользовательских приложениях" в справке DAO.

CDaoRecordset::GetName

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

CString GetName();

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

Значение CString , содержащее имя набора записей.

Замечания

Имя набора записей должно начинаться с буквы и может содержать не более 40 символов. Он может включать числа и символы подчеркивания, но не могут включать знаки препинания или пробелы.

Дополнительные сведения см. в разделе "Свойство name" в справке DAO.

CDaoRecordset::GetParamValue

Вызовите эту функцию-член, чтобы получить текущее значение указанного параметра, хранящегося в базовом объекте DAOParameter.

virtual COleVariant GetParamValue(int nIndex);
virtual COleVariant GetParamValue(LPCTSTR lpszName);

Параметры

Nindex
Числовое положение параметра в базовом объекте DAOParameter.

lpszName
Имя параметра, значение которого требуется.

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

Объект класса COleVariant , содержащий значение параметра.

Замечания

Вы можете получить доступ к параметру по имени или по числовой позиции в коллекции.

Дополнительные сведения см. в разделе "Объект параметров" в справке DAO.

CDaoRecordset::GetPercentPosition

При работе с набором записей типа dynaset или набора записей типа моментального снимка, при вызове GetPercentPosition перед заполнением набора записей количество перемещений соответствует количеству записей, к которым осуществляется доступ, как указано при вызове GetRecordCount.

float GetPercentPosition();

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

Число от 0 до 100, указывающее приблизительное расположение текущей записи в объекте набора записей на основе процента записей в наборе записей.

Замечания

Вы можете перейти к последней записи, вызвав MoveLast , чтобы завершить заполнение всех наборов записей, но это может занять значительное время.

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

Дополнительные сведения см. в разделе "Свойство PercentPosition" в справке DAO.

CDaoRecordset::GetRecordCount

Вызовите эту функцию-член, чтобы узнать, сколько записей в наборе записей было предоставлено.

long GetRecordCount();

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

Возвращает количество записей, к которых обращается объект набора записей.

Замечания

GetRecordCount Не указывает, сколько записей содержится в наборе записей типа dynaset или snapshot-type до тех пор, пока не будут доступны все записи. Для завершения этого вызова функции-члена может потребоваться значительное время.

После доступа к последней записи возвращаемое значение указывает общее количество незавершенных записей в наборе записей. Чтобы принудительно получить доступ к последней записи, вызовите MoveLast функцию или FindLast функцию-член для набора записей. Можно также использовать счетчик SQL для определения приблизительного количества записей, возвращаемых запросом.

Когда приложение удаляет записи в наборе записей типа dynaset, возвращаемое значение GetRecordCount уменьшается. Однако записи, удаленные другими пользователями, не отражаются GetRecordCount до тех пор, пока текущая запись не будет размещена на удаленной записи. Если вы выполняете транзакцию, которая влияет на количество записей и затем откат транзакции, GetRecordCount не будет отражать фактическое количество оставшихся записей.

Значение GetRecordCount набора записей типа моментального снимка не влияет на изменения в базовых таблицах.

Значение GetRecordCount из набора записей типа таблицы отражает приблизительное количество записей в таблице и немедленно влияет на то, как записи таблицы добавляются и удаляются.

Набор записей без записей возвращает значение 0. При работе с подключенными таблицами или базами данных GetRecordCount ODBC всегда возвращает значение – 1. Requery Вызов функции-член в наборе записей сбрасывает значение GetRecordCount так же, как если бы запрос был повторно выполнен.

Дополнительные сведения см. в разделе "Свойство RecordCount" в справке DAO.

CDaoRecordset::GetSQL

Вызовите эту функцию-член, чтобы получить инструкцию SQL, которая использовалась для выбора записей набора записей при открытии.

CString GetSQL() const;

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

Объект, CString содержащий инструкцию SQL.

Замечания

Как правило, это инструкция SQL SELECT .

Строка, возвращаемая GetSQL обычно отличается от любой строки, которую вы, возможно, передали в набор записей в параметре lpszSQL в функцию Open-члена . Это связано с тем, что набор записей создает полную инструкцию SQL на основе переданных Openданных, указанных в ClassWizard, и то, что вы могли указать в m_strFilter и элементах данных m_strSort .

Примечание.

Вызов этой функции-член только после вызова Open.

Дополнительные сведения см. в разделе "Свойство SQL" в справке DAO.

CDaoRecordset::GetType

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

short GetType();

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

Одно из следующих значений, указывающее тип набора записей:

  • dbOpenTable Набор записей типа таблицы

  • dbOpenDynaset Набор записей типа Dynaset

  • dbOpenSnapshot Набор записей типа моментального снимка

Замечания

Дополнительные сведения см. в разделе "Свойство type" в справке DAO.

CDaoRecordset::GetValidationRule

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

CString GetValidationRule();

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

CString Объект, содержащий значение, которое проверяет данные в записи по мере изменения или добавления в таблицу.

Замечания

Это правило основано на тексте и применяется при каждом изменении базовой таблицы. Если данные не являются законными, MFC создает исключение. Возвращаемое сообщение об ошибке — это текст свойства ValidationText базового объекта поля, если он указан, или текст выражения, указанного свойством ValidationRule базового объекта поля. Чтобы получить текст сообщения об ошибке, можно вызвать GetValidationText .

Например, поле в записи, требующей дня месяца, может иметь правило проверки, например "ДЕНЬ ОТ 1 ДО 31".

Дополнительные сведения см. в разделе "Свойство ValidationRule" в справке DAO.

CDaoRecordset::GetValidationText

Вызовите эту функцию-член, чтобы получить текст свойства ValidationText базового объекта поля.

CString GetValidationText();

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

Объект CString , содержащий текст сообщения, отображаемого, если значение поля не удовлетворяет правилу проверки базового объекта поля.

Замечания

Дополнительные сведения см. в разделе "Свойство ValidationText" в справке DAO.

CDaoRecordset::IsBOF

Вызовите эту функцию-член перед прокруткой записи до записи, чтобы узнать, прошли ли вы до первой записи набора записей.

BOOL IsBOF() const;

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

Ненулевое значение, если набор записей не содержит записей или прокрутился назад до первой записи; в противном случае — 0.

Замечания

Можно также вызывать IsBOF вместе с IsEOF тем, чтобы определить, содержит ли набор записей любые записи или пуст. Сразу после вызова Open, если набор записей не содержит записей, IsBOF возвращает ненулевое значение. При открытии набора записей, имеющего по крайней мере одну запись, первая запись является текущей и IsBOF возвращает значение 0.

Если первая запись является текущей и вызывается MovePrev, IsBOF будет возвращено ненулевое значение. Если IsBOF возвращается ненулевое значение и вызывается MovePrevисключение. Если IsBOF возвращается ненулевое значение, текущая запись не определена, и любое действие, требующее текущей записи, приведет к исключению.

Эффект конкретных методов и IsBOFIsEOF параметров:

  • Вызов Open* внутренне делает первую запись в наборе записей текущей записи путем вызова MoveFirst. Поэтому вызов Open пустого набора записей вызывает IsBOF и IsEOF возвращает ненулевое значение. (См. следующую таблицу для поведения сбоя MoveFirst или MoveLast вызова.)

  • Все операции перемещения, которые успешно находят запись, вызывают как 0, так IsBOF и IsEOF возвращают 0.

  • Вызов AddNew , Update за которым следует вызов, который успешно вставляет новую запись, приведет IsBOF к возврату 0, но только в том случае, если IsEOF уже ненулевое значение. Состояние IsEOF всегда остается неизменным. Как определено ядром СУБД Microsoft Jet, текущий указатель на пустую набор записей находится в конце файла, поэтому любая новая запись вставляется после текущей записи.

  • Любой Delete вызов, даже если он удаляет единственную оставшуюся запись из набора записей, не изменит значение IsBOF или IsEOF.

В этой таблице показано, какие операции перемещения разрешены с различными сочетаниями IsBOF/ IsEOF.

State MoveFirst, MoveLast MovePrev,

Перемещение < 0
Перемещение 0 Movenext

Перемещение > 0
IsBOF=nonzero,

IsEOF=0
Допустимо Исключение, Исключение, Допустимо
IsBOF=0,

IsEOF=nonzero
Допустимо Допустимо Исключение, Исключение,
Оба ненулевого Исключение, Исключение, Исключение, Исключение,
Оба 0 Допустимо Допустимо Допустимо Допустимо

Разрешение операции перемещения не означает, что операция успешно найдет запись. Он просто указывает, что попытка выполнить указанную операцию перемещения разрешена и не создаст исключение. Значение IsBOFIsEOF функций-членов может измениться в результате попытки перемещения.

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

Operations Isbof Iseof
MoveFirst, MoveLast Ненулевой Ненулевой
Move 0 Без изменений Без изменений
MovePrev, Move< 0 Ненулевой Без изменений
MoveNext, Move> 0 Без изменений Ненулевой

Дополнительные сведения см. в разделе "Свойства BOF, EOF" в справке DAO.

CDaoRecordset::IsDeleted

Вызовите эту функцию-член, чтобы определить, была ли удалена текущая запись.

BOOL IsDeleted() const;

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

Ненулевое значение, если набор записей расположен в удаленной записи; в противном случае — 0.

Замечания

Если прокрутите запись и IsDeleted возвращаете значение TRUE (ненулевое), перед выполнением других операций набора записей необходимо прокрутить другую запись.

Примечание.

Вам не нужно проверка состояние удаления записей в наборе записей моментального снимка или набора записей типа таблицы. Так как записи не могут быть удалены из моментального снимка, не требуется вызывать IsDeleted. Для наборов записей типа таблицы удаленные записи фактически удаляются из набора записей. После удаления записи вы, другой пользователь или в другом наборе записей, вы не сможете выполнить прокрутку до этой записи. Поэтому не требуется вызывать IsDeleted.

При удалении записи из dynaset он удаляется из набора записей и не может прокручиваться обратно к этой записи. Однако если запись в dynaset удаляется другим пользователем или другим набором записей на основе той же таблицы, IsDeleted возвращает значение TRUE при последующей прокрутке этой записи.

Дополнительные сведения см. в разделах "Удаление метода", "LastModified Property" и "EditMode Property" в справке DAO.

CDaoRecordset::IsEOF

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

BOOL IsEOF() const;

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

Ненулевое значение, если набор записей не содержит записей или если вы прокрутили последнюю запись; в противном случае — 0.

Замечания

Можно также вызвать IsEOF , чтобы определить, содержит ли набор записей любые записи или пуст. Сразу после вызова Open, если набор записей не содержит записей, IsEOF возвращает ненулевое значение. При открытии набора записей, имеющего по крайней мере одну запись, первая запись является текущей и IsEOF возвращает значение 0.

Если последняя запись является текущей записью при вызове MoveNext, IsEOF впоследствии возвращает ненулевое значение. Если IsEOF возвращается ненулевое значение и вызывается MoveNextисключение. Если IsEOF возвращается ненулевое значение, текущая запись не определена, и любое действие, требующее текущей записи, приведет к исключению.

Эффект конкретных методов и IsBOFIsEOF параметров:

  • Вызов Open внутренне делает первую запись в наборе записей текущей записи путем вызова MoveFirst. Поэтому вызов Open пустого набора записей вызывает IsBOF и IsEOF возвращает ненулевое значение. (См. следующую таблицу для поведения неудачного MoveFirst вызова.)

  • Все операции перемещения, которые успешно находят запись, вызывают как 0, так IsBOF и IsEOF возвращают 0.

  • Вызов AddNew , Update за которым следует вызов, который успешно вставляет новую запись, приведет IsBOF к возврату 0, но только в том случае, если IsEOF уже ненулевое значение. Состояние IsEOF всегда остается неизменным. Как определено ядром СУБД Microsoft Jet, текущий указатель на пустую набор записей находится в конце файла, поэтому любая новая запись вставляется после текущей записи.

  • Любой Delete вызов, даже если он удаляет единственную оставшуюся запись из набора записей, не изменит значение IsBOF или IsEOF.

В этой таблице показано, какие операции перемещения разрешены с различными сочетаниями IsBOF/ IsEOF.

State MoveFirst, MoveLast MovePrev,

Перемещение < 0
Перемещение 0 Movenext

Перемещение > 0
IsBOF=nonzero,

IsEOF=0
Допустимо Исключение, Исключение, Допустимо
IsBOF=0,

IsEOF=nonzero
Допустимо Допустимо Исключение, Исключение,
Оба ненулевого Исключение, Исключение, Исключение, Исключение,
Оба 0 Допустимо Допустимо Допустимо Допустимо

Разрешение операции перемещения не означает, что операция успешно найдет запись. Он просто указывает, что попытка выполнить указанную операцию перемещения разрешена и не создаст исключение. Значение IsBOFIsEOF функций-членов может измениться в результате попытки перемещения.

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

Operations Isbof Iseof
MoveFirst, MoveLast Ненулевой Ненулевой
Move 0 Без изменений Без изменений
MovePrev, Move< 0 Ненулевой Без изменений
MoveNext, Move> 0 Без изменений Ненулевой

Дополнительные сведения см. в разделе "Свойства BOF, EOF" в справке DAO.

CDaoRecordset::IsFieldDirty

Вызовите эту функцию-член, чтобы определить, был ли указанный элемент данных поля dynaset помечен как "грязное" (изменен).

BOOL IsFieldDirty(void* pv);

Параметры

Pv
Указатель на элемент данных поля, состояние которого требуется проверка или NULL, чтобы определить, грязное ли какое-либо из полей.

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

Ненулевое значение, если указанный элемент данных поля помечен как грязное; в противном случае — значение 0.

Замечания

Данные во всех элементах данных поля грязное будут переданы в запись в источнике данных при обновлении текущей записи вызовом Update функции-члена CDaoRecordset (после вызова Edit илиAddNew). С помощью этих знаний вы можете выполнить дальнейшие действия, такие как отмена перетаскивания элемента данных поля, чтобы пометить столбец, чтобы он не был записан в источник данных.

IsFieldDirty реализуется через DoFieldExchange.

CDaoRecordset::IsFieldNull

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

BOOL IsFieldNull(void* pv);

Параметры

Pv
Указатель на элемент данных поля, состояние которого требуется проверка или NULL, чтобы определить, имеет ли какой-либо из полей значение NULL.

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

Ненулевое значение, если указанный элемент данных поля помечен как NULL; в противном случае — 0.

Замечания

(В терминологии базы данных null означает "отсутствие значения" и не совпадает со значением NULL в C++.) Если элемент данных поля помечен как NULL, он интерпретируется как столбец текущей записи, для которой нет значения.

Примечание.

В некоторых ситуациях использование IsFieldNull может быть неэффективным, как показано в следующем примере кода:

COleVariant varValue;
void *pField = &(rs.m_Age);
int nField = 2;

// this code is inefficient because data
// must be retrieved for both IsFieldNull
// and GetFieldValue
if (!rs.IsFieldNull(pField))
   rs.GetFieldValue(nField, varValue);

// this code is more efficient
rs.GetFieldValue(nField, varValue);
if (varValue.vt == VT_NULL)
   varValue.Attach(varNewVal); // do something

Примечание.

Если вы используете динамическую привязку записей, не исходя CDaoRecordsetиз нее, обязательно используйте VT_NULL, как показано в примере.

CDaoRecordset::IsFieldNullable

Вызовите эту функцию-член, чтобы определить, является ли указанный элемент данных поля значением NULL (можно задать значение NULL; Значение NULL C++ не совпадает с значением NULL, которое в терминологии базы данных означает "отсутствие значения").

BOOL IsFieldNullable(void* pv);

Параметры

Pv
Указатель на элемент данных поля, состояние которого требуется проверка или NULL, чтобы определить, имеет ли какой-либо из полей значение NULL.

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

Ненулевое значение, если указанный элемент данных поля можно сделать null; в противном случае — 0.

Замечания

Поле, которое не может иметь значение NULL. Если при добавлении или обновлении записи такое поле задано значение NULL, источник данных отклоняет добавление или обновление и Update вызовет исключение. Исключение возникает при вызове Update, а не при вызове SetFieldNull.

CDaoRecordset::IsOpen

Вызовите эту функцию-член, чтобы определить, открыт ли набор записей.

BOOL IsOpen() const;

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

Ненулевое значение, если функция объекта Open набора записей или члена ранее была вызвана, Requery и набор записей не был закрыт; в противном случае — 0.

Замечания

CDaoRecordset::m_bCheckCacheForDirtyFields

Содержит флаг, указывающий, будут ли кэшированные поля автоматически помечены как грязное (изменено) и NULL.

Замечания

По умолчанию флаг имеет значение TRUE. Параметр в этом элементе данных управляет всем механизмом двойной буферизации. Если для флага задано значение TRUE, можно отключить кэширование на основе поля с помощью механизма DFX. Если для флага задано значение FALSE, необходимо вызвать SetFieldDirty и SetFieldNull самостоятельно.

Задайте этот член данных перед вызовом Open. Этот механизм в первую очередь предназначен для упрощения использования. Производительность может быть медленнее из-за двойного буферизации полей по мере внесения изменений.

CDaoRecordset::m_nFields

Содержит количество элементов данных поля в классе наборов записей и количество столбцов, выбранных набором записей из источника данных.

Замечания

Конструктор класса наборов записей должен инициализировать m_nFields с правильным числом статически привязанных полей. ClassWizard записывает эту инициализацию для вас при его использовании для объявления класса набора записей. Вы также можете написать его вручную.

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

Примечание.

Это число должно соответствовать количеству выходных столбцов, зарегистрированных DoFieldExchange после вызова SetFieldType с параметром CDaoFieldExchange::outputColumn.

Вы можете динамически привязать столбцы по пути CDaoRecordset::GetFieldValue и CDaoRecordset::SetFieldValue. При этом не нужно увеличивать количество вызовов m_nFields функции DFX в функции-члена DoFieldExchange .

CDaoRecordset::m_nParams

Содержит количество элементов данных параметра в классе наборов записей — количество параметров, переданных запросом набора записей.

Замечания

Если в классе наборов записей есть какие-либо члены данных параметров, конструктор класса должен инициализировать m_nParams с правильным номером. Значение m_nParams по умолчанию равно 0. При добавлении элементов данных параметров ( которые необходимо сделать вручную), необходимо также вручную добавить инициализацию в конструктор класса, чтобы отразить количество параметров (которое должно быть по крайней мере таким же, как число заполнителей в m_strFilter или строке m_strSort ).

Платформа использует это число при параметризации запроса набора записей.

Примечание.

Это число должно соответствовать числу "params", зарегистрированному DoFieldExchange после вызова SetFieldType с параметром CFieldExchange::param.

Дополнительные сведения см. в разделе "Объект параметров" в справке DAO.

CDaoRecordset::m_pDAORecordset

Содержит указатель на интерфейс OLE для объекта набора записей DAO, лежащего в CDaoRecordset основе объекта.

Замечания

Используйте этот указатель, если вам нужно напрямую получить доступ к интерфейсу DAO.

Дополнительные сведения см. в разделе "Объект Recordset" в справке DAO.

CDaoRecordset::m_pDatabase

Содержит указатель на CDaoDatabase объект, через который набор записей подключен к источнику данных.

Замечания

Эта переменная устанавливается двумя способами. Как правило, указатель на уже открытый CDaoDatabase объект передается при создании объекта набора записей. Если вместо этого передать значение NULL, CDaoRecordset создайте CDaoDatabase объект для вас и откроете его. В любом случае хранит CDaoRecordset указатель в этой переменной.

Как правило, вам не потребуется напрямую использовать указатель, хранящийся в m_pDatabase. Однако при написании собственных расширений CDaoRecordsetможет потребоваться использовать указатель. Например, может потребоваться указатель, если вы создаете собственные CDaoException(s).

Дополнительные сведения см. в разделе "Объект базы данных" в справке DAO.

CDaoRecordset::m_strFilter

Содержит строку, используемую для создания предложения WHERE инструкции SQL.

Замечания

Он не включает зарезервированное слово WHERE для фильтрации набора записей. Использование этого элемента данных не применимо к наборам записей типа таблицы. Использование не влияет при открытии m_strFilter набора записей с помощью CDaoQueryDef указателя.

Используйте формат даты США (месяц-день года) при фильтрации полей, содержащих даты, даже если вы не используете версию ядра СУБД Microsoft Jet; В противном случае данные могут быть отфильтрованы по мере ожидания.

Дополнительные сведения см. в разделе "Фильтр свойства" в справке DAO.

CDaoRecordset::m_strSort

Содержит строку, содержащую предложение ORDERBY инструкции SQL без зарезервированных слов ORDERBY.

Замечания

Можно сортировать объекты набора записей dynaset и snapshot-type.

Нельзя сортировать объекты набора записей табличного типа. Чтобы определить порядок сортировки набора записей типа таблицы, вызовите SetCurrentIndex.

Использование m_strSort не влияет при открытии набора записей с помощью CDaoQueryDef указателя.

Дополнительные сведения см. в разделе "Сортировка свойств" в справке DAO.

CDaoRecordset::Move

Вызовите эту функцию-член, чтобы разместить записи набора записей lRows из текущей записи.

virtual void Move(long lRows);

Параметры

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

Замечания

Вы можете двигаться вперед или назад. Move( 1 ) эквивалентен MoveNextи Move( -1 ) эквивалентен MovePrev.

Внимание

Вызов любой из Move функций вызывает исключение, если набор записей не содержит записей. Как правило, вызовите оба IsBOF и IsEOF перед операцией перемещения, чтобы определить, имеет ли набор записей какие-либо записи. После вызова или вызова или вызова Open или вызоваIsEOFIsBOF.Requery

Примечание.

Если вы прокрутили мимо начала или конца набора записей ( IsBOF или IsEOF возвращает ненулевое значение), вызов Move вызывает вызов CDaoException.

Примечание.

При вызове любой из функций при обновлении или добавлении текущей Move записи обновления обновления будут потеряны без предупреждения.

При вызове Move моментального снимка прокрутки только для переадресации параметр lRows должен быть положительным целым числом и закладками не допускается, поэтому можно перемещаться только вперед.

Чтобы сделать первую, последнюю, следующую или предыдущую запись в наборе записей текущей записи, вызовите MoveFirstфункцию , MoveLastMoveNextили MovePrev функцию-член.

Дополнительные сведения см. в разделах "Метод перемещения" и "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" в справке DAO.

CDaoRecordset::MoveFirst

Вызовите эту функцию-член, чтобы сделать первую запись в наборе записей (если она есть) текущей записи.

void MoveFirst();

Замечания

Вам не нужно вызывать MoveFirst сразу после открытия набора записей. В то время первая запись (при наличии) автоматически является текущей записью.

Внимание

Вызов любой из Move функций вызывает исключение, если набор записей не содержит записей. Как правило, вызовите оба IsBOF и IsEOF перед операцией перемещения, чтобы определить, имеет ли набор записей какие-либо записи. После вызова или вызова или вызова Open или вызоваIsEOFIsBOF.Requery

Примечание.

При вызове любой из функций при обновлении или добавлении текущей Move записи обновления обновления будут потеряны без предупреждения.

Move Используйте функции для перехода из записи в запись без применения условия. Используйте операции find для поиска записей в объекте набора записей типа dynaset или snapshot-type, удовлетворяющем определенному условию. Чтобы найти запись в объекте набора записей табличного типа, вызовите Seek.

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

Если вы вызываете MoveLast объект набора записей на основе SQL-запроса или запроса, запрос принудительно завершается, а объект набора записей заполняется полностью.

Невозможно вызвать функцию-член MoveFirst или MovePrev функцию-член с моментальным снимком только для переадресации.

Чтобы переместить позицию текущей записи в объекте набора записей определенное число записей вперед или назад, вызовите вызов Move.

Дополнительные сведения см. в разделах "Метод перемещения" и "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" в справке DAO.

CDaoRecordset::MoveLast

Вызовите эту функцию-член, чтобы сделать последнюю запись (если она есть) в наборе записей текущей записи.

void MoveLast();

Замечания

Внимание

Вызов любой из Move функций вызывает исключение, если набор записей не содержит записей. Как правило, вызовите оба IsBOF и IsEOF перед операцией перемещения, чтобы определить, имеет ли набор записей какие-либо записи. После вызова или вызова или вызова Open или вызоваIsEOFIsBOF.Requery

Примечание.

При вызове любой из функций при обновлении или добавлении текущей Move записи обновления обновления будут потеряны без предупреждения.

Move Используйте функции для перехода из записи в запись без применения условия. Используйте операции find для поиска записей в объекте набора записей типа dynaset или snapshot-type, удовлетворяющем определенному условию. Чтобы найти запись в объекте набора записей табличного типа, вызовите Seek.

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

Если вы вызываете MoveLast объект набора записей на основе SQL-запроса или запроса, запрос принудительно завершается, а объект набора записей заполняется полностью.

Чтобы переместить позицию текущей записи в объекте набора записей определенное число записей вперед или назад, вызовите вызов Move.

Дополнительные сведения см. в разделах "Метод перемещения" и "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" в справке DAO.

CDaoRecordset::MoveNext

Вызовите эту функцию-член, чтобы сделать следующую запись в наборе записей текущей записи.

void MoveNext();

Замечания

Перед попыткой перейти к предыдущей записи рекомендуется вызвать IsBOF . Вызов MovePrev , который вызовет вызов CDaoException , если IsBOF возвращает ненулевое значение, указывающее, что вы уже прокрутили до первой записи или что никакие записи не были выбраны набором записей.

Внимание

Вызов любой из Move функций вызывает исключение, если набор записей не содержит записей. Как правило, вызовите оба IsBOF и IsEOF перед операцией перемещения, чтобы определить, имеет ли набор записей какие-либо записи. После вызова или вызова или вызова Open или вызоваIsEOFIsBOF.Requery

Примечание.

При вызове любой из функций при обновлении или добавлении текущей Move записи обновления обновления будут потеряны без предупреждения.

Move Используйте функции для перехода из записи в запись без применения условия. Используйте операции find для поиска записей в объекте набора записей типа dynaset или snapshot-type, удовлетворяющем определенному условию. Чтобы найти запись в объекте набора записей табличного типа, вызовите Seek.

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

Чтобы переместить позицию текущей записи в объекте набора записей определенное число записей вперед или назад, вызовите вызов Move.

Дополнительные сведения см. в разделах "Метод перемещения" и "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" в справке DAO.

CDaoRecordset::MovePrev

Вызовите эту функцию-член, чтобы сделать предыдущую запись в наборе записей текущей записи.

void MovePrev();

Замечания

Перед попыткой перейти к предыдущей записи рекомендуется вызвать IsBOF . Вызов MovePrev , который вызовет вызов CDaoException , если IsBOF возвращает ненулевое значение, указывающее, что вы уже прокрутили до первой записи или что никакие записи не были выбраны набором записей.

Внимание

Вызов любой из Move функций вызывает исключение, если набор записей не содержит записей. Как правило, вызовите оба IsBOF и IsEOF перед операцией перемещения, чтобы определить, имеет ли набор записей какие-либо записи. После вызова или вызова или вызова Open или вызоваIsEOFIsBOF.Requery

Примечание.

При вызове любой из функций при обновлении или добавлении текущей Move записи обновления обновления будут потеряны без предупреждения.

Move Используйте функции для перехода из записи в запись без применения условия. Используйте операции find для поиска записей в объекте набора записей типа dynaset или snapshot-type, удовлетворяющем определенному условию. Чтобы найти запись в объекте набора записей табличного типа, вызовите Seek.

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

Невозможно вызвать функцию-член MoveFirst или MovePrev функцию-член с моментальным снимком только для переадресации.

Чтобы переместить позицию текущей записи в объекте набора записей определенное число записей вперед или назад, вызовите вызов Move.

Дополнительные сведения см. в разделах "Метод перемещения" и "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" в справке DAO.

CDaoRecordset::Open

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

virtual void Open(
    int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,
    LPCTSTR lpszSQL = NULL,
    int nOptions = 0);

virtual void Open(
    CDaoTableDef* pTableDef,
    int nOpenType = dbOpenTable,
    int nOptions = 0);

virtual void Open(
    CDaoQueryDef* pQueryDef,
    int nOpenType = dbOpenDynaset,
    int nOptions = 0);

Параметры

nOpenType
Одно из следующих значений:

  • dbOpenDynaset Набор записей типа dynaset с двунаправленной прокруткой. Это значение по умолчанию.

  • dbOpenTable Набор записей типа таблицы с двунаправленной прокруткой.

  • dbOpenSnapshot Набор записей типа моментального снимка с двунаправленной прокруткой.

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

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

  • Имя одного или нескольких табличных файлов и/или querydefs (разделенных запятыми).

  • Инструкция SQL SELECT (необязательно с предложением SQL WHERE или ORDERBY ).

  • Сквозной запрос.

nOptions
Один или несколько вариантов, перечисленных ниже. Значение по умолчанию равно 0. Возможны следующие значения:

  • dbAppendOnly Вы можете добавлять только новые записи (только набор записей типа dynaset). Этот параметр означает буквально, что записи могут быть добавлены только. Классы базы данных ODBC MFC имеют параметр только для добавления, который позволяет извлекать и добавлять записи.

  • dbForwardOnly Набор записей — это моментальный снимок только для прокрутки.

  • dbSeeChanges Создайте исключение, если другой пользователь изменяет данные, которые вы редактируете.

  • dbDenyWrite Другие пользователи не могут изменять или добавлять записи.

  • dbDenyRead Другие пользователи не могут просматривать записи (только набор записей типа таблицы).

  • dbReadOnly Вы можете просматривать только записи; другие пользователи могут изменять их.

  • dbInconsistent Несогласованные обновления разрешены (только набор записей типа dynaset).

  • dbConsistent Разрешены только согласованные обновления (только набор записей типа dynaset).

Примечание.

Константы dbConsistent и dbInconsistent являются взаимоисключающими. Вы можете использовать одно или другое, но не в определенном экземпляре Open.

pTableDef
Указатель на объект CDaoTableDef . Эта версия допустима только для наборов записей типа таблицы. При использовании этого параметра указатель, CDaoDatabase используемый для создания CDaoRecordset не используется, а база данных, в которой находится табличное значение.

pQueryDef
Указатель на объект CDaoQueryDef . Эта версия допустима только для наборов записей типа dynaset и моментальных снимков. При использовании этого параметра указатель, CDaoDatabase используемый для создания CDaoRecordset не используется, а база данных, в которой находится запрос.

Замечания

Перед вызовом Openнеобходимо создать объект набора записей. Это можно сделать несколькими способами:

  • При создании объекта набора записей передайте указатель на CDaoDatabase объект, который уже открыт.

  • При создании объекта набора записей передайте указатель на CDaoDatabase объект, который не открыт. Набор записей открывает CDaoDatabase объект, но не закроет его при закрытии объекта набора записей.

  • При создании объекта набора записей передайте указатель NULL. Объект набора записей вызывает GetDefaultDBName имя Microsoft Access. Файл MDB для открытия. Затем набор записей открывает CDaoDatabase объект и сохраняет его открытым, пока набор записей открыт. При вызове Close набора записей CDaoDatabase объект также закрывается.

    Примечание.

    Когда набор записей открывает CDaoDatabase объект, он открывает источник данных с неисключительным доступом.

Для версии Open , которая использует параметр lpszSQL , после открытия набора записей можно получить записи одним из нескольких способов. Первый вариант — иметь функции DFX в вашем DoFieldExchange. Второй вариант — использовать динамическую привязку, вызвав GetFieldValue функцию-член. Эти параметры можно реализовать отдельно или в сочетании. Если они объединяются, вам придется передать инструкцию SQL самостоятельно по вызову Open.

При использовании второй версииOpen, в которой выполняется передача CDaoTableDef объекта, результирующий столбец будет доступен для привязки через DoFieldExchange механизм DFX и (или) динамической привязки.GetFieldValue

Примечание.

Можно вызывать OpenCDaoTableDef только объект для наборов записей типа таблицы.

При использовании третьей версии Open , в которой вы передаете CDaoQueryDef объект, этот запрос будет выполняться, и результирующий столбцы будут доступны для привязки через DoFieldExchange механизм DFX и (или) динамически привязывать через GetFieldValue.

Примечание.

Можно вызывать OpenCDaoQueryDef только объект для наборов записей типа dynaset и моментальных снимков.

Для первой версии этого lpszSQL параметра записи выбираются на основе условийOpen, показанных в следующей таблице.

Значение параметра lpszSQL Выбранные записи определяются Пример
NULL Строка, возвращаемая GetDefaultSQL.
Разделенный запятыми список одного или нескольких табличных имен и /или запросов. Все столбцы, представленные в элементе DoFieldExchange. "Customer"
SELECT column-list FROM table-list Указанные столбцы из указанных табличных обозначений и/или запросов. "SELECT CustId, CustName

FROM Customer"

Обычной процедурой является передача NULL Openв; в этом случае вызывается GetDefaultSQLпереопределиваемая функция-член, Open которая Создает КлассWizard при создании производного CDaoRecordsetкласса. Это значение дает табличное имя и/или имена запросов, указанные в ClassWizard. Вместо этого можно указать другие сведения в параметре lpszSQL .

Независимо от того, что вы передаете, Open создает окончательную строку SQL для запроса (строка может содержать предложения SQL WHERE и ORDERBY , добавленные к переданной строке lpszSQL ), а затем выполняет запрос. Вы можете проверить созданную строку, вызвав GetSQL после вызова Open.

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

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

Если вы вызываете Open набор записей типа dynaset или snapshot-type, или если источник данных ссылается на инструкцию SQL или табличную таблицу, представляющую присоединенную таблицу, нельзя использовать dbOpenTable для аргумента типа. Если вы делаете, MFC выдает исключение. Чтобы определить, представляет ли объект tabledef присоединенную таблицу, создайте объект CDaoTableDef и вызовите функцию элемента Get Подключение.

dbSeeChanges Используйте флаг, если вы хотите зафиксировать изменения, внесенные другим пользователем или другой программой на компьютере, при редактировании или удалении той же записи. Например, если два пользователя начинают редактировать одну и ту же запись, первый пользователь Update вызывает функцию-член успешно. При Update вызове второго пользователя CDaoException создается исключение. Аналогичным образом, если второй пользователь пытается вызвать Delete запись, и она уже была изменена первым пользователем, CDaoException возникает.

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

Совет

Используйте параметр прокрутки только для пересылки (dbForwardOnly) для повышения производительности, когда приложение делает один проход через набор записей, открытый из источника данных ODBC.

Дополнительные сведения см. в разделе "Метод OpenRecordset" в справке DAO.

CDaoRecordset::Requery

Вызовите эту функцию-член для перестроения (обновления) набора записей.

virtual void Requery();

Замечания

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

Чтобы набор записей отражал дополнения и удаления, которые вы или другие пользователи вносят в источник данных, необходимо перестроить набор записей путем вызова Requery. Если набор записей является dynaset, он автоматически отражает обновления, которые вы или другие пользователи вносят в существующие записи (но не дополнения). Если набор записей является моментальным снимком, необходимо вызвать Requery отражение изменений другими пользователями, а также добавления и удаления.

Для dynaset или моментального снимка вызовите Requery любое время, когда вы хотите перестроить набор записей с помощью значений параметров. Задайте новый фильтр или сортируйте, задав m_strFilter и m_strSort перед вызовомRequery. Задайте новые параметры, назначив новые значения членам данных параметров перед вызовом Requery.

Если попытка перестроить набор записей завершается ошибкой, набор записей закрывается. Перед вызовом Requeryможно определить, можно ли повторно выполнить набор записей, вызвав функцию члена CanRestart . CanRestart не гарантирует, что Requery будет выполнено успешно.

Внимание

Вызов только Requery после вызова Open.

Примечание.

Вызов повторного запроса изменяет закладки DAO.

Невозможно вызвать Requery набор записей типа dynaset или набора записей типа моментальных снимков, если вызов CanRestart возвращает значение 0, а также не использовать его в наборе записей типа таблицы.

IsBOF Если оба и IsEOF возвращают ненулевое значение после вызоваRequery, запрос не вернул никаких записей, и набор записей не будет содержать данных.

Дополнительные сведения см. в разделе "Метод requery" в справке DAO.

CDaoRecordset::Seek

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

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKey1,
    COleVariant* pKey2 = NULL,
    COleVariant* pKey3 = NULL);

BOOL Seek(
    LPCTSTR lpszComparison,
    COleVariant* pKeyArray,
    WORD nKeys);

Параметры

lpszComparison
Одно из следующих строковых выражений: "", "<<=", "=", "=", ">=" или ">".

pKey1
Указатель на COleVariant , значение которого соответствует первому полю в индексе. Обязательно.

pKey2
Указатель на COleVariant значение которого соответствует второму полю в индексе, если таковой имеется. Значение NULL по умолчанию.

pKey3
Указатель на COleVariant значение которого соответствует третьему полю в индексе, если таковой имеется. Значение NULL по умолчанию.

pKeyArray
Указатель на массив вариантов. Размер массива соответствует количеству полей в индексе.

nKeys
Целое число, соответствующее размеру массива, которое является числом полей в индексе.

Примечание.

Не указывайте дикие карта в ключах. Wild карта s приведет Seek к тому, что не будут возвращены соответствующие записи.

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

Ненулевое значение, если найдены соответствующие записи, в противном случае — значение 0.

Замечания

Используйте вторую версию (массив) Seek для обработки индексов четырех полей или более.

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

Обратите внимание, что если вы не создаете набор записей ЮНИКОД, COleVariant объекты должны быть явно объявлены ANSI. Это можно сделать с помощью формы конструктора COleVariant::COleVariant(lpszSrc,vtSrc) с параметром vtSrc set VT_BSTRT to (ANSI) или с помощью функции SetString(lpszSrc,vtSrc) с параметром COleVariant vtSrc.VT_BSTRT

При вызове Seekвы передаете одно или несколько ключевых значений и оператор сравнения ("<, "<=", "=", "=", ">=" или ">"). Seek выполняет поиск по указанным полям ключей и находит первую запись, которая удовлетворяет критериям, заданным lpszComparison и pKey1. После обнаружения Seek возвращает ненулевое значение и делает запись текущей. Если Seek не удается найти совпадение, Seek возвращается ноль, а текущая запись не определена. При использовании DAO напрямую необходимо явно проверка свойству NoMatch.

Если lpszComparison задано значение "=", ">=" или ">", Seek начинается в начале индекса. Если lpszComparison имеет значение "" или "<<=", Seek начинается в конце индекса и выполняет поиск назад, если в конце не имеются повторяющиеся записи индекса. В этом случае Seek начинается с произвольной записи среди повторяющихся записей индекса в конце индекса.

При использовании Seekне требуется текущая запись.

Чтобы найти запись в наборе записей типа dynaset или snapshot-type, удовлетворяющем конкретному условию, используйте операции поиска. Чтобы включить все записи, а не только те, которые удовлетворяют определенному условию, используйте операции перемещения для перемещения из записи в запись.

Не удается вызвать Seek присоединенную таблицу любого типа, так как вложенные таблицы должны быть открыты как наборы записей типа dynaset или snapshot-type. Однако при вызове CDaoDatabase::Open непосредственного открытия устанавливаемой базы данных ISAM можно вызвать Seek таблицы в этой базе данных, хотя производительность может быть медленной.

Дополнительные сведения см. в разделе "Метод поиска" в справке DAO.

CDaoRecordset::SetAbsolutePosition

Задает относительный номер записи текущей записи объекта набора записей.

void SetAbsolutePosition(long lPosition);

Параметры

lPosition
Соответствует порядковой позиции текущей записи в наборе записей.

Замечания

Вызов SetAbsolutePosition позволяет разместить текущий указатель записи на определенную запись на основе его порядкового положения в наборе записей типа dynaset или набора записей типа моментального снимка. Вы также можете определить текущий номер записи, вызвав GetAbsolutePosition.

Примечание.

Эта функция-член действительна только для наборов записей типа dynaset и моментальных снимков.

Значение свойства AbsolutePosition базового объекта DAO основано на нулях; Параметр 0 ссылается на первую запись в наборе записей. Задание значения, превышающего количество заполненных записей, приводит к возникновению исключения MFC. Вы можете определить количество заполненных записей в наборе записей, вызвав функцию-член GetRecordCount .

Если текущая запись удаляется, значение свойства AbsolutePosition не определено, и MFC создает исключение, если он ссылается. Новые записи добавляются в конец последовательности.

Примечание.

Это свойство не предназначено для использования в качестве суррогатного номера записи. Закладки по-прежнему являются рекомендуемым способом сохранения и возврата к заданной позиции и единственным способом размещения текущей записи во всех типах объектов набора записей, поддерживающих закладки. В частности, позиция заданной записи изменяется при удалении записей, предшествующих ей. Кроме того, нет уверенности в том, что указанная запись будет иметь ту же абсолютную позицию, если набор записей создается повторно, так как порядок отдельных записей в наборе записей не гарантируется, если только он не создан с помощью инструкции SQL с помощью предложения ORDERBY .

Дополнительные сведения см. в разделе "Свойство AbsolutePosition" в справке DAO.

CDaoRecordset::SetBookmark

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

void SetBookmark(COleVariant varBookmark);

Параметры

varBookmark
Объект COleVariant, содержащий значение закладки для определенной записи.

Замечания

При создании или открытии объекта набора записей каждая из его записей уже имеет уникальную закладку. Закладку для текущей записи можно получить, вызвав GetBookmark и сохранив значение в COleVariant объекте. Позже вы можете вернуться к этой записи, вызвав SetBookmark значение сохраненной закладки.

Примечание.

Вызов повторного запроса изменяет закладки DAO.

Обратите внимание, что если вы не создаете набор записей ЮНИКОД, COleVariant объект должен быть явно объявлен ANSI. Это можно сделать с помощью формы конструктора COleVariant::COleVariant(lpszSrc,vtSrc) с параметром vtSrc set VT_BSTRT to (ANSI) или с помощью функции SetString(lpszSrc,vtSrc) с параметром COleVariant vtSrc.VT_BSTRT

Дополнительные сведения см. в разделах "Свойство закладки" и "Свойства закладки" в справке DAO.

CDaoRecordset::SetCacheSize

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

void SetCacheSize(long lSize);

Параметры

lSize
Указывает количество записей. Обычное значение равно 100. Параметр 0 отключает кэширование. Параметр должен находиться в диапазоне от 5 до 1200 записей. Кэш может использовать значительный объем памяти.

Замечания

Кэш — это пространство в локальной памяти, в котором хранятся последние данные, полученные с сервера, в случае, если данные будут запрашиваться еще раз во время выполнения приложения. Кэширование данных повышает производительность приложения, которое извлекает данные из удаленного сервера с помощью объектов набора записей типа dynaset. При запросе данных ядро СУБД Microsoft Jet проверка кэш запрашиваемых данных, а не извлекает его с сервера, что занимает больше времени. Данные, не поступающие из источника данных ODBC, не сохраняются в кэше.

Любой источник данных ODBC, например подключенная таблица, может иметь локальный кэш. Чтобы создать кэш, откройте объект набора записей из удаленного источника данных, вызовите функции-члены и вызовите SetCacheSizeSetCacheStartFillCache функцию-член или выполните шаг через записи с помощью одной из операций перемещения. Параметр SetCacheSize lSize функции-члена может быть основан на количестве записей, с которыми приложение может работать одновременно. Например, если вы используете набор записей в качестве источника данных для отображения на экране, можно передать SetCacheSizeпараметр lSize как 20, чтобы одновременно отображать 20 записей.

Дополнительные сведения см. в разделе "CacheSize, CacheStart Properties" в справке DAO.

CDaoRecordset::SetCacheStart

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

void SetCacheStart(COleVariant varBookmark);

Параметры

varBookmark
COleVariant, указывающий закладку первой записи в наборе записей, которую необходимо кэшировать.

Замечания

Вы можете использовать значение закладки любой записи для параметра varBookmark функции-члена SetCacheStart . Создайте запись, которую вы хотите запустить кэш с текущей записью, установите закладку для этой записи с помощью SetBookmark и передайте значение закладки в качестве параметра для SetCacheStart функции-члена.

Ядро СУБД Microsoft Jet запрашивает записи в диапазоне кэша из кэша и запрашивает записи за пределами диапазона кэша с сервера.

Записи, полученные из кэша, не отражают изменения, внесенные одновременно в исходные данные другими пользователями.

Чтобы принудительно обновить все кэшированные данные, передайте параметр SetCacheSize lSize от 0, снова вызовите размер кэша, который вы первоначально запрашивали, а затем вызовите SetCacheSizeFillCache функцию-член.

Обратите внимание, что если вы не создаете набор записей ЮНИКОД, COleVariant объект должен быть явно объявлен ANSI. Это можно сделать с помощью формы конструктора COleVariant::COleVariant(lpszSrc,vtSrc) с параметром vtSrc set VT_BSTRT to (ANSI) или с помощью функции SetString(lpszSrc,vtSrc) с параметром COleVariant vtSrc.VT_BSTRT

Дополнительные сведения см. в разделе "CacheSize, CacheStart Properties" в справке DAO.

CDaoRecordset::SetCurrentIndex

Вызовите эту функцию-член, чтобы задать индекс в наборе записей типа таблицы.

void SetCurrentIndex(LPCTSTR lpszIndex);

Параметры

lpszIndex
Указатель, содержащий имя индекса, который нужно задать.

Замечания

Записи в базовых таблицах не хранятся в определенном порядке. Установка индекса изменяет порядок записей, возвращаемых из базы данных, но не влияет на порядок хранения записей. Указанный индекс должен быть уже определен. Если вы пытаетесь использовать объект индекса, который не существует, или если индекс не задан при вызове Seek, MFC создает исключение.

Вы можете создать новый индекс для таблицы, вызвав CDaoTableDef::CreateIndex и добавив новый индекс в коллекцию индексов базового табличного табличного значения, вызвав CDaoTableDef::Append, а затем повторно открыв набор записей.

Записи, возвращаемые из набора записей типа таблицы, можно упорядочить только индексами, определенными для базового табличного значения. Чтобы сортировать записи в другом порядке, можно открыть набор записей типа dynaset или типа моментальных снимков с помощью предложения SQL ORDERBY , хранящегося в CDaoRecordset::m_strSort.

Дополнительные сведения см. в разделе "Индекс объекта" и определении "текущий индекс" в справке DAO.

CDaoRecordset::SetFieldDirty

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

void SetFieldDirty(
    void* pv,
    BOOL bDirty = TRUE);

Параметры

Pv
Содержит адрес элемента данных поля в наборе записей или NULL. Если значение NULL, все элементы данных поля в наборе записей помечены. (Значение NULL C++ не совпадает с значением NULL в терминологии базы данных, что означает "отсутствие значения".

bDirty
Значение TRUE, если элемент данных поля должен быть помечен как "грязное" (изменен). В противном случае значение FALSE, если элемент данных поля должен быть помечен как "чистый" (без изменений).

Замечания

Пометка полей без изменений гарантирует, что поле не обновляется.

Платформа помечает измененные элементы данных поля, чтобы убедиться, что они будут записаны в запись в источнике данных механизмом обмена полями DAO (DFX). Изменение значения поля обычно задает поле грязное автоматически, поэтому вам редко нужно вызывать SetFieldDirty себя, но иногда требуется убедиться, что столбцы будут явно обновлены или вставлены независимо от того, какое значение находится в элементе данных поля. Механизм DFX также использует использование ПСЕВДОНУЛЛ. Дополнительные сведения см. в разделе CDaoFieldExchange::m_nOperation.

Если механизм двойной буферизации не используется, изменение значения поля не автоматически задает поле как грязное. В этом случае необходимо явно задать поле как грязное. Флаг, содержащийся в m_bCheckCacheForDirtyFields, управляет этим автоматическим полем проверка.

Примечание.

Вызовите эту функцию-член только после вызова Edit или AddNew.

Использование NULL для первого аргумента функции будет применять функцию ко всем outputColumn полям, а не к полям парам.CDaoFieldExchange Например, вызов

SetFieldDirty(NULL);

присвойте только outputColumn полям NULL; Поля param будут не затронуты.

Чтобы работать над парамом, необходимо указать фактический адрес отдельного парама, над которым вы хотите работать, например:

SetFieldDirty(&m_strParam);

Это означает, что все поля param не могут иметь значение NULL, так как можно использовать outputColumn поля.

SetFieldDirty реализуется через DoFieldExchange.

CDaoRecordset::SetFieldNull

Вызовите эту функцию-член, чтобы пометить элемент данных поля набора записей как null (в частности, не имеет значения) или как не null.

void SetFieldNull(
    void* pv,
    BOOL bNull = TRUE);

Параметры

Pv
Содержит адрес элемента данных поля в наборе записей или NULL. Если значение NULL, все элементы данных поля в наборе записей помечены. (Значение NULL C++ не совпадает с значением NULL в терминологии базы данных, что означает "отсутствие значения".

bNull
Ненулевое значение, если элемент данных поля должен быть помечен как не имеющий значения (NULL). В противном случае значение 0, если элемент данных поля должен быть помечен как не null.

Замечания

SetFieldNull используется для полей, привязанных в механизме DoFieldExchange .

При добавлении новой записи в набор записей все элементы данных поля изначально задают значение NULL и помечены как "грязное" (изменено). При получении записи из источника данных его столбцы уже имеют значения или имеют значение NULL. Если не подходит для создания поля NULL, создается исключение CDaoException .

Если вы используете механизм двойной буферизации, например, если вы конкретно хотите назначить поле текущей записи как не имеющее значения, вызов SetFieldNullbNull имеет значение TRUE, чтобы пометить его как NULL. Если поле было ранее отмечено null, и теперь вы хотите дать ему значение, просто задайте новое значение. Не нужно удалять флаг NULL с SetFieldNull. Чтобы определить, разрешено ли поле иметь значение NULL, вызовите IsFieldNullable.

Если вы не используете механизм двойной буферизации, изменение значения поля не автоматически задает поле как грязное и не null. Необходимо специально задать поля грязное и не null. Флаг, содержащийся в m_bCheckCacheForDirtyFields, управляет этим автоматическим полем проверка.

Механизм DFX использует использование ПСЕВДОНУЛЛ. Дополнительные сведения см. в разделе CDaoFieldExchange::m_nOperation.

Примечание.

Вызовите эту функцию-член только после вызова Edit или AddNew.

Использование NULL для первого аргумента функции будет применять функцию только к outputColumn полям, а не к полям парам.CDaoFieldExchange Например, вызов

SetFieldNull(NULL);

присвойте только outputColumn полям NULL; Поля param будут не затронуты.

CDaoRecordset::SetFieldValue

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

virtual void SetFieldValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

virtual void SetFieldValue(
    int nIndex,
    const COleVariant& varValue);

void SetFieldValue(
    LPCTSTR lpszName,
    LPCTSTR lpszValue);

void SetFieldValue(
    int nIndex,
    LPCTSTR lpszValue);

Параметры

lpszName
Указатель на строку, содержащую имя поля.

varValue
Ссылка на объект COleVariant , содержащий значение содержимого поля.

Nindex
Целое число, представляющее порядковое положение поля в коллекции полей набора записей (от нуля).

lpszValue
Указатель на строку, содержащую значение содержимого поля.

Замечания

Используйте SetFieldValue и GetFieldValue для динамической привязки полей во время выполнения, а не статически привязки столбцов с помощью механизма DoFieldExchange .

Обратите внимание, что если вы не создаете набор записей ЮНИКОД, необходимо либо использовать форму SetFieldValue , которая не содержит COleVariant параметр, либо COleVariant объект должен быть явно объявлен ANSI. Это можно сделать с помощью формы конструктора COleVariant::COleVariant(lpszSrc,vtSrc) с параметром vtSrc set VT_BSTRT to (ANSI) или с помощью функции SetString(lpszSrc,vtSrc) с параметром COleVariant vtSrc.VT_BSTRT

Дополнительные сведения см. в разделах "Объект поля" и "Свойство значения" в справке DAO.

CDaoRecordset::SetFieldValueNull

Вызовите эту функцию-член, чтобы задать поле значение NULL.

void SetFieldValueNull(int nIndex);
void SetFieldValueNull(LPCTSTR lpszName);

Параметры

Nindex
Индекс поля в наборе записей для поиска по отсчитываемой от нуля индексу.

lpszName
Имя поля в наборе записей для подстановки по имени.

Замечания

Значение NULL C++ не совпадает с значением NULL, которое в терминологии базы данных означает "отсутствие значения".

Дополнительные сведения см. в разделах "Объект поля" и "Свойство значения" в справке DAO.

CDaoRecordset::SetLockingMode

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

void SetLockingMode(BOOL bPessimistic);

Параметры

bPessimistic
Флаг, указывающий тип блокировки.

Замечания

Если пессимистичная блокировка действует, страница 2K, содержащая запись, которую вы редактируете, блокируется сразу после вызова Edit функции-члена. Страница разблокируется при вызове Update функции или Close члена или любой из операций перемещения или поиска.

Если оптимистическая блокировка действует, страница 2K, содержащая запись, заблокирована только в то время как запись обновляется с Update помощью функции-члена.

Если страница заблокирована, другие пользователи не смогут изменять записи на той же странице. Если вы вызываете SetLockingMode и передаете ненулевое значение, а другой пользователь уже заблокирован, при вызове Editвозникает исключение. Другие пользователи могут считывать данные с заблокированных страниц.

При вызове SetLockingMode с нулевым значением и последующим вызовом Update во время блокировки страницы другим пользователем возникает исключение. Чтобы просмотреть изменения, внесенные другим пользователем (и потеряв изменения), вызовите SetBookmark функцию-член со значением закладки текущей записи.

При работе с источниками данных ODBC режим блокировки всегда оптимистичен.

CDaoRecordset::SetParamValue

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

virtual void SetParamValue(
    int nIndex,
    const COleVariant& varValue);

virtual void SetParamValue(
    LPCTSTR lpszName,
    const COleVariant& varValue);

Параметры

Nindex
Числовое положение параметра в коллекции параметров запроса.

var
Заданное значение; см. примечания.

lpszName
Имя параметра, значение которого необходимо задать.

Замечания

Параметр должен быть уже установлен в составе строки SQL набора записей. Вы можете получить доступ к параметру по имени или по его позиции индекса в коллекции.

Укажите значение, которое нужно задать в качестве COleVariant объекта. Сведения о настройке требуемого значения и типа в объекте COleVariant см. в классе COleVariant. Обратите внимание, что если вы не создаете набор записей ЮНИКОД, COleVariant объект должен быть явно объявлен ANSI. Это можно сделать с помощью формы конструктора COleVariant::COleVariant(lpszSrc,vtSrc) с параметром vtSrc set VT_BSTRT to (ANSI) или с помощью функции SetString(lpszSrc,vtSrc) с параметром COleVariant vtSrc.VT_BSTRT

CDaoRecordset::SetParamValueNull

Вызовите эту функцию-член, чтобы задать для параметра значение NULL.

void SetParamValueNull(int nIndex);
void SetParamValueNull(LPCTSTR lpszName);

Параметры

Nindex
Индекс поля в наборе записей для поиска по отсчитываемой от нуля индексу.

lpszName
Имя поля в наборе записей для подстановки по имени.

Замечания

Значение NULL C++ не совпадает с значением NULL, которое в терминологии базы данных означает "отсутствие значения".

CDaoRecordset::SetPercentPosition

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

void SetPercentPosition(float fPosition);

Параметры

fPosition
Число от 0 до 100.

Замечания

При работе с набором записей типа dynaset или snapshot-type сначала заполняйте набор записей, перейдя к последней записи перед вызовом SetPercentPosition. При вызове SetPercentPosition перед заполнением набора записей количество перемещения соответствует количеству записей, к которым обращается значение GetRecordCount. Вы можете перейти к последней записи, вызвав вызов MoveLast.

После вызова SetPercentPositionзапись по приблизительной позиции, соответствующей этому значению, становится текущей.

Примечание.

Не SetPercentPosition рекомендуется перемещать текущую запись в определенную запись в наборе записей. Вместо этого вызовите функцию-член SetBookmark .

Дополнительные сведения см. в разделе "Свойство PercentPosition" в справке DAO.

CDaoRecordset::Update

Вызовите эту функцию-член после вызова AddNew функции-члена или Edit члена.

virtual void Update();

Замечания

Этот вызов необходим для выполнения AddNew операции или Edit выполнения операции.

Оба AddNewEdit файла и подготовка буфера редактирования, в котором добавленные или измененные данные помещаются для сохранения в источник данных. Update сохраняет данные. Обновляются только эти поля, помеченные или обнаруженные как измененные.

Если источник данных поддерживает транзакции, можно вызвать Update (и соответствующую AddNew или Edit вызвать) часть транзакции.

Внимание

При вызове без первого вызова UpdateAddNew или EditUpdate вызывается CDaoExceptionисключение. При вызове или Editвызове необходимо вызвать Update перед вызовом AddNew MoveNext или закрыть набор записей или подключение к источнику данных. В противном случае изменения будут потеряны без уведомления.

Когда объект набора записей пессимистично заблокирован в среде с несколькими пользователями, запись остается заблокированной с момента Edit завершения обновления. Если набор записей оптимистично заблокирован, запись заблокирована и сравнивается с предварительно измененной записью непосредственно перед обновлением в базе данных. Если запись изменилась с момента вызова Edit, операция завершается ошибкой, Update и MFC создает исключение. Вы можете изменить режим блокировки с помощью SetLockingMode.

Примечание.

Оптимистическая блокировка всегда используется во внешних форматах баз данных, таких как ODBC и устанавливаемый ISAM.

Дополнительные сведения см. в разделах "Метод AddNew", "CancelUpdate Method", "Delete Method", "LastModified Property", "Update Method" и "EditMode Property" в справке DAO.

См. также

Класс CObject
Диаграмма иерархии
Класс CDaoTableDef
Класс CDaoWorkspace
Класс CDaoDatabase
Класс CDaoQueryDef