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


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

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

Примечание.

Теперь вы можете добавлять записи в массовом режиме более эффективно. Дополнительные сведения см. в разделе Recordset: Добавление записей в пакетной службе (ODBC).

Примечание.

Этот раздел относится к объектам, производным от CRecordset, в которых пакетное получение строк не реализовано. Если вы используете массовое получение строк, ознакомьтесь с набором записей: извлечение записей в пакетной службе (ODBC).

Обновляемые моментальные снимки и dynaset позволяют добавлять, изменять (обновлять) и удалять записи. В этом разделе рассматриваются следующие вопросы.

Дополнительные сведения о том, как выполняются обновления и как отображаются обновления для других пользователей, см. в разделе Recordset: How Recordsets Update Records (ODBC). Обычно при добавлении, изменении или удалении записи набор записей немедленно изменяет источник данных. Вместо этого можно пакетные группы связанных обновлений в транзакции. Если транзакция выполняется, обновление не становится окончательным, пока не зафиксируйте транзакцию. Это позволяет вернуть или откатить изменения. Сведения о транзакциях см. в разделе "Транзакция( ODBC)".

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

Параметры чтения и обновления набора записей

Тип Чтение Изменить запись Удалить запись Добавление нового (добавление)
Только для чтения Y N N N
Только для добавления Y N N Y
Полностью обновляемые Y Y Y Y

Определение возможности обновления набора записей

Объект набора записей можно обновить, если источник данных можно обновить, и вы открыли набор записей в качестве обновляемого. Его возможность обновления также зависит от используемой инструкции SQL, возможностей драйвера ODBC и наличия в памяти библиотеки курсоров ODBC. Невозможно обновить набор записей только для чтения или источник данных.

Определение того, является ли набор записей обновляемым

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

    CanUpdate возвращает ненулевое значение, если набор записей можно обновить.

По умолчанию наборы записей полностью обновляются (можно выполнять и Delete операцииAddNewEdit). Но вы также можете использовать параметр appendOnly для открытия обновляемых наборов записей. Набор записей, открытый таким образом, позволяет добавлять только новые записи.AddNew Невозможно изменить или удалить существующие записи. Можно проверить, открыт ли набор записей только для добавления, вызвав функцию-член CanAppend . CanAppend возвращает ненулевое значение, если набор записей полностью обновляется или открыт только для добавления.

В следующем коде показано, как можно использовать CanUpdate для объекта набора записей:rsStudentSet

if( !rsStudentSet.Open( ) )
    return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
    AfxMessageBox( "Unable to update the Student recordset." );
    return;
}

Внимание

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

Добавление записи в набор записей

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

Добавление новой записи в набор записей

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

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

    AddNew подготавливает набор записей к действиям в качестве буфера редактирования. Все члены данных поля имеют специальное значение NULL и помечаются как измененные (грязное) значения записываются в источник данных при вызове Update.

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

    Назначьте значения членам данных поля. Те, которые вы не назначаете, не записываются в источник данных.

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

    Update Завершает добавление, записав новую запись в источник данных. Сведения о том, что происходит, если не удается вызвать Update, см . раздел Recordset: How Recordsets Update Records (ODBC).

Сведения о том, как работает добавление записей и о том, когда добавленные записи отображаются в наборе записей, см. в разделе Recordset: How AddNew, Edit, and Delete Work (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 или Edit вызвать, просто выполните другой вызов AddNew или Edit вызов Move с параметром AFX_MOVE_REFRESH . Элементы данных сбрасываются до предыдущих значений, и вы все еще находитесь в режиме или Add в Edit режиме.

Редактирование записи в наборе записей

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

Изменение существующей записи в наборе записей

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

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

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

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

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

    Назначьте значения членам данных поля. Те значения, которые не назначаются, остаются неизменными.

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

    Update завершает редактирование, записав измененную запись в источник данных. Сведения о том, что происходит, если не удается вызвать Update, см . раздел Recordset: How Recordsets Update Records (ODBC).

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

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

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 или Edit вызвать, просто выполните другой вызов AddNew или Edit вызов Move с параметром AFX_MOVE_REFRESH . Элементы данных сбрасываются до предыдущих значений, и вы все еще находитесь в режиме или Add в Edit режиме.

Удаление записи из набора записей

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

Удаление записи

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

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

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

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

    В отличие AddNew от и Editне Delete имеет соответствующего Update вызова.

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

    Примечание.

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

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

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

Дополнительные сведения о влиянии AddNewфункций элементов Editи Delete функций-членов см. в разделе Recordset: How Recordsets Update Records (ODBC).

См. также

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