다음을 통해 공유


CRecordset::GetFieldValue

현재 레코드의 필드 데이터를 검색합니다.

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

매개 변수

  • lpszName
    필드의 이름입니다.

  • varValue
    참조 하는 CDBVariant 필드의 값을 저장 하는 개체입니다.

  • nFieldType
    ODBC C 데이터 형식 필드입니다.기본값을 사용 하 여 DEFAULT_FIELD_TYPE를 강제로 GetFieldValue 다음 테이블에 따라 C 데이터 형식에서 SQL 데이터 형식 결정 합니다.그렇지 않으면 데이터 직접 입력 하거나 호환 되는 데이터 유형을 지정할 수 있습니다. 임의의 데이터 형식으로 저장할 수 있습니다 예를 들어, 사용자 SQL_C_CHAR.

    C 데이터 형식

    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

    ODBC 데이터 형식에 대 한 자세한 내용은 항목 "데이터 형식 SQL" 및 "C 데이터 형식"의 부록 D에는 Windows SDK.

  • nIndex
    필드의 인덱스입니다.

  • strValue
    참조 하는 CString 필드의 값을 저장 하는 개체를 변환 하는 텍스트 필드의 데이터 형식에 관계 없이.

설명

이름 또는 인덱스 필드를 찾을 수 있습니다.필드 값을 저장할 수 있는 CDBVariant 개체 또는 CString 개체.

대량 행 페치를 구현한 경우 현재 레코드가 첫 번째 레코드에서 행 집합에 항상 배치 됩니다.사용 GetFieldValue 주어진된 행 집합 내에서 레코드를 먼저 호출 해야는 SetRowsetCursorPosition 멤버 함수를 원하는 해당 행 집합 내의 행에 커서를 이동 합니다.다음 호출 GetFieldValue 해당 행에 대 한.대량 행 페치를 구현 하려면 사용자 지정 해야는 CRecordset::useMultiRowFetch 옵션의의 dwOptions 매개 변수는 열려 멤버 함수.

사용할 수 있는 GetFieldValue 필드에 정적을 디자인 타임에 바인딩 대신 런타임에 동적으로 가져오려고 합니다.예를 들어 recordset 개체에서 직접 선언한 CRecordset를 사용 해야 GetFieldValue 필드 데이터를 검색 하려면 레코드 필드 교환 (RFX) 또는 (Bulk RFX) 대량 레코드 필드 교환을 구현 되지 않았습니다.

[!참고]

파생 하지 않고 레코드 집합 개체를 선언 하는 경우 CRecordset, ODBC 커서 라이브러리가 로드 되지 않은.커서 라이브러리 레코드 집합 바운드 열이 적어도 하나 있어야 합니다. 그러나 사용 CRecordset 직접 열의 바인딩됩니다.멤버 함수 CDatabase::OpenExCDatabase::Open 커서 라이브러리 로드 여부를 제어 합니다.

GetFieldValueODBC API 함수를 호출 합니다. SQLGetData.드라이버 값을 출력 하는 경우 SQL_NO_TOTAL 필드 값의 실제 길이 대 한 GetFieldValue 예외를 throw 합니다.에 대 한 자세한 내용은 SQLGetData를 참조 하십시오의 Windows SDK.

예외

이 메서드가 형식의 예외를 throw 할 수 있습니다 CDBException *CMemoryException*.

예제

호출을 다음 예제 코드를 보여 줍니다. GetFieldValue recordset 개체에서 직접 선언에 대 한 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();

[!참고]

DAO 클래스와는 달리 CDaoRecordset, CRecordset 없는 한 SetFieldValue 멤버 함수입니다.직접 개체를 만드는 경우 CRecordset을 효과적으로 읽기 전용입니다.

대량 행 페칭 (fetching) 하는 방법에 대 한 자세한 내용은 레코드 집합: 레코드 페치 대량 (ODBC).

요구 사항

헤더: afxdb.h

참고 항목

참조

CRecordset 클래스

계층 구조 차트

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition