해결 되었습니다.
문제에 대해서 이해를 하려면 좀 더 공부를 해 봐야겠지만 문제는 업데이트 statement 핸들을 해제가 되지 않아서 였던것 같습니다.
statement 핸들은 해제하기 위해 DSQL_Close 를 사용하여 아래와 같이 수행을 하였는데
isc_dsql_free_statement( status, &stmt, DSQL_close )
이 구문에서 아래와 같은 에러가 발생하더군요.
-501 - The cursor identified in a FETCH or CLOSE statement is not open.
statement 해제를 위해 DSQL_close 대신 DSQL_drop 을 사용하니 해제가 되고 몇 번을 수행을 하여도 정확한 레코드 수를 얻을 수 있었습니다.
부족한 자료로 공부를 하여다 보니 여기저기 막히는 곳이 많군요. 아믛든 관심있는 답변 감사드립니다.
멀고도험한길 님이 쓰신 글 :
: 1. isc_dsql_allocate_statement 실행후
: 2. 질문하신 업데이트 질의 문 수행 후 반영된 레코드 수 알아오기
: 3. isc_dsql_free_statement( status, &stmt, DSQL_close );
: 순서대로 진행되어야 하는게 아닌지요.
: c로 개발하지않아서 저도잘~
:
: pCur++;
: length = isc_vax_integer(pCur, 2); /* normally 29 bytes */
: pCur += 2;
:
: while(*pCur != 1)
: {
: switch(*pCur)
: {
: case isc_info_req_select_count:
: pCur++;
: length = isc_vax_integer(pCur, 2);
: pCur += 2;
: sel_count = isc_vax_integer(pCur, length);
: pCur += length;
: break;
: }
: }
:
: 위부분이 제가 개발한 코드와좀다릅니다.
: isc_dsql_sql_info( status, &stmt, sizeof(info_count), info_count, sizeof(result), result );
:
: >> 제가 사용하는 코드 isc_dsql_sql_info( status, &stmt, 1, 0x23, sizeof(result), result );
: 를 호출하면
: result에 값이할당됩니다.
: result[0] = isc_info_sql_records 이 아니면 에러 입니다.
: 결과값은 29바이트이상 입니다.
:
: upd_count = isc_vax_integer(result[6], SizeOf(Integer) );
: del_count = isc_vax_integer(result[13], SizeOf(Integer) );
: ins_count = isc_vax_integer(result[27], SizeOf(Integer) );
:
: 죽어도 이해가 안된다하시면 아래 주소로 친구추가~
: sens2468골뱅이nate.com 메신저 입니다.
|