Udostępnij za pośrednictwem


CRecordset::GetFieldValue

Pobiera dane z pola w bieżącym rekordzie.

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
    Nazwa pola.

  • varValue
    Odwołanie do CDBVariant obiekt, który będzie przechowywany w polu wartość.

  • nFieldType
    ODBC c typ danych pola.Używanie wartości domyślnej DEFAULT_FIELD_TYPE, siły GetFieldValue w celu określenia typu c danych z typem danych SQL na podstawie poniższej tabeli.W przeciwnym razie można określić dane bezpośrednio wpisz lub wybierz typ danych zgodny; na przykład, można przechowywać dowolny typ danych do SQL_C_CHAR.

    Typ danych c

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

    Aby uzyskać więcej informacji na temat typów danych ODBC, zobacz tematy "Typy danych języka SQL" i "C typów danych" w dodatku d Windows SDK.

  • nIndex
    Indeks pola od zera.

  • strValue
    Odwołanie do CString obiekt, który będzie przechowywać wartość pola są konwertowane na tekst, niezależnie od typu danych pola.

Uwagi

Pola można wyszukiwać według nazwy lub według indeksu.Wartość pola można przechowywać w albo CDBVariant obiektu lub CString obiektu.

Jeśli zaimplementowano pobieranie wiersza luzem, bieżący rekord zawsze jest ustawiony na pierwszy rekord w zestawie wierszy.Aby użyć GetFieldValue rekordu w obrębie danego zestawu wierszy, należy najpierw wywołać SetRowsetCursorPosition Członkowskie funkcji, aby przesunąć kursor do żądanego wiersza w tym wierszy.Następnie wywołać GetFieldValue dla tego wiersza.Aby zaimplementować pobierania wierszy luzem, należy określić CRecordset::useMultiRowFetch opcji dwOptions parametr w Otwórz funkcji składowej.

Można użyć GetFieldValue dynamicznie Fetch pól w czasie działania, zamiast statycznie wiążące je w czasie projektowania.Na przykład, jeśli zostały zadeklarowane obiektu recordset bezpośrednio z CRecordset, należy użyć GetFieldValue do pobierania danych pola; pole rekordu exchange (RFX) lub wymiany pola rekordu luzem (RFX luzem), nie jest zaimplementowana.

[!UWAGA]

Jeśli zadeklarować obiektu recordset bez wynikających z CRecordset, nie mają Biblioteka kursorów ODBC załadowany.Biblioteka kursorów wymaga, że zestaw rekordów mają co najmniej jedną kolumnę związanego; Jednak kiedy używać CRecordset bezpośrednio, Brak kolumn są powiązane.Funkcje składowe CDatabase::OpenEx i CDatabase::Open kontrolować, czy zostanie załadowana Biblioteka kursorów.

GetFieldValuewywołuje funkcję interfejsu API ODBC SQLGetData.Jeśli sterownik Wyświetla wartość SQL_NO_TOTAL rzeczywiste długości wartości pól GetFieldValue zgłasza wyjątek.Więcej informacji o SQLGetData, zobacz Windows SDK.

Wyjątki

Tej metody można zgłosić wyjątków typu CDBException * i CMemoryException*.

Przykład

Następujący przykładowy kod ilustruje wywołania GetFieldValue dla obiektu recordset zadeklarowane bezpośrednio 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();

[!UWAGA]

W odróżnieniu od klasy DAO CDaoRecordset, CRecordset nie ma SetFieldValue funkcji składowej.Jeśli tworzysz obiekt bezpośrednio z CRecordset, jest skuteczne tylko do odczytu.

Aby uzyskać więcej informacji na temat Pobieranie wiersza luzem, zobacz artykuł rekordów: pobieranie rekordów luzem (ODBC).

Wymagania

Nagłówek: afxdb.h

Zobacz też

Informacje

Klasa CRecordset

Diagram hierarchii

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition