다음을 통해 공유


Visual C++ 확장

IADORecordBinding 인터페이스

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

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

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

바인딩 항목

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

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

헤더 파일

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

#include <icrsint.h>

레코드 집합 필드 바인딩

레코드 집합 필드를 C/C++ 변수에 바인딩하려면 다음을 수행합니다.

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

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

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

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

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

인터페이스 메서드

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

구문

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

BindToRecordset(CADORecordBinding *binding)

AddNew 메서드는 레코드 집합에 새 행을 추가하기 위해 해당 이름 지정인 ADO AddNew 메서드를 호출합니다.

AddNew(CADORecordBinding *binding)

Update 메서드는 해당 이름 지정인 ADO Update 메서드를 호출하여 레코드 집합을 업데이트합니다.

Update(CADORecordBinding *binding)

바인딩 항목 매크로

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

매크로 패밀리는 adDate 또는 adBoolean과 같은 고정 길이 데이터, adTinyInt, adInteger 또는 adDouble과 같은 숫자 데이터 및 adChar, adVarChar 또는 adVarBinary와 같은 가변 길이 데이터에 제공됩니다. adVarNumeric을 제외한 모든 숫자 형식도 고정 길이 형식입니다. 각 패밀리에는 관심 없는 바인딩 정보를 제외할 수 있도록 서로 다른 매개 변수 세트가 있습니다.

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

바인딩 항목 시작

BEGIN_ADO_BINDING(클래스)

고정 길이 데이터

ADO_FIXED_LENGTH_ENTRY(서수, DataType, 버퍼, 상태, 수정)

ADO_FIXED_LENGTH_ENTRY2(서수, DataType, 버퍼, 수정)

숫자 데이터

ADO_NUMERIC_ENTRY(서수, DataType, 버퍼, 전체 자릿수, 크기 조정, 상태, 수정)

ADO_NUMERIC_ENTRY2(서수, DataType, 버퍼, 전체 자릿수, 크기 조정, 상태, 수정)

가변 길이 데이터

ADO_VARIABLE_LENGTH_ENTRY(서수, DataType, 버퍼, 크기, 상태, 길이, 수정)

ADO_VARIABLE_LENGTH_ENTRY2(서수, DataType, 버퍼, 크기, 상태, 수정)

ADO_VARIABLE_LENGTH_ENTRY3(서수, DataType, 버퍼, 크기, 길이, 수정)

ADO_VARIABLE_LENGTH_ENTRY4(서수, DataType, 버퍼, 크기, 수정)

바인딩 항목 종료

END_ADO_BINDING()

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

이 변수의 가장 중요한 두 가지 값은 변환에 성공했음을 의미하는 adFldOK와 필드 값이 단순히 비어 있는 것이 아니라 VT_NULL 형식의 VARIANT임을 의미하는 adFldNull입니다.

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

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

상태 값

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

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

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

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

참고 항목

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