Q&A

  • SQL문(select * from ...)에서 RecordCount가 항상 -1인 문제
도움을 요청 합니다. 부디 좋은 대답을...



전체 레코드개수를 구할려구 하는데여..



Query1.SQL.Clear;

Query1.SQL.Add('select id from dbo.board');

Query1.open;

showmessage(inttostr(Query1.RecordCount));



이럴게 하면 전체 레코드 개수가 나오는데...



Query1.SQL.Clear;

Query1.SQL.Add('select * from dbo.board');

Query1.open;

showmessage(inttostr(Query1.RecordCount));



이렇게 하면 항상 -1이 나옵니다... 이게 어떻게 된건지 ㅜ.ㅜ.



제대로 된 값을 나오게 할려면 어떻게 해야 되는지.. ㅜ.ㅜ



부디 도와 주세여..

3  COMMENTS
  • Profile
    linuxwiz 2000.08.30 20:52
    정성용 wrote:

    > 도움을 요청 합니다. 부디 좋은 대답을...

    >

    > 전체 레코드개수를 구할려구 하는데여..

    >

    > Query1.SQL.Clear;

    > Query1.SQL.Add('select id from dbo.board');

    > Query1.open;

    > showmessage(inttostr(Query1.RecordCount));

    >

    > 이럴게 하면 전체 레코드 개수가 나오는데...

    >

    > Query1.SQL.Clear;

    > Query1.SQL.Add('select * from dbo.board');

    > Query1.open;

    > showmessage(inttostr(Query1.RecordCount));

    >

    > 이렇게 하면 항상 -1이 나옵니다... 이게 어떻게 된건지 ㅜ.ㅜ.

    >

    > 제대로 된 값을 나오게 할려면 어떻게 해야 되는지.. ㅜ.ㅜ

    >

    > 부디 도와 주세여..





    당연합니다...

    프로그램을 하시면서 염두에 두어야 할 것 하나는 ..

    내가 늘 당연하다구 여기는 게 항상 문제가 생길 수 있다는 것..

    다시말하면 지식의 완전성에 대한 문제이지여.. 이론 각설하구여..



    레코드카운트를 세려는 테이블이 보드군여..

    게시판인가여..



    그러면 게시판 내용이 들어가는 필드가 text

    이겠군여..



    특히나 sql서버는 text자료형의 데이타를 찾아갈때..

    그주소값만을 가지구 갑니다..

    그래서 페이지 단위로 인식을 하구여..



    그러니 당근 text자료형이 있는 테이블의 전체 자료를 카운트를 세면 -1 이 나오져..



    text자료형은 크기가 없습니다.. 거의무한대죠...

    그래서 row의 구분을 할수 가 없어여..



    위에서 id로 카운트를 세면 당근 카운트가 제대로 나오구여..



    전체를 카운트하면 -1 이 나옵니다..













  • Profile
    최창욱 2000.08.30 04:19
    정성용 wrote:

    > 도움을 요청 합니다. 부디 좋은 대답을...

    >

    > 전체 레코드개수를 구할려구 하는데여..

    >

    > Query1.SQL.Clear;

    > Query1.SQL.Add('select id from dbo.board');

    > Query1.open;

    > showmessage(inttostr(Query1.RecordCount));

    >

    > 이럴게 하면 전체 레코드 개수가 나오는데...

    >

    > Query1.SQL.Clear;

    > Query1.SQL.Add('select * from dbo.board');

    > Query1.open;

    > showmessage(inttostr(Query1.RecordCount));

    >

    > 이렇게 하면 항상 -1이 나옵니다... 이게 어떻게 된건지 ㅜ.ㅜ.

    >

    > 제대로 된 값을 나오게 할려면 어떻게 해야 되는지.. ㅜ.ㅜ

    >

    > 부디 도와 주세여..

    위에 적힌 답변처럼

    Query1.SQL.Clear;

    Query1.SQL.Add('select count(*) as cnt from dbo.board');

    Query1.open;



    showmessage(inttostr(Query1.FieldByName('cnt').AsInteger));



    이렇게 하면 젤루 좋은 방법이고...

    차선의 방법은...



    레코드 카운터는 Query1.Last 한 후에야 정확하게 나옵니다.



    그러므로

    Query1.SQL.Clear;

    Query1.SQL.Add('select * from dbo.board');

    Query1.open;



    Query1.Last; // 이 줄을 적고 아래의 코드를 실행하면 정확한 레코드 카운터가

    구해 질겁니다.



    showmessage(inttostr(Query1.RecordCount));





    그러나 이 방법은 위의 Count 문을 쓰는것 보다 느리다는것을 염두에 두셔야 합니다.



    그럼 즐코하세요..



    *** 문법이 틀렸을 수도 있습니다. 사실 전 델파이를 쓰는 프로그래머가 아니고 C++Builder

    를 쓰는 사람입니다.... 만일 문법이 이상하다면 너그러이 용서 하시길... ^^;



  • Profile
    s6763 2000.08.30 04:19
    select count(*) from dbo.board 를 써보세요







    정성용 wrote:

    > 도움을 요청 합니다. 부디 좋은 대답을...

    >

    > 전체 레코드개수를 구할려구 하는데여..

    >

    > Query1.SQL.Clear;

    > Query1.SQL.Add('select id from dbo.board');

    > Query1.open;

    > showmessage(inttostr(Query1.RecordCount));

    >

    > 이럴게 하면 전체 레코드 개수가 나오는데...

    >

    > Query1.SQL.Clear;

    > Query1.SQL.Add('select * from dbo.board');

    > Query1.open;

    > showmessage(inttostr(Query1.RecordCount));

    >

    > 이렇게 하면 항상 -1이 나옵니다... 이게 어떻게 된건지 ㅜ.ㅜ.

    >

    > 제대로 된 값을 나오게 할려면 어떻게 해야 되는지.. ㅜ.ㅜ

    >

    > 부디 도와 주세여..