Q&A

  • TQuery의 RecordCount의 의문점
SQL문을 이용해서 검색을 했는데 TQuery의 RecordCount가

-1(데이타가 있는 경우), 0(데이타가 없는 경우),

어떤 경우에는 데이타의 갯수만큼 나타나는 걸 확인했는데

데이타가 없을 경우 0이 나타나는 건 이해가 가는데

데이타가 있는 경우에 -1이 나오는 경우와 개수만큼의 숫자가

나오는 경우의 차이는 뭔가요?

1  COMMENTS
  • Profile
    김영대 1999.11.13 02:43
    termy wrote:

    > SQL문을 이용해서 검색을 했는데 TQuery의 RecordCount가

    > -1(데이타가 있는 경우), 0(데이타가 없는 경우),

    > 어떤 경우에는 데이타의 갯수만큼 나타나는 걸 확인했는데

    > 데이타가 없을 경우 0이 나타나는 건 이해가 가는데

    > 데이타가 있는 경우에 -1이 나오는 경우와 개수만큼의 숫자가

    > 나오는 경우의 차이는 뭔가요?



    사용하는 DB가 로컬에 있는 XBase계열의 DB라면 이런 문제가 없지만

    C/S 환경이라면 이런 문제가 발생합니다

    결론부터 말씀드리면 RecordCount 는 믿을만한것이 못됩니다



    BDE는 data-fetching 메커니즘이 있어서 만약 질의한 레코드 갯수가

    많을경우 화면의 DBGrid에 한번에 20 개만 보인다면 화면스크롤시 모래시계가

    중간중간에 보일겁니다(DBGrid가 아니더라도 마찬가지 입니다)

    즉 질의를 했다고 해서 자료를 다 가지고 오는것이 아니라 중간중간에

    필요한 페이지단위로 가져오는 것입니다

    하지만 이미 가져온 레코드는 refresh 를 시키지 않는한 보존됩니다



    그래서 RecordCount가 -1 이라는건 모든 자료를 fetch 하지 않아서 그렇습니다

    이때는 강제로 fetch하게 하는 방법이 있는데 간단히 아래처럼

    Query.Open;

    Query.Last;

    Query.First;

    하시면 됩니다

    Last를 하려면 별 수 없시 다 가져와야 겠죠...



    하지만 단지 레코드 갯수만 알아내려면

    SELECT COUNT(*)

    FROM 테이블

    해서 갯수만 질의해 오는것이 트래픽 문제를 줄일 수 있습니다



    또한 단지 조건에 맞는 레코드가 있는지 판단하려면 Query.IsEmpty 를 사용하거나

    Query.Eof and Query.Bof 를 사용하세요