Partager via


Recordset : ajout, modification et suppression d'enregistrements (ODBC)

Cette rubrique s’applique aux classes ODBC MFC.

Remarque

Vous pouvez maintenant ajouter des enregistrements en bloc plus efficacement. Pour plus d’informations, consultez Recordset : Ajout d’enregistrements en bloc (ODBC)

Remarque

Cette rubrique s’applique aux objets dérivés de CRecordset où l’extraction de lignes en bloc n’a pas été implémentée. Si vous utilisez l’extraction de lignes en bloc, consultez Recordset : Extraction d’enregistrements en bloc (ODBC).

Les instantané et feuilles dynamiques pouvant être mises à jour vous permettent d’ajouter, de modifier (mettre à jour) et de supprimer des enregistrements. Cette rubrique explique :

Pour plus d’informations sur la façon dont les mises à jour sont effectuées et la façon dont vos mises à jour apparaissent pour d’autres utilisateurs, consultez Recordset : How Recordsets Update Records (ODBC). Normalement, lorsque vous ajoutez, modifiez ou supprimez un enregistrement, le jeu d’enregistrements modifie immédiatement la source de données. Vous pouvez à la place traiter par lots des groupes de mises à jour associées dans les transactions. Si une transaction est en cours, la mise à jour ne devient pas finale tant que vous n’avez pas validée la transaction. Cela vous permet de reprendre ou de restaurer les modifications. Pour plus d’informations sur les transactions, consultez Transaction (ODBC).

Le tableau suivant récapitule les options disponibles pour les jeux d’enregistrements avec différentes caractéristiques de mise à jour.

Options de lecture/mise à jour de recordset

Type Lire Modifier l’enregistrement Supprimer un enregistrement Ajouter un nouveau (ajout)
Lecture seule O N N N
Ajout uniquement O N N O
Entièrement pouvant être mise à jour O O O O

Détermination de la mise à jour de votre jeu d’enregistrements

Un objet recordset peut être mis à jour si la source de données est mise à jour et que vous avez ouvert le jeu d’enregistrements comme pouvant être mis à jour. Sa mise à jour dépend également de l’instruction SQL que vous utilisez, des fonctionnalités de votre pilote ODBC et du fait que la bibliothèque de curseurs ODBC est en mémoire. Vous ne pouvez pas mettre à jour un jeu d’enregistrements en lecture seule ou une source de données.

Pour déterminer si votre jeu d’enregistrements est pouvant être mis à jour

  1. Appelez la fonction membre CanUpdate de l’objet recordset.

    CanUpdate retourne une valeur différente de zéro si le jeu d’enregistrements est mis à jour.

Par défaut, les recordsets sont entièrement mis à jour (vous pouvez effectuer AddNew, Editet Delete les opérations). Toutefois, vous pouvez également utiliser l’option appendOnly pour ouvrir des jeux d’enregistrements pouvant être mis à jour. Un jeu d’enregistrements ouvert de cette façon autorise uniquement l’ajout de nouveaux enregistrements avec AddNew. Vous ne pouvez pas modifier ou supprimer des enregistrements existants. Vous pouvez tester si un jeu d’enregistrements est ouvert uniquement pour l’ajout en appelant la fonction membre CanAppend . CanAppend retourne une valeur différente de zéro si le jeu d’enregistrements est entièrement mis à jour ou ouvert uniquement pour l’ajout.

Le code suivant montre comment utiliser CanUpdate un objet recordset appelé rsStudentSet:

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

Attention

Lorsque vous préparez à mettre à jour un recordset en appelant Update, veillez à ce que votre jeu d’enregistrements inclut toutes les colonnes constituant la clé primaire de la table (ou toutes les colonnes d’un index unique sur la table). Dans certains cas, l’infrastructure peut utiliser uniquement les colonnes sélectionnées dans votre jeu d’enregistrements pour identifier l’enregistrement dans votre table à mettre à jour. Sans toutes les colonnes nécessaires, plusieurs enregistrements peuvent être mis à jour dans la table, ce qui peut endommager l’intégrité référentielle de la table. Dans ce cas, l’infrastructure lève des exceptions lorsque vous appelez Update.

Ajout d’un enregistrement à un recordset

Vous pouvez ajouter de nouveaux enregistrements à un recordset si sa fonction membre CanAppend retourne une valeur différente de zéro.

Pour ajouter un nouvel enregistrement à un jeu d’enregistrements

  1. Vérifiez que le jeu d’enregistrements est appendable.

  2. Appelez la fonction membre AddNew de l’objet recordset.

    AddNew prépare le jeu d’enregistrements pour qu’il agisse comme une mémoire tampon d’édition. Tous les membres de données de champ sont définis sur la valeur spéciale Null et marqués comme inchangés, de sorte que seules les valeurs modifiées (sale) sont écrites dans la source de données lorsque vous appelez Update.

  3. Définissez les valeurs des membres de données de champ du nouvel enregistrement.

    Affectez des valeurs aux membres de données de champ. Ceux que vous n’attribuez pas ne sont pas écrits dans la source de données.

  4. Appelez la fonction membre de l’objet Update recordset.

    Update termine l’ajout en écrivant le nouvel enregistrement dans la source de données. Pour plus d’informations sur ce qui se produit si vous ne parvenez pas à appeler Update, consultez Recordset : How Recordsets Update Records (ODBC).

Pour plus d’informations sur le fonctionnement de l’ajout d’enregistrements et sur le moment où les enregistrements ajoutés sont visibles dans votre jeu d’enregistrements, consultez Recordset : How AddNew, Edit and Delete Work (ODBC).

L’exemple suivant montre comment ajouter un nouvel enregistrement :

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

Conseil

Pour annuler un AddNew appel ou Edit un appel, effectuez simplement un autre appel ou appel Move avec AddNewEdit le paramètre AFX_MOVE_REFRESH. Les membres de données sont réinitialisés à leurs valeurs précédentes et vous êtes toujours en mode ou Add en Edit mode.

Modification d’un enregistrement dans un recordset

Vous pouvez modifier des enregistrements existants si la fonction membre CanUpdate de votre jeu d’enregistrements retourne une valeur différente de zéro.

Pour modifier un enregistrement existant dans un jeu d’enregistrements

  1. Vérifiez que le jeu d’enregistrements est mis à jour.

  2. Faites défiler jusqu’à l’enregistrement à mettre à jour.

  3. Appelez la fonction De membre Edit de l’objet recordset .

    Edit prépare le jeu d’enregistrements pour qu’il agisse comme une mémoire tampon d’édition. Tous les membres de données de champ sont marqués afin que le jeu d’enregistrements puisse indiquer ultérieurement s’ils ont été modifiés. Les nouvelles valeurs des membres de données de champ modifiés sont écrites dans la source de données lorsque vous appelez Update.

  4. Définissez les valeurs des membres de données de champ du nouvel enregistrement.

    Affectez des valeurs aux membres de données de champ. Ceux que vous n’affectez pas de valeurs restent inchangés.

  5. Appelez la fonction membre de l’objet Update recordset.

    Update termine la modification en écrivant l’enregistrement modifié dans la source de données. Pour plus d’informations sur ce qui se produit si vous ne parvenez pas à appeler Update, consultez Recordset : How Recordsets Update Records (ODBC).

Après avoir modifié un enregistrement, l’enregistrement modifié reste l’enregistrement actif.

L’exemple suivant montre une Edit opération. Il suppose que l’utilisateur a déplacé vers un enregistrement qu’il souhaite modifier.

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

Conseil

Pour annuler un AddNew appel ou Edit un appel, effectuez simplement un autre appel ou appel Move avec AddNewEdit le paramètre AFX_MOVE_REFRESH. Les membres de données sont réinitialisés à leurs valeurs précédentes et vous êtes toujours en mode ou Add en Edit mode.

Suppression d’un enregistrement d’un jeu d’enregistrements

Vous pouvez supprimer des enregistrements si la fonction membre CanUpdate de votre jeu d’enregistrements retourne une valeur différente de zéro.

Pour supprimer un enregistrement

  1. Vérifiez que le jeu d’enregistrements est mis à jour.

  2. Faites défiler jusqu’à l’enregistrement à mettre à jour.

  3. Appelez la fonction de membre Delete de l’objet recordset.

    Delete marque immédiatement l’enregistrement comme supprimé, à la fois dans le jeu d’enregistrements et sur la source de données.

    Contrairement AddNew à et Edit, Delete n’a pas d’appel correspondant Update .

  4. Faites défiler jusqu’à un autre enregistrement.

    Remarque

    Lorsque vous parcourez le jeu d’enregistrements, les enregistrements supprimés peuvent ne pas être ignorés. Pour plus d’informations, consultez la fonction membre IsDeleted .

L’exemple suivant montre une Delete opération. Il part du principe que l’utilisateur a déplacé vers un enregistrement que l’utilisateur souhaite supprimer. Une fois Delete appelé, il est important de passer à un nouvel enregistrement.

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

Pour plus d’informations sur les effets des AddNewfonctions membres et Delete , Editconsultez Recordset : How Recordsets Update Records (ODBC).

Voir aussi

Recordset (ODBC)
Recordset : verrouillage d’enregistrements (ODBC)