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