Partager via


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

Voir aussi

Référence

Classe de CRecordset

Graphique de la hiérarchie

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition