CRecordset::GetFieldValue
Récupère les données du champ de l'enregistrement courant.
void GetFieldValue(
LPCTSTR lpszName,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CStringA& strValue
);
void GetFieldValue(
short nIndex,
CStringW& strValue
);
Paramètres
lpszName
Nom d'un champ.varValue
Une référence à un objet de CDBVariant qui doit stocker la valeur du champ.nFieldType
Le type de données ODBC C du champ.À l'aide de la valeur par défaut, DEFAULT_FIELD_TYPE, force GetFieldValue pour déterminer le type de données C du type de données SQL, en fonction de le tableau suivant.Sinon, vous pouvez spécifier le type de données directement ou choisir un type de données compatible ; par exemple, vous pouvez stocker n'importe quel type de données dans SQL_C_CHAR.Type de données C
Type de données SQL
SQL_C_BIT
SQL_BIT
SQL_C_UTINYINT
SQL_TINYINT
SQL_C_SSHORT
SQL_SMALLINT
SQL_C_SLONG
SQL_INTEGER
SQL_C_FLOAT
SQL_REAL
SQL_C_DOUBLE
SQL_FLOATSQL_DOUBLE
SQL_C_TIMESTAMP
SQL_DATESQL_TIMESQL_TIMESTAMP
SQL_C_CHAR
SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR
SQL_C_BINARY
SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY
Pour plus d'informations sur les types de données ODBC, consultez les rubriques traitant types de données SQL » et « types de données C » l'annexe D d' Kit de développement logiciel Windows.
nIndex
l'index de base zéro du champ.strValue
Une référence à un objet de CString qui doit stocker la valeur du champ a converti en texte, indépendamment du type de données du champ.
Notes
Vous pouvez rechercher un champ de nom ou par index.Vous pouvez stocker la valeur du champ dans un objet d' CDBVariant ou un objet d' CString .
Si vous avez implémenté l'extraction de lignes en bloc, l'enregistrement en cours est toujours positionné sur le premier enregistrement dans un jeu de lignes.Pour utiliser GetFieldValue sur un enregistrement du jeu de lignes donné, vous devez d'abord appeler la fonction membre de SetRowsetCursorPosition placer le curseur sur la ligne souhaitée dans ce jeu de lignes.Appelez ensuite GetFieldValue pour cette ligne.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 .
Vous pouvez utiliser GetFieldValue pour récupérer dynamiquement des champs au moment de l'exécution plutôt que de manière statique la liaison ils au moment de le design.Par exemple, si vous avez déclaré un objet recordset directement d' CRecordset, vous devez utiliser GetFieldValue pour récupérer les données du champ ; l'record field exchange (bulk RFX), ou le mécanisme RFX en bloc (bulk RFX), n'est pas implémenté.
[!REMARQUE]
Si vous déclarez un objet recordset sans dériver d' CRecordset, n'ont pas la bibliothèque de curseurs ODBC chargée.La bibliothèque de curseurs requiert que le recordset ont au moins une colonne dépendante ; toutefois, lorsque vous utilisez CRecordset directement, aucune des colonnes n'est liée.Les fonctions membres CDatabase::OpenEx et CDatabase::Open contrôlent si la bibliothèque de curseurs est chargée.
GetFieldValue appelle la fonction API ODBC SQLGetData.Si votre gestionnaire affiche la valeur SQL_NO_TOTAL pour la longueur réelle de la valeur de champ, GetFieldValue lève une exception.Pour plus d'informations sur SQLGetData, consultez Kit de développement logiciel Windows.
Exceptions
Cette méthode peut lever des exceptions de type CDBException* et CMemoryException*.
Exemple
L'exemple de code suivant illustre des appels à GetFieldValue d'un objet recordset déclaré directement d' CRecordset.
// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);
// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));
// Create a CDBVariant object to
// store field data
CDBVariant varValue;
// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while(!rs.IsEOF())
{
for(short index = 0; index < nFields; index++)
{
rs.GetFieldValue(index, varValue);
// do something with varValue
}
rs.MoveNext();
}
rs.Close();
db.Close();
[!REMARQUE]
Contrairement à la classe CDaoRecordsetDAO, CRecordset n'a pas une fonction membre d' SetFieldValue .Si vous créez un objet directement d' CRecordset, il est effectivement en lecture seule.
Pour plus d'informations sur l'extraction de lignes en bloc, consultez l'article recordset : Extraction globale d'enregistrements (ODBC).
Configuration requise
Header: afxdb.h