사용하는 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.
카테고리 없음
[데이터베이스] Query.RecordCount = -1
반응형
반응형