SQL 쿼리를 사용하여 실행 한 다음 결과 집합의 모든 열을 행 방식의 바인딩을 사용하여 SQL_C_WCHAR로 바인딩하는 클래스가 있습니다.정렬 문제를 피하면서 어떻게 ODBC에서 임의의 결과 집합을 행 방식으로 바인딩 할 수 있습니까?
지금 I 그것을 문자의 벡터를 할당하고 다음 SQLBindColumn주고 포인터를 결정하는 수행하는 방법 :
- 버퍼 컬럼 1 = & VEC [0]
- 버퍼에 대한 컬럼의 길이 지시자 1 = & VEC [0] + (는 sizeof (SQLWCHAR) * 1 열의 길이) 열의
- 버퍼 (2) = & VEC [0] + (는 sizeof (SQLWCHAR) * 칼럼 (1)의 길이) + sizeof (길이 표시기) 컬럼의 길이 지시자 10
- 버퍼 (2) = & VEC [0] + (는 sizeof (SQLWCHAR) * 1 열의 길이) +는 sizeof (길이 지시자) + (컬럼 2는 sizeof (SQLWCHAR) * 길이)
등
(SPARC에서) 일부 정렬 문제가 발생합니다. 나는 약간의 패딩을 추가 할 필요가 있음을 알고 있지만, 어떻게 이식 가능한지 계산하는 방법을 모른다.
"SQL_DESC_INDICATOR_PTR 및 SQL_DESC_OCTET_LENGTH_PTR 설명자 필드를 다른 값으로 설정하여 표시기와 길이 값을 별도의 버퍼에 저장할 수 있으며,이 작업을 완료하면 구조에 세 번째 요소가 포함됩니다." 그것은 단지 그들이 struct의 별도 필드에있을 수 있다는 것을 의미하지만, 여전히 동일한 버퍼에 있어야하므로 문제가 해결되지는 않습니다. – Bwmat
나는 그 요점을 놓치고 있다고 생각합니다. 열과 지표를 포함하는 구조를 만듭니다. 그런 다음 행 집합 크기를 결정하고 구조체 N 개를 만들고 배열합니다. 행 바인드 유형을 구조체의 크기로 설정합니다. SQLBindCol을 호출하면 구조체 배열의 첫 번째 행에있는 요소의 주소를 전달합니다. 드라이버가 두 번째 행에 쓸 때 행 바인드 형식 (sizeof 구조체)을 각 열의 SQLBindCol 값 전달에 추가합니다. 그러한 구조는 그 안에 "구멍"을 가질 수 있으며 정렬은 당신에게 달려 있습니다.구조에서 올바른 유형을 사용해야합니다. – bohica
문제는 임의의 결과 집합에 대해 작동해야하며 구조체가 없다는 것입니다. 질문을 다시 읽으면 char 버퍼를 사용하고 있습니다. – Bwmat