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 :
Comment déterminer si votre jeu d’enregistrements est pouvant être mis à jour.
Comment modifier un enregistrement existant.
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
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
, Edit
et 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
Vérifiez que le jeu d’enregistrements est appendable.
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.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.
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 à appelerUpdate
, 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 AddNew
Edit
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
Vérifiez que le jeu d’enregistrements est mis à jour.
Faites défiler jusqu’à l’enregistrement à mettre à jour.
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.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.
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 à appelerUpdate
, 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 AddNew
Edit
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
Vérifiez que le jeu d’enregistrements est mis à jour.
Faites défiler jusqu’à l’enregistrement à mettre à jour.
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
à etEdit
,Delete
n’a pas d’appel correspondantUpdate
.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 AddNew
fonctions membres et Delete
, Edit
consultez Recordset : How Recordsets Update Records (ODBC).
Voir aussi
Recordset (ODBC)
Recordset : verrouillage d’enregistrements (ODBC)