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++ 변수에 레코드 집합 필드를 바인딩하려면
CADORecordBinding 클래스에서 파생된 클래스를 만듭니다.
파생 클래스에서 바인딩 항목 및 해당 C/C++ 변수를 지정합니다. BEGIN_ADO_BINDING 매크로와 END_ADO_BINDING 매크로 사이의 바인딩 항목을 대괄호로 묶습니다. 매크로를 쉼표나 세미콜론으로 종료하지 마세요. 적절한 구분 기호는 각 매크로에 의해 자동으로 지정됩니다.
C/C++ 변수에 매핑할 각 필드에 대해 하나의 바인딩 항목을 지정합니다. 매크로의 ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY또는 ADO_VARIABLE_LENGTH_ENTRY 패밀리에서 적절한 멤버를 사용합니다.
애플리케이션에서 CADORecordBinding파생된 클래스의 인스턴스를 만듭니다. Recordset에서 IADORecordBinding 인터페이스를 가져옵니다. 그런 다음 BindToRecordset 메서드를 호출하여 Recordset 필드를 C/C++ 변수에 바인딩합니다.
자세한 내용은 Visual C++ 확장 예제참조하세요.
인터페이스 메서드
IADORecordBinding 인터페이스에는 BindToRecordset, AddNew및 업데이트세 가지 메서드가 있습니다. 각 메서드의 유일한 인수는 CADORecordBinding파생된 클래스의 인스턴스에 대한 포인터입니다. 따라서 AddNew 및 Update 메서드는 해당 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 | 업데이트할 때 기본값이 사용되었습니다. |