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


Набор записей. Добавление, обновление и удаление записей (ODBC)

Данный раздел относится к классам ODBC библиотеки MFC.

Примечание

В настоящий момент существуют более эффективные способы массового добавления записей.Дополнительные сведения см. в разделе Набор записей. Массовое добавление записей (ODBC).

Примечание

В этом разделе приведены сведения, относящиеся к объектам, производным от класса CRecordset, в котором групповая выборка строк не реализована.При использовании групповой выборки строк следует ознакомиться с разделом Набор записей: групповая выборка записей (ODBC).

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

  • Как определить, является ли набор записей обновляемым.

  • Как добавить новую запись.

  • Как изменить существующую запись.

  • Как удалить запись.

Дополнительные сведения про выполнение обновлений и способы их отображения другим пользователям см. в разделе Набор записей. Способы обновления записей в наборе (ODBC). Как правило, при добавлении, редактировании или удалении записи набор записей сразу же изменяет источник данных. Вместо этого можно объединять группы связанных обновлений в трансакции. Во время выполнения трансакции и до ее полного завершения обновление не становится окончательным. Это дает возможность отменить внесенные изменения. Дополнительные сведения про транзакции см. в разделе Трансакция (ODBC).

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

Параметры набора записей "Чтение/обновление"

Тип

Read

Изменить запись

Удалить запись

Добавить (присоединить) новую

Только для чтения

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 возвращает ненулевое значение.

Чтобы добавить новую запись в набор, необходимо выполнить следующее.

  1. Убедитесь в том, что набор записей имеет возможность присоединения.

  2. Вызовите функцию-член объекта набора записей AddNew.

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

  3. Установите значения для новых элементов полей данных записи.

    Присвойте значения элементам полей данных. Неприсвоенные значения не прописываются в источнике данных.

  4. Сделайте вызов функции-члена объекта набора записей Обновить.

    Обновить завершает процесс добавления, прописывая новую запись в источнике данных. Дополнительные сведения о последствиях пропущенного вызова функции Обновить см. в разделе Набор записей. Способы обновления записей в наборе (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 возвращает нулевое значение.

Чтобы изменить существующую запись в наборе, выполните следующее.

  1. Убедитесь в том, что набор записей обновляемый.

  2. Перейдите к записи, которую нужно обновить.

  3. Вызовите функцию-член объекта набора записей Правка.

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

  4. Установите значения для новых элементов полей данных записи.

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

  5. Сделайте вызов функции-члена объекта набора записей Обновить.

    Функция Обновить завершает процесс изменения, прописывая измененную запись в источнике данных. Дополнительные сведения о последствиях пропущенного вызова функции Обновить см. в разделе Набор записей. Способы обновления записей в наборе (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 возвращает ненулевое значение.

Чтобы удалить запись, выполните следующее.

  1. Убедитесь в том, что набор записей обновляемый.

  2. Перейдите к записи, которую нужно обновить.

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

    Функция Удалить сразу же помечает запись как удаленную в наборе данных и в источнике данных.

    В отличие от AddNew и Правка, Удалить не имеет соответствующего вызова Обновить.

  4. Перейдите к другой записи.

    Примечание

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

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

rsStudent.Delete( );
rsStudent.MoveNext( );

Дополнительные сведения про действие функций-членов AddNew, Правка и Удалить см. в разделе Набор записей. Способы обновления записей в наборе (ODBC).

См. также

Основные понятия

Набор записей (ODBC)

Набор записей: блокировка (ODBC)