CRecordset::GetFieldValue

void GetFieldValue (LPCTSTR lpszNameCDBVariantamp ; valeurvarcourtnFieldType= DEF&AULT_FIELD_TYPE);
jeter (CDBException, CMemoryException) ;

void GetFieldValue (court nIndexCDBVariantamp ; valeurvarcourtnFieldType= DEF&AULT_FIELD_TYPE);
jeter (CDBException, CMemoryException) ;

void GetFieldV&alue (LPCTSTR lpszNameCStringamp ;strValue );
lancer (CDBException, CMemoryException);

void GetFieldV&alue (court nIndexCStringamp ;strValue );
lancer (CDBException, CMemoryException);

Paramètres

lpszName

Le nom d'un champ.

e varValu

Une référence à un objet CDBVariant qui va stocker la valeur du champ.

nFieldType

Le type de données C ODBC du champ. À l'aide de la valeur par défaut, DEFAULT_FIELD_TYPE, les forces GetFieldValue pour déterminer le type de données c de type de données SQL, basé sur le tableau suivant. Sinon, vous pouvez spécifier les données de type directement ou choisissent 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_FLOAT
SQL_DOUBLE
SQL_C_TIMESTAMP SQL_DATE
SQL_TIME
SQL_TIMESTAMP
SQL_C_CHAR SQL_NUMERIC
SQL_DECIMAL
SQL_BIGINT
SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_C_BINARY SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY

Pour plus d'informations sur les types de données ODBC, consultez les rubriques « Types de données SQL » et « Types de données de la C » de l'annexe d de la référence du programmeur ODBC SDK.

nIndex

Index de base zéro du champ.

strValue

Une référence à un objet CString qui va stocker la valeur du champ converti en texte, indépendamment du type de données du champ.

Remarques

Appelez cette fonction membre pour récupérer les données du champ dans l'enregistrement en cours. Vous pouvez rechercher un terrain par son nom ou par index. Vous pouvez stocker la valeur du champ dans un objet CDBVariant ou d'un objet CString.

Si vous avez implémenté d'extraction de lignes en bloc, l'enregistrement en cours est toujours placé sur le premier enregistrement dans un jeu de lignes. Pour utiliser GetFieldValue sur un enregistrement dans un jeu de lignes donné, vous devez tout d'abord appeler la fonction membre SetRowsetCursorPosition pour déplacer le curseur sur la ligne souhaitée dans ce jeu de lignes. Ensuite, appelez GetFieldValue pour cette ligne. Pour mettre en œuvre la ligne en vrac de l'extraction, vous devez spécifier l'option CRecordset::useMultiRowFetch du paramètre dwOptions de la fonction membre Open.

Vous pouvez utiliser GetFieldValue pour extraire des champs dynamiquement au moment de l'exécution, plutôt que de les lier statiquement au moment du design. Par exemple, si vous avez déclaré un objet recordset directement à partir de CRecordset, vous devez utiliser GetFieldValue pour récupérer les données du champ ; record field exchange (RFX), ou en vrac record field exchange (RFX en bloc), n'est pas implémentée.

&Notenbsp ;  Si vous déclarez un objet recordset sans dériver de CRecordset, n'ont pas la bibliothèque de curseurs ODBC chargés. La bibliothèque de curseurs exige que le jeu d'enregistrements au moins une colonne liée ; Toutefois, lorsque vous utilisez directement CRecordset , aucune des colonnes sont liés. Les fonctions membres CDatabase::OpenEx et CDatabase::Open contrôle si la bibliothèque de curseurs sera chargée.

GetFieldValue appelle la fonction API ODBC SQLGetData. Si votre pilote de sortie la valeur SQL_NO_TOTAL pour la longueur réelle de la valeur du champ, GetFieldValue lève une exception. Pour plus d'informations sur SQLGetData, voir la référence du programmeur ODBC SDK.

Exemple

L'exemple de code suivant illustre les appels à GetFieldValue pour un objet recordset déclaré directement à partir de CRecordset.

/ / Créer et ouvrir un objet de base de données ;
/ / ne charge pas la bibliothèque de curseurs
CDatabase db ;
DB.OpenEx (NULL, CDatabase::forceOdbcDialog) ;

/ / Créer et ouvrir un objet recordset
/ / directement à partir de CRecordset. Notez qu'une
/ / table doit exister dans une base de données connectée.
/ / Utiliser le type d'enregistrements ForwardOnly pour mieux
/ / performance, étant donné seulement MoveNext est requis
CRecordset rs (amp ; db) ;
RS.Ouvrir (CRecordset::forwardOnly,
         _T ("SELECT * de SomeTable")) ;

/ / Créer un objet CDBVariant
/ / stocker des données de terrain
CDBVariant varValue ;

/ / Boucle dans le jeu d'enregistrements,
/ / à l'aide de GetFieldValue et
/ / GetODBCFieldCount pour récupérer
/ / données dans toutes les colonnes
court nFields = rs.GetODBCFieldCount () ;
alors que (! rs.IsEOF ())
{
   pour (court indice = 0; index < nFields ; index ++)
   {
      RS.GetFieldValue (index, varValue) ;
      / / faire quelque chose avec valeurvar
   }
   RS.MoveNext () ;
}

RS.Étroite () ;
DB.Étroite)

&Notenbsp ;  Contrairement à la classe DAO CDaoRecordset, CRecordset ne dispose pas d'une fonction de membre SetFieldValue . Si vous créez un objet directement à partir de CRecordset, c'est effectivement en lecture seule.

Pour plus d'informations sur l'extraction de lignes en bloc, consultez l'article jeu d'enregistrements : extraction de dossiers en vrac (ODBC) dans le Guide du programmeur Visual C++.

Aperçu de CRecordset |  ; Membres de la classe | Graphique de la hiérarchie

Voir aussi  ;CRecordset::DoFieldExchange, CRecordset::DoBulkFieldExchange, CRecordset::GetODBCFieldCount, CRecordset::GetODBCFieldInfo, CRecordset::SetRowsetCursorPosition

Index