CRecordset::GetFieldValue

public static void GetFieldValue (LPCTSTR lpszNameCDBVariantamp; varValuebrevinFieldType= DEF&AULT_FIELD_TYPE);
gettare (CDBException, CMemoryException);

public static void GetFieldValue (breve nIndexCDBVariantamp; varValuebrevinFieldType= DEF&AULT_FIELD_TYPE);
gettare (CDBException, CMemoryException);

public st&atic void GetFieldValue (LPCTSTR lpszNameCStringamp;strValue );
tiro (CDBException, CMemoryException);

public st&atic void GetFieldValue (breve nIndexCStringamp;strValue );
tiro (CDBException, CMemoryException);

Parametri

lpszName

Il nome di un campo.

varValue

Un riferimento a un oggetto CDBVariant che memorizza il valore del campo.

nFieldType

Il tipo di dati ODBC C del campo. Utilizzando il valore predefinito, DEFAULT_FIELD_TYPE, forze GetFieldValue per determinare il tipo di dati c dal tipo di dati SQL, sulla base della tabella seguente. In caso contrario, è possibile specificare i dati digitare direttamente oppure scegliere un tipo di dati compatibile; ad esempio, è possibile memorizzare qualsiasi tipo di dati in SQL_C_CHAR.

Tipo di dati c Tipo di dati 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

Per ulteriori informazioni sui tipi di dati ODBC, vedere gli argomenti "Tipi di dati SQL" e "C i tipi di dati" nell'appendice d il riferimento di ODBC SDK Programmer.

nIndex

L'indice del campo.

strValue

Un riferimento a un oggetto CString che memorizza il valore del campo convertito in testo, indipendentemente dal tipo di dati del campo.

Osservazioni

Chiamare questa funzione membro per recuperare i dati di campo del record corrente. È possibile cercare un campo per nome o per indice. È possibile memorizzare il valore del campo in un oggetto CDBVariant o un oggetto CString.

Se è stato implementato il recupero di massa di fila, il record corrente viene sempre posizionato sul primo record in un set di righe. Per utilizzare GetFieldValue su un record all'interno di un determinato set di righe, è necessario innanzitutto chiamare la funzione membro SetRowsetCursorPosition per spostare il cursore sulla riga desiderato all'interno di tale set di righe. Quindi chiamare GetFieldValue per tale riga. Per implementare il recupero di massa di righe, è necessario specificare l'opzione CRecordset:: useMultiRowFetch del parametro dwOptions nella funzione membro Open.

È possibile utilizzare GetFieldValue per recuperare in modo dinamico i campi alla fase di esecuzione, piuttosto che statico associandole in fase di progettazione. Ad esempio, se si hanno dichiarato un oggetto recordset direttamente da CRecordset, è necessario utilizzare GetFieldValue per recuperare i dati del campo; campi di record (RFX) o alla rinfusa exchange campi di record (RFX di massa), non è stato implementato.

&Notanbsp;  Se si dichiara un oggetto recordset senza derivanti da CRecordset, non hanno caricato la libreria di cursori ODBC. La libreria di cursori richiede che il recordset abbiano almeno una colonna associata; Tuttavia, quando si utilizza direttamente CRecordset , nessuna delle colonne sono vincolata. Il membro funzioni controllo CDatabase::OpenEx e CDatabase:: Open , se verrà caricata la libreria di cursori.

GetFieldValue chiama la funzione API ODBC SQLGetData. Se il driver restituisce il valore SQL_NO_TOTAL per la durata effettiva del valore del campo, GetFieldValue genera un'eccezione. Per ulteriori informazioni su SQLGetData, vedere ODBC SDK Programmer di riferimento.

Esempio

Nell'esempio di codice seguente vengono illustrate le chiamate a GetFieldValue per un oggetto recordset dichiarato direttamente da CRecordset.

/ / Creare e aprire un oggetto di database;
/ / non caricare la libreria di cursori
Db CDatabase;
DB.OpenEx (NULL, CDatabase::forceOdbcDialog);

/ / Creare e aprire un oggetto recordset
/ / direttamente da CRecordset. Si noti che un
/ / tabella deve essere presente in un database collegato.
/ / Utilizzare recordset di tipo forwardOnly per meglio
/ / prestazioni, poiché solo MoveNext è necessaria
CRecordset rs (amp; db);
RS.Aprire (CRecordset::forwardOnly,
         T ("Seleziona * da SomeTable"));

/ / Crea un oggetto CDBVariant per
/ / store campo dati
CDBVariant varValue;

/ / Loop through del recordset,
/ / utilizzare GetFieldValue e
/ / GetODBCFieldCount per recuperare
/ / dati in tutte le colonne
breve nCampi = rs.GetODBCFieldCount ();
mentre (! rs.IsEOF ())
{
   per (breve indice = 0; indice < nCampi; indice + +)
   {
      RS.GetFieldValue (index, varValue);
      / / fare qualcosa con varValue
   }
   RS.MoveNext ();
}

RS.Close ();
DB.(Chiudi)

&Notanbsp;  A differenza della classe DAO CDaoRecordset, CRecordset non dispone di una funzione membro SetFieldValue . Se si crea un oggetto direttamente da CRecordset, esso è in sola lettura.

Per ulteriori informazioni sul recupero di massa di righe, vedere l'articolo Recordset: recupero Records in Bulk (ODBC) nel manuale del programmatore di Visual C++.

Pa&noramica CRecordset |nbsp; Membri della classe | Gerarchia Chart

Vedere a&nchenbsp;CRecordset::DoFieldExchange, CRecordset::DoBulkFieldExchange, CRecordset::GetODBCFieldCount, CRecordset::GetODBCFieldInfo, CRecordset::SetRowsetCursorPosition

Index