2011-03-14 4 views
0

C에서 ADODB 연결을 사용하고 있습니다.이 코드는 더 많거나 적은 문제가 없지만 쿼리에 대한 결과가 없으면 읽는 중 오류가 발생합니다. 관련 코드 :adodb select 쿼리에서 아무런 결과도 검색하지 않습니다.

__object *con, *rec; 
con = __object_create("ADODB.Connection"); 
if(con!=NULL) con->Open("odbc name"); 
if (con == NULL || con->State==0) 
{ 
    return 0; 
} 
rec= __object_create("ADODB.RecordSet"); 

sprintf(query, "SELECT SUM(column) FROM table WHERE %s", constraint); 
rec->CursorLocation=3; 
rec->Open(query, con, 1, 3); 
float result = rec->Fields(0); // <- Error here 
rec->Close(); 
__object_delete(rec); 
__object_delete(con); 

오류 코드 80020005 (유형 불일치)가 표시됩니다. DB 열은 float 유형입니다. 제약 조건을 만족하는 레코드가 있고 결과가 좋으면 모든 것이 잘 작동합니다. 하지만 레코드가 일치하면 DB 서버는 null을 반환하고 오류가 발생합니다. 다행스럽게도 결과는 0으로 설정되어 있지만 합리적인 결과를 얻고 싶습니다.

표준 방법 (BOF/EOF, 필드 -> 개수, == NULL, ...) 모두 실패합니다. 내가 찾을 수있는 대부분의 코드 샘플은 VB가 아니기 때문에 C가 아니므로 실제로 도움이되지 않습니다.

답변

1

rec->Fields(0).Value은 variant가 float 변수에 할당되기 전에 variant를 반환합니다.이 variant가 반환 된 데이터가 NULL임을 나타내는 VT_NULL을 나타내는 지 확인합니다.