Набор записей. Добавление, обновление и удаление записей (ODBC)
Данный раздел относится к классам ODBC библиотеки MFC.
Примечание |
---|
В настоящий момент существуют более эффективные способы массового добавления записей.Дополнительные сведения см. в разделе Набор записей. Массовое добавление записей (ODBC). |
Примечание |
---|
В этом разделе приведены сведения, относящиеся к объектам, производным от класса CRecordset, в котором групповая выборка строк не реализована.При использовании групповой выборки строк следует ознакомиться с разделом Набор записей: групповая выборка записей (ODBC). |
Обновляемые моментальные снимки и динамическое множество позволяют добавлять, изменять (обновлять) и удалять записи.Содержание раздела:
Как определить, является ли набор записей обновляемым.
Как добавить новую запись.
Как изменить существующую запись.
Как удалить запись.
Дополнительные сведения про выполнение обновлений и способы их отображения другим пользователям см. в разделе Набор записей. Способы обновления записей в наборе (ODBC).Как правило, при добавлении, редактировании или удалении записи набор записей сразу же изменяет источник данных.Вместо этого можно объединять группы связанных обновлений в трансакции.Во время выполнения трансакции и до ее полного завершения обновление не становится окончательным.Это дает возможность отменить внесенные изменения.Дополнительные сведения про транзакции см. в разделе Трансакция (ODBC).
В приведенной ниже таблице перечислены параметры, доступные для наборов записей с разными характеристиками обновления.
Параметры набора записей "Чтение/обновление"
Тип |
Прочитайте |
Изменить запись |
Удалить запись |
Добавить (присоединить) новую |
---|---|---|---|---|
Только для чтения |
Y |
N |
N |
N |
Только присоединение |
Y |
N |
N |
Y |
Полностью обновляемый |
Y |
Y |
Y |
Y |
Определение, является ли набор записей обновляемым
Объект набора записей считается обновляемым, если источник данных является обновляемым и набор записей открыт как обновляемый.Обновляемость объекта также зависит от используемой инструкции SQL, возможностей драйвера ODBC и наличия библиотеки курсоров ODBC в памяти.Нельзя обновлять набор записей или источник данных, которые используются только для чтения.
Чтобы определить, является ли набор записей обновляемым, выполните следующее.
Вызовите набор записей функции-члена объекта CanUpdate.
Если набор записей обновляемый CanUpdate возвращает ненулевое значение.
По умолчанию наборы данных являются полностью обновляемыми (можно выполнять AddNew, Правку и Удаление операций).Однако для открытия обновляемых наборов данных также может использоваться параметр appendOnly.Набор записей, открытый таким образом, позволяет только добавлять новые записи с помощью параметра AddNew.Изменение или удаление существующих записей из такого набора записей невозможно.Проверить, открыт ли набор записей только для присоединения, можно путем вызова функции-члена CanAppend.Если набор записей полностью обновляем или открыт только для присоединения, CanAppend возвращает ненулевое значение.
В приведенном ниже коде показан пример использования CanUpdate для объекта набора записей rsStudentSet:
if( !rsStudentSet.Open( ) )
return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
AfxMessageBox( "Unable to update the Student recordset." );
return;
}
Внимание |
---|
При обновлении набора записей путем вызова функции Обновить убедитесь в том, что набор записей включает все колонки, образующие первичный ключ таблицы (или все столбцы любого уникального индекса в таблице).В некоторых случаях для определения записи в наборе, нуждающейся в обновлении, платформа может использовать только столбцы, выбранные в наборе данных.При отсутствии необходимых столбцов некоторые записи могут обновляться в таблице с возможным повреждением целостности данных таблицы на уровне ссылок.В таком случае при вызове функции Update платформа создает исключения. |
Добавление записи к набору
Добавлять записи в набор можно, если функция-член CanAppend возвращает ненулевое значение.
Чтобы добавить новую запись в набор, необходимо выполнить следующее.
Убедитесь в том, что набор записей имеет возможность присоединения.
Вызовите функцию-член объекта набора записей AddNew.
AddNew подготавливает набор записей к выполнению функций буфера редактирования.Для всех элементов данных поля устанавливается значение "Null" а функции, и все элементы помечаются как неизменные, таким образом, только изменяемые (черновые) значения прописываются в источник данных при вызове функции Обновить.
Установите значения для новых элементов полей данных записи.
Присвойте значения элементам полей данных.Неприсвоенные значения не прописываются в источнике данных.
Сделайте вызов функции-члена объекта набора записей Обновить.
Обновить завершает процесс добавления, прописывая новую запись в источнике данных.Дополнительные сведения о последствиях пропущенного вызова функции Обновить см. в разделе Набор записей. Способы обновления записей в наборе (ODBC).
Подробнее про принципы работы функции добавления и время отображения добавленных записей в наборе данных см. в разделе Набор записей. Принципы работы функций добавления, правки и удаления (ODBC).
В следующем примере показано добавление записи:
if( !rsStudent.Open( ) )
return FALSE;
if( !rsStudent.CanAppend( ) )
return FALSE; // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
AfxMessageBox( "Record not added; no field values were set." );
return FALSE;
}
Совет |
---|
Чтобы отменить вызов AddNew и Правка, сделайте другой вызов AddNew и Правка, или вызовите Перемещение с помощью параметра AFX_MOVE_REFRESH.Если в это время активирован режим Правка или Добавить, элементам данных будут возвращены первоначальные значения. |
Изменение записи в наборе
Изменить текущие записи можно, если функция-член набора записей CanUpdate возвращает нулевое значение.
Чтобы изменить существующую запись в наборе, выполните следующее.
Убедитесь в том, что набор записей обновляемый.
Перейдите к записи, которую нужно обновить.
Вызовите функцию-член объекта набора записей Правка.
Правка подготавливает набор записей к выполнению функций буфера редактирования.Все элементы полей данных помечаются, таким образом, набор записей может впоследствии сообщать об их изменении.Новые значения для элементов данных измененных полей прописываются в источнике данных при вызове функции Обновить.
Установите значения для новых элементов полей данных записи.
Присвойте значения элементам полей данных.Элементы, которым не будут присвоены значения, останутся неизменными.
Сделайте вызов функции-члена объекта набора записей Обновить.
Функция Обновить завершает процесс изменения, прописывая измененную запись в источнике данных.Дополнительные сведения о последствиях пропущенного вызова функции Обновить см. в разделе Набор записей. Способы обновления записей в наборе (ODBC).
После изменения запись сохраняется в качестве текущей записи.
В следующем примере показана операция Правки.Предполагается, что выбрана запись, которую необходимо изменить.
rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
AfxMessageBox( "Record not updated; no field values were set." );
return FALSE;
}
Совет |
---|
Чтобы отменить вызов AddNew и Правка, сделайте другой вызов AddNew и Правка, или вызовите Перемещение с помощью параметра AFX_MOVE_REFRESH.Если в это время активирован режим Правка или Добавить, элементам данных будут возвращены первоначальные значения. |
Удаление записи из набора
Удалить записи можно, если функция-член набора записей CanUpdate возвращает ненулевое значение.
Чтобы удалить запись, выполните следующее.
Убедитесь в том, что набор записей обновляемый.
Перейдите к записи, которую нужно обновить.
Вызовите функцию-член объекта набора записей Удалить.
Функция Удалить сразу же помечает запись как удаленную в наборе данных и в источнике данных.
В отличие от AddNew и Правка, Удалить не имеет соответствующего вызова Обновить.
Перейдите к другой записи.
Примечание При перемещении по набору записей удаленные записи могут не пропускаться.Дополнительные сведения см. в описании функции-члена IsDeleted.
В следующем примере показана выполненная операция Удаления.Предполагается, что выбрана запись, которую необходимо удалить.После вызова функции Удалить необходимо перейти к новой записи.
rsStudent.Delete( );
rsStudent.MoveNext( );
Дополнительные сведения про действие функций-членов AddNew, Правка и Удалить см. в разделе Набор записей. Способы обновления записей в наборе (ODBC).