TN043: RFX 루틴

이 노트 레코드 필드 RFX (교환) 아키텍처에 설명 합니다. 그것은 또한 RFX_ 프로시저를 작성 하는 방법을 설명 합니다.

레코드 필드 교환의 개요

모든 recordset 필드 함수는 c + + 코드와 함께 완료 됩니다. 거기에 특별 한 자원 또는 마법의 매크로. 메커니즘의 마음 모든 파생된 레코드 집합 클래스에서 재정의 해야 하는 가상 함수입니다. 그것은 항상이 양식에서 발견:

void CMySet::DoFieldExchange (CFieldExchange * pFX)
{
  //{{AFX_FIELD_MAP(CMySet)
  lt; recordset exchange 필드 형식 전화 >
  < recordset exchange 함수 호출 >
  //}}AFX_FIELD_MAP
}

특별 한 형식 AFX 의견 허용 Classwizard를 찾아이 함수 내의 코드를 편집 합니다. 코드 마법사와 호환 되지 않는 특수 형식 의견의 외부 배치 되어야 합니다.

위의 예에서 lt; recordset_exchange_field_type_call > 형태입니다:

pFX gt;SetFieldType(CFieldExchange::outputColumn)(&G)

그리고 lt; recordset_exchange_function_call > 형태입니다:

RFX_Custom (pFX, "Col2", m_Col2)

대부분의 RFX_ 함수 3가 인수 위에 표시 된 것과 같이 있지만 일부 (예: RFX_Text 및 RFX_Binary)는 추가 선택적 인수。

하나 이상의 RFX_ 각 DoDataExchange 함수에 포함 될 수 있습니다.

'Afxdb.h' 모든 recordset 필드 교환 루틴의 MFC와 함께 제공 된 목록에 대 한 참조。

Recordset 필드 전화는 CMySet 클래스에 대 한 필드 데이터를 저장할 메모리 위치 (일반적으로 데이터 멤버) 등록 방법。

노트

Recordset 필드 함수는 CRecordset 클래스 에서만 작동 하도록 설계 되었습니다. 그들은 다른 MFC 클래스에서 일반적으로 사용할 수。

데이터의 초기 값 설정 된 블록에 일반적으로 표준 c + + 생성자에서 //{{AFX_FIELD_INIT(CMylSet) 및 //}}AFX_FIELD_INIT 댓글。

각 RFX_ 함수에서 필드 필드 편집을 위한 준비에 보관 필드의 더러운 상태 반환에 이르기까지 다양 한 작업을 지원 해야 합니다.

(예를 들어 SetFieldNull, IsFieldDirty) DoFieldExchange 를 호출 하는 각 함수는 DoFieldExchange 를 호출 자체 초기화。

그것은 어떻게 작동 합니까?

레코드 필드 교환 사용 하기 위해서는 다음을 이해 해야 하는 것은 없습니다. 그러나 이해 하면 도움이 될 것입니다이 장면 뒤에 작동 하는 방법 당신의 자신의 exchange 프로시저를 작성 하는,。

DoFieldExchange 멤버 함수를 사용 하면 Serialize 멤버 함수 처럼 많지는-점점 또는 설정 데이터/에서/클래스의 회원 데이터 (이 경우 열에 ODBC 쿼리 결과에서) 외부 형식에서 하는 작업을 담당 합니다. PFX 매개 변수 데이터를 교환 하 고 컨텍스트 이며 CArchive 매개 변수 CObject::Serialize를 비슷합니다. PFX ( CFieldExchange 개체) 비슷한, 하지만 CArchive 방향 일반화 플래그는 작업 표시기를 하고있다. RFX 함수는 다음과 같은 작업을 지원 하도록 할 수 있습니다.

사용자 확장

여러 가지 방법으로 기본 RFX 메커니즘을 확장할 수 있습니다. 당신은 할 수 있어요

메모nbsp;??이러한 코드 Classwizard는 편집할 수 없습니다 및 특수 형식 의견의 외부만 사용 한다(&N)。

사용자 지정 RFX를 작성

자신의 사용자 지정 RFX 함수를 작성 하려면 기존 RFX 함수를 복사 하 고 자신의 목적을 수정 하는 것이 좋습니다. 복사할 오른쪽 RFX를 선택 하면 귀하의 직업 훨씬 쉽게 만들 수 있습니다. 일부 RFX 함수는 복사를 결정할 때 계정으로 수행 해야 하는 몇 가지 고유한 속성。

RFX_Long 및 RFX_Int:

이들은 단순한 RFX 함수입니다. 데이터 값에는 어떤 특별 한 해석, 필요 하지 않습니다 및 데이터 크기 고정。

RFX_Single 및 RFX_Double:

RFX_Long 및 RFX_Int 위의 처럼 이러한 기능은 간단 하 고 만들 수 있는 기본 구현의 광범위 하 게 사용 합니다. 그러나 그들은에 저장 됩니다 dbflt.cpp 대신 dbrfx.cpp,, 그들은 명시적으로 참조 하는 경우에 포인트 라이브러리를 부동 런타임 로드를 사용 하려면。

RFX_Text 및 RFX_Binary:

이러한 두 가지 기능 문자열/이진 정보를 저장 하는 정적 버퍼 미리 할당 하 고 등록 하는 대신 ODBC Sqlbindcol와 이러한 버퍼를 등록 해야 합니다 amp; 값. 때문에 이러한 두 함수는 특수 경우 코드의 많은(&A)。

RFX_Date:

ODBC는 그들의 자신의 TIMESTAMP_STRUCT 데이터 구조에 날짜 및 시간 정보를 반환합니다. 동적으로이 함수는 날짜 시간 데이터 송수신에 대 한 "프록시"로 TIMESTAMP_STRUCT을 할당 합니다. 다양 한 작업 c + + CTime 개체와 TIMESTAMP_STRUCT 프록시 간의 날짜 및 시간 정보를 전송 해야 합니다. 말할 필요도 없이,이이 기능을 상당히 복잡 하지만, 그것은 데이터 전송에 대 한 프록시를 사용 하는 방법의 좋은 예。

RFX_LongBinary:

이것은 유일한 클래스 라이브러리 RFX 함수는 데이터를 보내고 받는 데 열 바인딩을 사용 하지 않습니다. 이 함수 BindFieldToColumn 작업을 무시 하 고 대신, 수정 작업 동안 들어오는 SQL_LONGVARCHAR 또는 SQL_LONGVARBINARY 데이터를 저장할 저장소를 할당 다음 할당 된 스토리지로 값을 검색 하려면 SQLGetData 호출을 수행. 데이터 값 데이터 소스 (즉 NameValue 및 값 작업)에 다시 보낼 준비를 할 때이 함수는 ODBC의 DATA_AT_EXEC 기능을 사용 합니다. SQL_LONGVARBINARY 및 SQL_LONGVARCHARs 작업에 대 한 자세한 내용은 기술 노트 45 참조。

RFX_ 함수를 작성할 때 CFieldExchange::Default 를 사용 하 여 주어진된 작업을 구현할 수 종종 합니다. 작업에 대 한 기본 구현 좀 봐. 그것은 당신이 RFX_ 함수에 작성 하는 것이 작업을 수행 하는 경우에 위임할 수 있습니다에서 CFieldExchange::Default. Dbrfx.cpp에서 CFieldExchange::Default 를 호출의 예를 볼 수 있습니다.

그것은 RFX 함수 시작 IsFieldType 를 호출 하 고 FALSE를 반환 하는 경우 즉시 반환 하는 것이 중요 합니다. 이 메커니즘 ( outputColumn BindParam 전화)와 같은 outputColumns, 그리고 반대로 수행 되지 매개 변수 작업을 유지 합니다. 또한, IsFieldType 자동으로 계속 추적의 outputColumns (m_nFields) 및 params (m_nParams)의 개수。

기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)

Index