Sdílet prostřednictvím


CRecordset::GetFieldValue

Načte data pole v aktuálním záznamu.

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  
);

Parametry

  • lpszName
    Název pole.

  • varValue
    Odkaz na CDBVariant objekt, který bude ukládat hodnotu pole.

  • nFieldType
    ODBC c datový typ pole.Pomocí výchozí hodnoty DEFAULT_FIELD_TYPE, vynutí GetFieldValue k určení typu c data z datového typu SQL založené na tabulce.Jinak můžete zadat data přímo zadejte nebo vyberte typ dat kompatibilní; Můžete například uložit libovolný typ dat do SQL_C_CHAR.

    Typ dat c

    Typ dat 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

    Další informace o typech dat ODBC naleznete v tématech "Typů dat SQL" a "C datové typy" v dodatku d .

  • nIndex
    Z nuly vycházející index pole.

  • strValue
    Odkaz na CString objekt, který uloží hodnotu pole převést na text bez ohledu na typ dat.

Poznámky

Pole můžete vyhledávat podle názvu nebo podle indexu.Hodnota pole lze uložit do buď CDBVariant objektu nebo CString objektu.

Pokud provádění hromadných řádek načítání aktuálního záznamu je vždy umístěn na první záznam v sadu řádků.Použití GetFieldValue na záznamu v rámci dané sady řádků musí nejprve volejte SetRowsetCursorPosition členské funkce přesunout kurzor do řádku požadované v rámci této sady řádků.Potom voláním GetFieldValue pro tento řádek.Implementovat načítání hromadné řádku, je nutné zadat CRecordset::useMultiRowFetch možnost dwOptions parametr v otevřených členské funkce.

Můžete použít GetFieldValue dynamicky načítat pole při běhu spíše než staticky je vazba v době návrhu.Například deklarujete objektu recordset přímo z CRecordset , je nutné použít GetFieldValue k načtení dat pole; pole záznamu exchange (RFX) nebo hromadné pole záznamu exchange (hromadné RFX), není implementována.

[!POZNÁMKA]

Pokud deklarujete objektu recordset bez vyplývající z CRecordset , nemají Knihovna kurzorů ODBC načten.Knihovna kurzorů vyžaduje, aby záznamů alespoň jeden sloupec vázaného; však při použití CRecordset přímo, jsou vázány žádné sloupce.Funkce členů CDatabase::OpenEx a CDatabase::Open řídit, zda bude načtena Knihovna kurzorů.

GetFieldValuevolání funkce rozhraní API ODBC Funkce SQLGetData.Pokud ovladač vyprodukuje hodnotu SQL_NO_TOTAL pro skutečná délka hodnoty pole GetFieldValue vyvolá výjimku.Další informace o Funkce SQLGetData, najdete .

Výjimky

Tuto metodu lze vyvolávají výjimky typu CDBException * a CMemoryException* .

Příklad

Následující ukázkový kód ilustruje volání GetFieldValue pro objekt recordset ohlášená přímo z 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();

[!POZNÁMKA]

Na rozdíl od třídy DAO CDaoRecordset , CRecordset nemá SetFieldValue členské funkce.Pokud vytvoříte objekt přímo z CRecordset , je skutečně jen pro čtení.

Další informace o načítání řádků hromadného naleznete v článku záznamů: načítání záznamů hromadné (ODBC).

Požadavky

Záhlaví: afxdb.h

Viz také

Referenční dokumentace

Třída CRecordset

Graf hierarchie

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition