다음을 통해 공유


Visual C++ 확장

IADORecordBinding 인터페이스

ADO용 Microsoft Visual C++ 확장은 Recordset 개체의 필드를 C/C++ 변수에 연결하거나 바인딩합니다. 바인딩된 Recordset의 현재 행이 변경될 때마다Recordset 모든 바인딩된 필드가 C/C++ 변수에 복사됩니다. 필요한 경우 복사된 데이터는 C/C++ 변수의 선언된 데이터 형식으로 변환됩니다.

IADORecordBinding 인터페이스의 BindToRecordset 메서드는 필드를 C/C++ 변수에 바인딩합니다. AddNew 메서드는 바인딩된 Recordset새 행을 추가합니다. Update 메서드는 Recordset새 행의 필드를 채우거나 기존 행의 필드를 C/C++ 변수 값으로 업데이트합니다.

IADORecordBinding 인터페이스는 Recordset 개체에 의해 구현됩니다. 직접 구현을 코딩하지 않습니다.

바인딩 항목

ADO용 Visual C++ 확장은 Recordset 개체의 필드를 C/C++ 변수에 매핑합니다. 필드와 변수 간의 매핑 정의를 바인딩 항목이라고 합니다. 매크로는 숫자, 고정 길이 및 가변 길이 데이터에 대한 바인딩 항목을 제공합니다. 바인딩 항목 및 C/C++ 변수는 VISUAL C++ Extensions 클래스에서 파생된 클래스에서 선언되며 CADORecordBinding . CADORecordBinding 클래스는 바인딩 항목 매크로에 의해 내부적으로 정의됩니다.

ADO는 이러한 매크로의 매개 변수를 내부적으로 OLE DB DBBINDING 구조에 매핑하고 OLE DB Accessor 개체를 만들어 필드와 변수 간의 데이터 이동 및 변환을 관리합니다. OLE DB는 데이터를 세 부분으로 구성하여 정의합니다. 즉, 데이터가 저장되는 버퍼. 필드가 버퍼에 성공적으로 저장되었는지 또는 변수를 필드로 복원해야 하는지를 나타내는 상태. 및 데이터의 길이. 자세한 내용은 OLE DB 프로그래머 참조에서 OLE DB(데이터 가져오기 및 설정)참조하세요.

헤더 파일

ADO용 Visual C++ 확장을 사용하려면 애플리케이션에 다음 파일을 포함합니다.

#include <icrsint.h>

바인딩된 레코드셋 필드

C/C++ 변수에 레코드 집합 필드를 바인딩하려면

  1. CADORecordBinding 클래스에서 파생된 클래스를 만듭니다.

  2. 파생 클래스에서 바인딩 항목 및 해당 C/C++ 변수를 지정합니다. BEGIN_ADO_BINDING 매크로와 END_ADO_BINDING 매크로 사이의 바인딩 항목을 대괄호로 묶습니다. 매크로를 쉼표나 세미콜론으로 종료하지 마세요. 적절한 구분 기호는 각 매크로에 의해 자동으로 지정됩니다.

    C/C++ 변수에 매핑할 각 필드에 대해 하나의 바인딩 항목을 지정합니다. 매크로의 ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY또는 ADO_VARIABLE_LENGTH_ENTRY 패밀리에서 적절한 멤버를 사용합니다.

  3. 애플리케이션에서 CADORecordBinding파생된 클래스의 인스턴스를 만듭니다. Recordset에서 IADORecordBinding 인터페이스를 가져옵니다. 그런 다음 BindToRecordset 메서드를 호출하여 Recordset 필드를 C/C++ 변수에 바인딩합니다.

자세한 내용은 Visual C++ 확장 예제참조하세요.

인터페이스 메서드

IADORecordBinding 인터페이스에는 BindToRecordset, AddNew업데이트세 가지 메서드가 있습니다. 각 메서드의 유일한 인수는 CADORecordBinding파생된 클래스의 인스턴스에 대한 포인터입니다. 따라서 AddNewUpdate 메서드는 해당 ADO 메서드 이름에 대한 매개 변수를 지정할 수 없습니다.

통사론

BindToRecordset 메서드는 Recordset 필드를 C/C++ 변수와 연결합니다.

BindToRecordset(CADORecordBinding *binding)

AddNew 메서드는 ADO AddNew 메서드라는 이름을 호출하여 Recordset새 행을 추가합니다.

AddNew(CADORecordBinding *binding)

Update 메서드는 이름 지정인 ADO Update 메서드를 호출하여 Recordset업데이트합니다.

Update(CADORecordBinding *binding)

바인딩 엔트리 매크로

바인딩 항목 매크로는 Recordset 필드와 변수의 연결을 정의합니다. 시작 및 끝 매크로는 바인딩 항목 집합을 구분합니다.

매크로 패밀리는 adDate 또는 adBoolean같은 고정 길이 데이터에 대해 제공됩니다. 숫자 데이터(예: adTinyInt, adInteger또는 adDouble; 및 가변 길이 데이터(예: adChar, adVarChar 또는 adVarBinary. adVarNumeric 제외한 모든 숫자 형식도 고정 길이 형식입니다. 각 패밀리에는 서로 다른 매개 변수 집합이 있으므로 관심 없는 바인딩 정보를 제외할 수 있습니다.

자세한 내용은 OLE DB 프로그래머 참조의 부록 A:데이터 형식을 참조하세요.

바인딩 항목 시작

BEGIN_ADO_BINDING(클래스)

Fixed-Length 데이터

ADO_FIXED_LENGTH_ENTRY(서수, 데이터 타입, 버퍼, 상태, 수정)

ADO_FIXED_LENGTH_ENTRY2(서수, 데이터 유형, 버퍼,수정)

숫자 데이터

ADO_NUMERIC_ENTRY(서수, DataType, 버퍼, 정밀도, 소수 자릿수, 상태,수정)

ADO_NUMERIC_ENTRY2(서수, DataType, Buffer, Precision, Scale, Modify)

Variable-Length 데이터

ADO_VARIABLE_LENGTH_ENTRY(서수, 데이터 유형, 버퍼, 크기, 상태, 길이,수정)

ADO_VARIABLE_LENGTH_ENTRY2(서수, 데이터 유형, 버퍼, 크기, 상태, 수정)

ADO_VARIABLE_LENGTH_ENTRY3(순번, 데이터 타입, 버퍼, 크기, 길이, 수정)

ADO_VARIABLE_LENGTH_ENTRY4(서수, 데이터 유형, 버퍼, 크기, 수정 사항)

최종 바인딩 항목

END_ADO_BINDING()

매개 변수 묘사
클래스 바인딩 항목 및 C/C++ 변수가 정의된 클래스입니다.
서수 C/C++ 변수에 해당하는 레코드셋 필드의 첫 번째부터 시작하는 서수 번호입니다.
데이터 타입 C/C++ 변수에 해당하는 ADO 데이터 형식(유효한 데이터 형식 목록은 DataTypeEnum 참조). 필요한 경우 레코드 집합 필드의 값이 이 데이터 형식으로 변환됩니다.
버퍼 Recordset 필드가 저장될 C/C++ 변수의 이름입니다.
크기 버퍼의 최대 바이트 크기. 버퍼 가변 길이 문자열을 포함하는 경우 종료 0을 위한 공간을 허용합니다.
상태 Buffer 내용이 유효한지 여부와 필드를 DataType 변환에 성공했는지 여부를 나타내는 변수의 이름입니다.

이 변수에서 가장 중요한 두 가지 값은 adFldOK이며, 이는 변환이 성공했음을 의미합니다. 그리고 adFldNull는 필드의 값이 단순히 비어 있는 것이 아니라 VT_NULL 유형의 VARIANT임을 의미합니다.

상태 가능한 값은 다음 표 "상태 값"에 나열됩니다.
수정 부울 플래그; TRUE이면 ADO가 해당 레코드 집합 필드를 Buffer포함된 값으로 업데이트할 수 있음을 나타냅니다.

부울 매개 변수를 TRUE로 수정하여 ADO가 바운드 필드를 업데이트할 수 있도록 설정하고, 필드를 검사하지만 변경하지 않으려면 FALSE를 설정합니다.
정밀도 숫자 변수에 나타낼 수 있는 숫자 수입니다.
크기 조정 수치 변수의 소수 자릿수입니다.
길이 Buffer데이터의 실제 길이를 포함하는 4 바이트 변수의 이름입니다.

상태 값

상태 변수의 값은 필드가 변수에 성공적으로 복사되었는지 여부를 나타냅니다.

데이터를 설정할 때, 상태adFldNull로 설정하여 레코드 집합 필드를 null로 설정해야 함을 나타낼 수 있습니다.

상수 설명
adFldOK 0 null이 아닌 필드 값이 반환되었습니다.
adFldBadAccessor 1 바인딩이 잘못되었습니다.
adFldCantConvertValue 2 부호 불일치 또는 데이터 오버플로 이외의 이유로 값을 변환할 수 없습니다.
adFldNull 3 필드를 가져오는 경우 null 값이 반환되었음을 나타냅니다.

필드를 설정할 때 필드가 NULL 자체(예: 문자 배열 또는 정수) 인코딩할 수 없는 경우 필드가 NULL 설정되어야 했음을 나타냅니다.
adFldTruncated 4 가변 길이 데이터 또는 숫자가 잘렸습니다.
adFldSignMismatch 5 값이 서명되고 변수 데이터 형식이 서명되지 않습니다.
adFldDataOverFlow 6 값이 변수 데이터 형식에 저장할 수 있는 것보다 큽합니다.
adFldCantCreate 7 알 수 없는 열 형식 및 필드가 이미 열려 있습니다.
adFldUnavailable 8 예를 들어 기본값이 없는 할당되지 않은 새 필드에서 필드 값을 확인할 수 없습니다.
adFldPermissionDenied 9 업데이트할 때는 데이터를 쓸 수 있는 권한이 없습니다.
무결성 위반 10 업데이트할 때 필드 값은 열 무결성을 위반합니다.
adFldSchema위반 11 업데이트할 때 필드 값은 열 스키마를 위반합니다.
adFldBadStatus 12 업데이트할 때 잘못된 상태 매개 변수입니다.
adFldDefault 13 업데이트할 때 기본값이 사용되었습니다.

참고 항목

Visual C++ 확장 예제Visual C++ 확장 헤더