Набор записей. Добавление, обновление и удаление записей (ODBC)
Обновлен: Ноябрь 2007
Данный раздел относится к классам ODBC библиотеки MFC.
Примечание. |
---|
В настоящий момент существуют более эффективные способы массового добавления записей. Дополнительные сведения см. в разделе Набор записей. Массовое добавление записей (ODBC). |
Примечание. |
---|
Этот раздел относится к объектам, производным от класса CRecordset, в котором групповая выборка строк не реализована. При использовании групповой выборки строк следует ознакомиться с разделом Набор записей. Групповая выборка записей (ODBC). |
Обновляемые моментальные снимки и динамическое множество позволяют добавлять, изменять (обновлять) и удалять записи. В данном разделе описывается следующее.
Как определить, является ли набор записей обновляемым.
Как добавить новую запись.
Как изменить существующую запись.
Как удалить запись.
Дополнительные сведения про выполнение обновлений и способы их отображения другим пользователям см. в разделе Набор записей. Способы обновления записей в наборе (ODBC). Как правило, при добавлении, редактировании или удалении записи набор записей сразу же изменяет источник данных. Вместо этого можно объединять группы связанных обновлений в трансакции. Во время выполнения трансакции и до ее полного завершения обновление не становится окончательным. Это дает возможность отменить внесенные изменения. Дополнительные сведения про транзакции см. в разделе Трансакция (ODBC).
В приведенной ниже таблице перечислены параметры, доступные для наборов записей с разными характеристиками обновления.
Параметры набора записей "Чтение/обновление"
Тип |
Чтение |
Изменить запись |
Удалить запись |
Добавить (присоединить) новую |
---|---|---|---|---|
Только чтение |
Да |
Нет |
Нет |
Нет |
Только присоединение |
Да |
Нет |
Нет |
Да |
Полностью обновляемый |
Да |
Да |
Да |
Да |
Определение, является ли набор записей обновляемым
Объект набора записей считается обновляемым, если источник данных является обновляемым и набор записей открыт как обновляемый. Обновляемость объекта также зависит от используемой инструкции 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;
}
Внимание! |
---|
При обновлении набора записей путем вызова функции Обновить убедитесь в том, что набор записей включает все колонки, образующие первичный ключ таблицы (или все столбцы любого уникального индекса в таблице). В некоторых случаях для определения записи в наборе, нуждающейся в обновлении, платформа может использовать только столбцы, выбранные в наборе данных. При отсутствии необходимых столбцов некоторые записи могут обновляться в таблице с возможным повреждением целостности данных таблицы на уровне ссылок. В таком случае при вызове функции Обновить платформа создает исключения. |
Добавление записи к набору
Добавлять записи в набор можно, если функция-член 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).