Conjunto de registros: Agregar, actualizar y eliminar registros (ODBC)

Este tema es aplicable a las clases ODBC de MFC.

Nota:

Ahora se pueden agregar registros de forma masiva con mayor eficiencia. Para obtener más información, vea Conjunto de registros: Agregar registros de forma masiva (ODBC).

Nota:

Este tema se aplica a objetos derivados de CRecordset donde no se haya implementado la obtención masiva de filas. Si utiliza la obtención masiva de filas, vea Conjunto de registros: Obtener registros de forma masiva (ODBC).

Los conjuntos de registros dinámicos y as instantáneas actualizables permiten agregar, editar (actualizar) y eliminar registros. En este tema se explica:

Para obtener más información sobre cómo se realizan las actualizaciones y cómo aparecen para el resto de los usuarios, vea Conjunto de registros: Actualizar los registros (ODBC). Normalmente, al agregar, editar o eliminar un registro, el conjunto de registros cambia el origen de datos inmediatamente. En su lugar, se pueden agrupar las actualizaciones relacionadas en transacciones. Si hay una transacción en progreso, la actualización no es final hasta que se confirma la transacción. Esto permite recuperar o revertir los cambios. Para obtener información sobre transacciones, vea Transacción (ODBC).

La siguiente tabla resume las opciones disponibles para conjuntos de registros con diferentes características de actualización.

Opciones de lectura y actualización de un conjunto de registros

Tipo Lectura Editar registro Eliminar registro Adición de nuevos registros (anexar)
Solo lectura S N N N
Sólo anexar S N N S
Totalmente actualizable Y Y Y Y

Determinar si el conjunto de registros es actualizable

Un objeto de conjunto de registros es actualizable si el origen de datos lo es y se abre el conjunto de registros como actualizable. Su capacidad de actualización depende también de la instrucción SQL utilizada, de la funcionalidad del controlador ODBC y de si la biblioteca de cursores ODBC está o no en memoria. No se puede actualizar un conjunto de registros u origen de datos de sólo lectura.

Para determinar si el conjunto de registros es actualizable

  1. Llame a la función miembro CanUpdate del objeto de conjunto de registros.

    CanUpdate devuelve un valor distinto de cero si el conjunto de registros es actualizable.

De forma predeterminada, los conjuntos de registros son totalmente actualizables (se pueden realizar operaciones AddNew, Edit y Delete). También se puede usar la opción appendOnly para abrir conjuntos de registros actualizables. Un conjunto de registros abierto de esta forma sólo permite agregar nuevos registros con AddNew. No se pueden editar ni eliminar registros existentes. Puede probar si un conjunto de registros está abierto solo para anexar llamando a la función miembro CanAppend. CanAppend devuelve un valor distinto de cero si el conjunto de registros es totalmente actualizable o si está abierto solo para anexar.

El código siguiente muestra cómo se puede usar CanUpdate para un objeto de conjunto de registros denominado rsStudentSet:

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

Precaución

Al prepararse para actualizar un conjunto de registros llamando a Update, asegúrese de que incluye todas las columnas que componen la clave principal de la tabla (o todas las columnas que componen cualquiera de los índices únicos de la tabla). En algunos casos, el marco de trabajo sólo puede utilizar las columnas seleccionadas en el conjunto de registros para identificar qué registro de la tabla se actualiza. Sin todas las columnas necesarias, se podrían actualizar varios registros de la tabla, dañando posiblemente la integridad referencial de ésta. En este caso, el marco de trabajo produce excepciones al llamar a Update.

Agregar un registro a un conjunto de registros

Se pueden agregar nuevos registros a un conjunto de registros si su función miembro CanAppend devuelve un valor distinto de cero.

Para agregar un nuevo registro a un conjunto de registros

  1. Asegúrese de que el conjunto de registros es actualizable.

  2. Llame a la función miembro AddNew del objeto de conjunto de registros.

    AddNew prepara el conjunto de registros para que actúe como búfer de edición. Todos los miembros de datos de campo se establecen en el valor especial Null y se marcan como sin cambios para que sólo se escriban los valores modificados en el origen de datos al llamar a Update.

  3. Establezca los valores de los miembros de datos de campo del nuevo registro.

    Asigne valores a los miembros de datos de campo. Aquellos que queden sin asignar no se escriben en el origen de datos.

  4. Llame a la función miembro Update del objeto de conjunto de registros.

    Update completa la acción de agregar escribiendo el nuevo registro en el origen de datos. Para obtener información sobre lo que ocurre si no se llama a Update, vea Conjunto de registros: Actualizar los registros (ODBC).

Para obtener más información sobre cómo se agregan registros y cuándo son visibles los registros agregados en el conjunto de registros, vea Conjunto de registros: cómo funcionan AddNew, Edit y Delete (ODBC).

El siguiente ejemplo muestra cómo agregar un nuevo registro:

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;
}

Sugerencia

Para cancelar una llamada a AddNew o Edit, basta con realizar otra llamada a AddNew o Edit; o bien, llamar a Move con el parámetro AFX_MOVE_REFRESH. Se restaura el valor original de los miembros de datos y el usuario continúa en modo Edit o Add.

Edición de un registro en un conjunto de registros

Se pueden editar los registros existentes si la función miembro CanUpdate del conjunto de registros devuelve un valor distinto de cero.

Para editar un registro existente en un conjunto de registros

  1. Asegúrese de que el conjunto de registros es actualizable.

  2. Desplácese al registro que desea actualizar.

  3. Llame a la función miembro Edit del objeto de conjunto de registros.

    Edit prepara el conjunto de registros para que actúe como búfer de edición. Todos los miembros de datos de campo se marcan para que el conjunto de registros pueda detectar posteriormente si se modificaron. Los nuevos valores de los miembros de datos de campo modificados se escriben en el origen de datos al llamar a Update.

  4. Establezca los valores de los miembros de datos de campo del nuevo registro.

    Asigne valores a los miembros de datos de campo. A los que no asigne valores, permanecen sin modificar.

  5. Llame a la función miembro Update del objeto de conjunto de registros.

    Update completa la acción de editar escribiendo el registro modificado en el origen de datos. Para obtener información sobre lo que ocurre si no se llama a Update, vea Conjunto de registros: Actualizar los registros (ODBC).

Después de editar un registro, éste continúa siendo el registro actual.

El siguiente ejemplo muestra una operación Edit. Se supone que el usuario se desplazó a un registro que desea editar.

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;
}

Sugerencia

Para cancelar una llamada a AddNew o Edit, basta con realizar otra llamada a AddNew o Edit; o bien, llamar a Move con el parámetro AFX_MOVE_REFRESH. Se restaura el valor original de los miembros de datos y el usuario continúa en modo Edit o Add.

Eliminación de un registro de un conjunto de registros

Se pueden eliminar los registros existentes si la función miembro CanUpdate del conjunto de registros devuelve un valor distinto de cero.

Para eliminar un registro

  1. Asegúrese de que el conjunto de registros es actualizable.

  2. Desplácese al registro que desea actualizar.

  3. Llame a la función miembro Delete del objeto de conjunto de registros.

    Delete marca inmediatamente el registro como eliminado, tanto en el conjunto de registros como en el origen de datos.

    A diferencia de AddNew y Edit, Delete no tiene su correspondiente llamada a Update.

  4. Desplácese a otro registro.

    Nota:

    Al desplazarse por un conjunto de registros, es posible que no se omitan los registros eliminados. Para más información, vea la función miembro IsDeleted.

En el ejemplo siguiente, se muestra una operación Delete. Se supone que el usuario se desplazó a un registro que desea eliminar. Después de llamar a Delete, es importante el desplazamineto a un nuevo registro.

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

Para obtener más información sobre los efectos de las funciones miembro AddNew, Edit y Delete, vea Conjunto de registros: Actualizar los registros (ODBC).

Consulte también

Conjunto de registros (ODBC)
Conjunto de registros: Bloquear registros (ODBC)