본문 바로가기

카테고리 없음

[데이터베이스] Query.RecordCount = -1

반응형

사용하는 DB가 로컬에 있는 XBase계열(DBase, Paradox)의 DB라면 이런 문제가 없지만
원격지의 DataBase이라면 이런 문제가 발생합니다
결론부터 말씀드리면 버그는 아니고 TDataSet의 특징입니다
RecordCount는 로컬에 fetch한 레코드의 개수를 세기 때문입니다

BDE는 data-fetching 메커니즘이 있어서 만약 질의한 레코드 갯수가
많을경우 화면의 DBGrid에 한번에 20 개만 보인다면 화면스크롤시 모래시계가
중간중간에 보일겁니다 (DBGrid가 아니더라도 마찬가지 입니다)
즉 질의를 했다고 해서 자료를 다 가지고 오는것이 아니라 중간중간에
필요한 페이지단위로 가져오는 것입니다

그래서 RecordCount가 -1 이라는건 모든 자료를 fetch 하지 않아서 그렇습니다
이때는 강제로 fetch하게 하는 방법이 있는데 간단히 아래처럼
  Query.Open;
  Query.Last;
  Query.First;
하시면 됩니다. Last를 하려면 별 수 없시 다 가져와야 겠죠...
하지만 레코드가 너무 많아 메모리를 잠식하면 out of  virtual memory error를 만날 수 있습니다

그러므로 단지 레코드 갯수만 알아내려면
  SELECT COUNT(*)
  FROM 테이블
해서 갯수만 질의해 오는것이 트래픽 문제를 줄일 수 있습니다

Note:
  Use RecordCount with care, because record counting can be a costly
  operation, especially for SQL queries that return large result sets.
  Generally, an application should only use RecordCount with Paradox and
  dBASE tables.

반응형