Класс CDaoRecordset
Представляет набор записей, выбранных из источника данных.
Примечание.
Объект доступа к данным (DAO) поддерживается через Office 2013. DAO 3.6 является окончательной версией и устарела.
Синтаксис
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 Connectivity (ODBC) и драйвер ODBC для этой СУБД.
Примечание.
Классы базы данных DAO отличаются от классов баз данных MFC на основе open Database Connectivity (ODBC). Все имена классов базы данных DAO имеют префикс CDao. Вы по-прежнему можете получить доступ к источникам данных ODBC с помощью классов DAO; Классы DAO обычно предлагают превосходные возможности, так как они относятся к ядру СУБД Microsoft Jet.
Вы можете использовать CDaoRecordset
непосредственно или производный класс от CDaoRecordset
. Чтобы использовать класс набора записей в любом случае, откройте базу данных и создайте объект набора записей, передав конструктор указатель на CDaoDatabase
объект. Можно также создать CDaoRecordset
объект и позволить MFC создать временный CDaoDatabase
объект. Затем вызовите функцию open-member набора записей набора записей, указав, является ли объект набором записей типа таблицы, набором записей типа dynaset или набором записей типа моментального снимка. Вызов Open
выбирает данные из базы данных и извлекает первую запись.
Используйте функции-члены объекта и члены данных, чтобы прокручивать записи и работать с ними. Доступные операции зависят от того, является ли объект набором записей типа таблицы, набором записей типа dynaset или набором записей типа моментальных снимков, а также от того, можно ли обновить или только для чтения , это зависит от возможности базы данных или источника данных Open Database Connectivity (ODBC). Чтобы обновить записи, которые могли быть изменены или добавлены с момента Open
вызова, вызовите функцию элемента Requery объекта. Вызовите функцию-член объекта Close
и уничтожите объект после завершения работы с ним.
CDaoRecordset
использует обмен полями записей DAO (DFX) для поддержки чтения и обновления полей записей с помощью элементов C++ типа или CDaoRecordset
производного от типаCDaoRecordset
. Вы также можете реализовать динамическую привязку столбцов в базе данных без использования механизма DFX с помощью GetFieldValue и SetFieldValue.
Дополнительные сведения см. в разделе "Объект Recordset" в справке DAO.
Иерархия наследования
CDaoRecordset
Требования
Заголовок: 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 , управляет этой автоматической проверкой полей.
Примечание.
Если записи дважды буферизовываются (т. е. включена автоматическая проверка полей), вызов 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
вызываемого.
Примечание.
Если записи дважды буферизовываются (т. е. включена автоматическая проверка полей), вызов 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.
Замечания
При вызове Open dbForwardOnly
с помощью набора записей можно прокручивать только вперед.
Дополнительные сведения см. в разделе "Размещение указателя текущей записи с помощью 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
каждого набора записей.
После вызова можно снова вызвать Open
Close
. Это позволяет повторно использовать объект набора записей. Лучшей альтернативой является вызов 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
сохраняет значения элементов данных набора записей. При вызове Edit
Edit
внесите изменения, вызовите снова, значения записи восстанавливаются до первого 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::BeginTrans
Edit
и после открытия набора записей. Вызов 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, снова вызовите SetCacheSize
SetCacheSize
параметр 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
— это виртуальная функция, поэтому ее можно переопределить и добавить собственную реализацию. Функции-члены FindFirst
FindLast
FindNext
и 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
возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirst
FindNext
находит следующее вхождение и т. д.
Внимание
Если изменить текущую запись, обязательно сохраните изменения, вызвав функцию-член перед переходом 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
возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirst
FindNext
находит следующее вхождение после первого вхождения и т. д.
Внимание
При изменении текущей записи обязательно сохраните изменения, вызвав функцию-член перед переходом 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
возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirst
FindNext
находит следующее вхождение и т. д.
Внимание
При изменении текущей записи обязательно сохраните изменения, вызвав функцию-член перед переходом 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
возвращает ноль. Если набор записей содержит несколько записей, удовлетворяющих условиям, находит первое вхождение, FindFirst
FindNext
находит следующее вхождение и т. д.
Внимание
При изменении текущей записи обязательно сохраните изменения, вызвав функцию-член перед переходом 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();
Возвращаемое значение
Возвращает значение, указывающее состояние редактирования текущей записи.
Замечания
значение | Описание |
---|---|
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 .
GetFieldValue
DoFieldExchange
и механизм можно объединить для повышения производительности. Например, используйте 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, ForeignAFX_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 или набора записей типа моментальных снимков до тех пор, пока не будут доступны все записи. Для завершения этого вызова функции-члена может потребоваться значительное время.
После доступа к последней записи возвращаемое значение указывает общее количество незавершенных записей в наборе записей. Чтобы принудительно получить доступ к последней записи, вызовите 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
Набор записей типа DynasetdbOpenSnapshot
Набор записей типа моментального снимка
Замечания
Дополнительные сведения см. в разделе "Свойство 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
возвращается ненулевое значение, текущая запись не определена, и любое действие, требующее текущей записи, приведет к исключению.
Эффект конкретных методов и IsBOF
IsEOF
параметров:
Вызов
Open*
внутренне делает первую запись в наборе записей текущей записи путем вызоваMoveFirst
. Поэтому вызовOpen
пустого набора записей вызываетIsBOF
иIsEOF
возвращает ненулевое значение. (См. следующую таблицу для поведения сбояMoveFirst
илиMoveLast
вызова.)Все операции перемещения, которые успешно находят запись, вызывают как 0, так
IsBOF
иIsEOF
возвращают 0.Вызов
AddNew
,Update
за которым следует вызов, который успешно вставляет новую запись, приведетIsBOF
к возврату 0, но только в том случае, еслиIsEOF
уже ненулевое значение. СостояниеIsEOF
всегда остается неизменным. Как определено ядром СУБД Microsoft Jet, текущий указатель на пустую набор записей находится в конце файла, поэтому любая новая запись вставляется после текущей записи.Любой
Delete
вызов, даже если он удаляет единственную оставшуюся запись из набора записей, не изменит значениеIsBOF
илиIsEOF
.
В этой таблице показано, какие операции перемещения разрешены с различными сочетаниями IsBOF
/ IsEOF
.
Штат | MoveFirst, MoveLast | MovePrev, Перемещение < 0 |
Перемещение 0 | MoveNext, Перемещение > 0 |
---|---|---|---|---|
IsBOF =nonzero,IsEOF =0 |
Допустимо | Исключение | Исключение | Допустимо |
IsBOF =0,IsEOF =nonzero |
Допустимо | Допустимо | Исключение | Исключение |
Оба ненулевого | Исключение | Исключение | Исключение | Исключение |
Оба 0 | Допустимо | Допустимо | Допустимо | Допустимо |
Разрешение операции перемещения не означает, что операция успешно найдет запись. Он просто указывает, что попытка выполнить указанную операцию перемещения разрешена и не создаст исключение. Значение IsBOF
IsEOF
функций-членов может измениться в результате попытки перемещения.
Эффект операций перемещения, которые не находят запись по значению IsBOF
и IsEOF
параметрам, показаны в следующей таблице.
Операции | 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
возвращается ненулевое значение, текущая запись не определена, и любое действие, требующее текущей записи, приведет к исключению.
Эффект конкретных методов и IsBOF
IsEOF
параметров:
Вызов
Open
внутренне делает первую запись в наборе записей текущей записи путем вызоваMoveFirst
. Поэтому вызовOpen
пустого набора записей вызываетIsBOF
иIsEOF
возвращает ненулевое значение. (См. следующую таблицу для поведения неудачногоMoveFirst
вызова.)Все операции перемещения, которые успешно находят запись, вызывают как 0, так
IsBOF
иIsEOF
возвращают 0.Вызов
AddNew
,Update
за которым следует вызов, который успешно вставляет новую запись, приведетIsBOF
к возврату 0, но только в том случае, еслиIsEOF
уже ненулевое значение. СостояниеIsEOF
всегда остается неизменным. Как определено ядром СУБД Microsoft Jet, текущий указатель на пустую набор записей находится в конце файла, поэтому любая новая запись вставляется после текущей записи.Любой
Delete
вызов, даже если он удаляет единственную оставшуюся запись из набора записей, не изменит значениеIsBOF
илиIsEOF
.
В этой таблице показано, какие операции перемещения разрешены с различными сочетаниями IsBOF
/ IsEOF
.
Штат | MoveFirst, MoveLast | MovePrev, Перемещение < 0 |
Перемещение 0 | MoveNext, Перемещение > 0 |
---|---|---|---|---|
IsBOF =nonzero,IsEOF =0 |
Допустимо | Исключение | Исключение | Допустимо |
IsBOF =0,IsEOF =nonzero |
Допустимо | Допустимо | Исключение | Исключение |
Оба ненулевого | Исключение | Исключение | Исключение | Исключение |
Оба 0 | Допустимо | Допустимо | Допустимо | Допустимо |
Разрешение операции перемещения не означает, что операция успешно найдет запись. Он просто указывает, что попытка выполнить указанную операцию перемещения разрешена и не создаст исключение. Значение IsBOF
IsEOF
функций-членов может измениться в результате попытки перемещения.
Эффект операций перемещения, которые не находят запись по значению IsBOF
и IsEOF
параметрам, показаны в следующей таблице.
Операции | 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
или вызоваIsEOF
IsBOF
.Requery
Примечание.
Если вы прокрутили мимо начала или конца набора записей ( IsBOF
или IsEOF
возвращает ненулевое значение), вызов Move
вызывает вызов CDaoException
.
Примечание.
При вызове любой из функций при обновлении или добавлении текущей Move
записи обновления обновления будут потеряны без предупреждения.
При вызове Move
моментального снимка прокрутки только для пересылки параметр lRows должен быть положительным целым числом, и закладки не допускаются, поэтому вы можете перемещаться только вперед.
Чтобы сделать первую, последнюю, следующую или предыдущую запись в наборе записей текущей записи, вызовите MoveFirst
функцию , MoveLast
MoveNext
или MovePrev
функцию-член.
Дополнительные сведения см. в разделах "Метод перемещения" и "MoveFirst, MoveLast, MoveNext, MovePrevious Methods" в справке DAO.
CDaoRecordset::MoveFirst
Вызовите эту функцию-член, чтобы сделать первую запись в наборе записей (если она есть) текущей записи.
void MoveFirst();
Замечания
Вам не нужно MoveFirst
вызывать сразу после открытия набора записей. В то время первая запись (при наличии) автоматически является текущей записью.
Внимание
Вызов любой из Move
функций вызывает исключение, если набор записей не содержит записей. Как правило, вызовите оба IsBOF
и IsEOF
перед операцией перемещения, чтобы определить, имеет ли набор записей какие-либо записи. После вызова или вызова или вызова Open
или вызоваIsEOF
IsBOF
.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
или вызоваIsEOF
IsBOF
.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
или вызоваIsEOF
IsBOF
.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
или вызоваIsEOF
IsBOF
.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
Примечание.
Можно вызывать Open
CDaoTableDef
только объект для наборов записей типа таблицы.
При использовании третьей версии Open
, в которой вы передаете CDaoQueryDef
объект, выполняется этот запрос, а результирующий столбцы доступны для привязки через DoFieldExchange
механизм DFX и (или) динамически привязывать через GetFieldValue
.
Примечание.
Можно вызывать Open
CDaoQueryDef
только объект для наборов записей типа 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 и вызовите ее функцию-член GetConnect.
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
.
Примечание.
Вызов Requery
закладок 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
Целое число, соответствующее размеру массива, которое является числом полей в индексе.
Примечание.
не указывайте подстановочные знаки в ключах. Подстановочные знаки не Seek
будут возвращать соответствующие записи.
Возвращаемое значение
Ненулевое значение, если найдены соответствующие записи, в противном случае — значение 0.
Замечания
Используйте вторую версию (массив) Seek
для обработки индексов четырех полей или более.
Seek
обеспечивает высокопроизводительный поиск индексов в наборах записей типа таблицы. Перед вызовом SetCurrentIndex
Seek
необходимо задать текущий индекс. Если индекс идентифицирует неуниковое ключевое поле или поля, Seek
найдите первую запись, удовлетворяющую критериям. Если индекс не задан, создается исключение.
Если вы не создаете набор записей ЮНИКОД, COleVariant
объекты должны быть явно объявлены ANSI. Это можно сделать с помощью формы конструктора COleVariant::COleVariant(lpszSrc, vtSrc) конструктора с параметром vtSrc set VT_BSTRT
(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 или моментального снимка. Однако при вызове 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
(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, например подключенная таблица, может иметь локальный кэш. Чтобы создать кэш, откройте объект набора записей из удаленного источника данных, вызовите функции-члены и вызовите SetCacheSize
SetCacheStart
FillCache
функцию-член или выполните шаг через записи с помощью одной из операций перемещения. Параметр 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, снова вызовите размер кэша, который вы первоначально запрашивали, а затем вызовите SetCacheSize
FillCache
функцию-член.
Если вы не создаете набор записей ЮНИКОД, COleVariant
объект должен быть явно объявлен ANSI. Это можно сделать с помощью формы конструктора COleVariant::COleVariant(lpszSrc, vtSrc) конструктора с параметром vtSrc set VT_BSTRT
(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, все элементы данных поля в наборе записей помечены. (C++ NULL не совпадает с значением NULL в терминологии базы данных, что означает "отсутствие значения".
bDirty
Значение TRUE, если элемент данных поля должен быть помечен как "грязный" (изменен). В противном случае значение FALSE, если элемент данных поля должен быть помечен как "чистый" (без изменений).
Замечания
Пометка полей без изменений гарантирует, что поле не обновляется.
Платформа помечает измененные элементы данных поля, чтобы убедиться, что они будут записаны в запись в источнике данных механизмом обмена полями DAO (DFX). Изменение значения поля обычно задает поле грязно, поэтому вам редко нужно вызывать SetFieldDirty
себя, но иногда требуется убедиться, что столбцы явно обновляются или вставляются независимо от того, какое значение находится в элементе данных поля. Механизм DFX также использует использование ПСЕВДОНУЛЛ. Дополнительные сведения см. в разделе CDaoFieldExchange::m_nOperation.
Если механизм двойного буферизации не используется, изменение значения поля не автоматически задает поле как грязное. В этом случае необходимо явно задать поле как грязное. Флаг, содержащийся в m_bCheckCacheForDirtyFields , управляет этой автоматической проверкой полей.
Использование 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, все элементы данных поля в наборе записей помечены. (C++ NULL не совпадает с значением NULL в терминологии базы данных, что означает "отсутствие значения".
bNull
Ненулевое значение, если элемент данных поля должен быть помечен как не имеющий значения (NULL). В противном случае значение 0, если элемент данных поля должен быть помечен как не null.
Замечания
SetFieldNull
используется для полей, привязанных в механизме DoFieldExchange
.
При добавлении новой записи в набор записей все члены данных поля изначально задают значение NULL и помечены как "грязные" (изменены). При получении записи из источника данных его столбцы уже имеют значения или имеют значение NULL. Если это не подходит для создания поля NULL, создается исключение CDaoException .
Если вы используете механизм двойной буферизации, например, если вы конкретно хотите назначить поле текущей записи как не имеющее значения, вызов SetFieldNull
bNull имеет значение TRUE, чтобы пометить его как NULL. Если поле было ранее отмечено null, и теперь вы хотите дать ему значение, задайте его новое значение. Вам не нужно удалять флаг NULL с SetFieldNull
. Чтобы определить, разрешено ли поле иметь значение NULL, вызовите IsFieldNullable.
Если вы не используете механизм двойной буферизации, изменение значения поля не автоматически задает поле как грязное и не равно NULL. Необходимо специально задать поля, грязные и непустые. Флаг, содержащийся в m_bCheckCacheForDirtyFields , управляет этой автоматической проверкой полей.
Механизм DFX использует использование ПСЕВДОНУЛЛ. Дополнительные сведения см. в разделе CDaoFieldExchange::m_nOperation.
Использование 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
(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
(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
выполнения операции.
Оба AddNew
Edit
файла и подготовка буфера редактирования, в котором добавленные или измененные данные помещаются для сохранения в источник данных. Update
сохраняет данные. Обновляются только эти поля, помеченные или обнаруженные как измененные.
Если источник данных поддерживает транзакции, можно вызвать Update
(и соответствующую AddNew
или Edit
вызвать) часть транзакции.
Внимание
При вызове без первого вызова Update
AddNew
или Edit
Update
вызывается 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