Набор записей. Добавление, обновление и удаление записей (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. Невозможно обновить набор записей только для чтения или источник данных.
Определение того, является ли набор записей обновляемым
Вызовите функцию-член объекта набора записей CanUpdate .
CanUpdate
возвращает ненулевое значение, если набор записей можно обновить.
По умолчанию наборы записей полностью обновляются (можно выполнять и Delete
операцииAddNew
Edit
). Но вы также можете использовать параметр 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 возвращает ненулевое значение.
Добавление новой записи в набор записей
Убедитесь, что набор записей можно добавить.
Вызовите функцию-член объекта набора записей AddNew .
AddNew
подготавливает набор записей к действиям в качестве буфера редактирования. Все элементы данных поля задаются в значение NULL и помечены как не измененные (грязные) значения записываются в источник данных при вызове Update.Задайте значения элементов данных поля новой записи.
Назначьте значения членам данных поля. Те, которые вы не назначаете, не записываются в источник данных.
Вызовите функцию-член объекта
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 возвращает ненулевое значение.
Изменение существующей записи в наборе записей
Убедитесь, что набор записей можно обновить.
Прокрутите страницу до записи, которую вы хотите обновить.
Вызовите функцию элемента элемента набора записей.
Edit
подготавливает набор записей к действиям в качестве буфера редактирования. Все члены данных поля помечены таким образом, чтобы набор записей смог узнать позже, были ли они изменены. Новые значения для измененных элементов данных поля записываются в источник данных при вызове Update.Задайте значения элементов данных поля новой записи.
Назначьте значения членам данных поля. Те значения, которые не назначаются, остаются неизменными.
Вызовите функцию-член объекта
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 возвращает ненулевое значение.
Удаление записи
Убедитесь, что набор записей можно обновить.
Прокрутите страницу до записи, которую вы хотите обновить.
Вызовите функцию элемента delete объекта набора записей.
Delete
сразу же помечает запись как удаленную, так и в наборе записей и в источнике данных.В отличие
AddNew
от иEdit
неDelete
имеет соответствующегоUpdate
вызова.Прокрутите страницу до другой записи.
Примечание.
При перемещении по набору записей удаленные записи могут не пропускаться. Дополнительные сведения см. в функции-члене IsDeleted .
В следующем примере показана Delete
операция. Предполагается, что пользователь перешел в запись, которую пользователь хочет удалить. После Delete
вызова важно перейти к новой записи.
rsStudent.Delete( );
rsStudent.MoveNext( );
Дополнительные сведения о влиянии AddNew
функций элементов Edit
и Delete
функций-членов см. в разделе Recordset: How Recordsets Update Records (ODBC).