|
yuki 님이 쓰신 글 :
:
: Qry를 실행하고 나서 RecordCount가 결과 건수가 나와야 하는데
: RecordCount 가 -1로 나옵니다..
:
: Qry는 그냥 select * from imsi_tbl 인 경우입니다.
:
안녕하세요 yuki님, 어제 아는 척(?) 했던 정진후입니다.
어제 제가
Query1->Last();
를 쓸 필요가 없다거 말씀을 드렸는데, 그것은 사실
틀린 지적입니다.
제 경험상의 의견이라는 것을 전제로 하고 말씀을 드리면
디비 테이블을 구성하고 있는 해당 필드들이
Number, CHAR정도의 데이터 타입일 경우에는
Query1->Open();
if(!Query1->RecordCount)
return;
이런식의 코딩을 해도 레코드 카운트를 잘 가지고 옵니다.
그러나 해당 테이블이 Blob, VARCHAR2등의 필드를 가지고 있으면
종종 RecordCount가 헤매는(-1을 리턴하는) 경우가 생깁니다.
이것을 해결하는 방법은 어제 바로 yuki님의 코딩대로
Query1->Last();
을 기술한 다음 레코드 카운트를 추출하시면 될 겁니다.
사실, 어떤 필드를 보유하더라도 Last()메서드는
잘 작동하므로 항상 기술하시는 편이 나을 겁니다 ^^;
사실 볼란드에서도 그렇게 이야기 하고 있고요.
그래도 안된다면, 이것은 사실 제가 가장 선호하는 방법입니다만,
다른 쿼리로 그룹함수를 써서 카운트를 추출하는 것입니다.
예를 들면
QryCnt->SQL->ADD("select COUNT(*) cnt from imsi_tbl");//이것은 오라클의 경우입니다.
QryCnt->Open();
int iCnt = QryCnt->FieldByName("cnt")->AsInteger;
라고 해주면 되지요.
사실 레코드 카운트는 셀렉된 레코드 갯수가 많을 경우
변수에 할당하는 것도 열받게 느리거든요. 그럴 경우 위와 같은
방법도 도움이 되시리라 생각합니다.
어제 두서없이 지껄인 것을 사과드리며 오늘도 건승하시기를.
|