CRecordset::DoFieldExchange
Appelé pour échanger des données (dans les deux sens) entre les membres de données de type champ de recordset et l'enregistrement correspondant de la source de données. Les outils signalent l'échange de RFX (record field exchange).
virtual void DoFieldExchange(
CFieldExchange* pFX
);
Paramètres
- pFX
Un pointeur vers un objet CFieldExchange. L'infrastructure aura déjà installé cet objet pour spécifier un contexte pour l'exécution d'échange des champs.
Notes
Lorsque l'extraction de lignes en bloc n'est pas implémentée, l'infrastructure appelle cette fonction membre automatiquement pour échanger des données entre les données membres de champ de l'objet recordset et les colonnes correspondantes de l'enregistrement en cours sur la source de données. DoFieldExchange lie également les membres de données de type paramètre, le cas échéant, aux emplacements de paramètres réservés dans la chaîne d'instruction SQL pour la sélection du recordset.
Si l'extraction de lignes en bloc est implémentée, l'infrastructure appelle DoBulkFieldExchange. Pour implémenter l'extraction de lignes en bloc, vous devez spécifier l'option d' CRecordset::useMultiRowFetch du paramètre d' dwOptions dans la fonction membre d' Ouvrez .
Notes
DoFieldExchange est disponible uniquement si vous utilisez une classe dérivée d' CRecordset.Si vous avez créé un objet recordset directement d' CRecordset, vous devez appeler la fonction membre de GetFieldValue pour récupérer des données.
L'échange de données du champ, l'appelé record field exchange (bulk RFX), fonctionne dans les deux directions : les données membres de champ de l'objet recordset aux champs de l'enregistrement dans la source de données, et de l'enregistrement dans la source de données et l'objet recordset.
La seule action que vous devez normalement suivre pour implémenter DoFieldExchange pour votre classe de recordset dérivée est de créer la classe avec ClassWizard et de spécifier les noms et les types de données membres de champ. Vous pouvez également ajouter du code à ce que ClassWizard écrit pour spécifier des membres de données de type paramètre ou pour gérer toutes les colonnes que vous liez dynamiquement. Pour plus d'informations, consultez l'article recordset : Colonnes de données liaison dynamique (ODBC).
Lorsque vous déclarez votre classe de recordset dérivée avec ClassWizard, l'assistant écrit une substitution d' DoFieldExchange pour vous, qui ressemble à l'exemple suivant :
void CCustomer::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
// Macros such as RFX_Text() and RFX_Int() are dependent on the
// type of the member variable, not the type of the field in the database.
// ODBC will try to automatically convert the column value to the requested type
RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);
RFX_Text(pFX, _T("[ContactFirstName]"), m_ContactFirstName);
RFX_Text(pFX, _T("[PostalCode]"), m_PostalCode);
RFX_Text(pFX, _T("[L_Name]"), m_L_Name);
RFX_Long(pFX, _T("[BillingID]"), m_BillingID);
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("Param"), m_strParam);
}
Pour plus d'informations sur les fonctions RFX, consultez la rubrique Enregistrez les fonctions d'échange des champs.
Pour d'autres exemples et détails concernant DoFieldExchange, consultez l'article Enregistrez l'échange des champs : Comment RFX fonctionne. Pour plus d'informations sur RFX, consultez l'article Enregistrez l'échange des champs.
Exceptions
Cette méthode peut lever des exceptions de type CDBException*.
Configuration requise
Header: afxdb.h
Voir aussi
Référence
CRecordset::DoBulkFieldExchange