C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[35613] Re:[질문]Query의 RecordCount값이 자꾸 -1이 됩니다.
박지훈.임프 [cbuilder] 1329 읽음    2004-06-12 15:46
원래 그렇습니다.
BDE에서는 파라독스나 dBase같은 로컬 데이터베이스와 오라클, SQL서버 등 RDMBS에 대해 테이블, 쿼리가
레코드 데이터를 가져오는 방법이 다릅니다. 로컬 데이터베이스에서는 쿼리에서 select하면 select된 결과가
모두 물리적으로 전송이 되지만, RDMBS인 경우 앞부분의 몇개만 가져오고 나머지는 실제로 전송이 안되다가
필요할 때만 자동으로 서버로부터 전송됩니다. 따라서 RDBMS에서 쿼리 컴포넌트는 select 직후에는 select된
레코드의 총 갯수를 알 수가 없지요.

거꾸로 말하면, 쿼리 컴포넌트가 레코드의 총 갯수를 알려면 전체 레코드의 실제 데이터가 모두 DB 서버로부터
쿼리 컴포넌트로 전송되어야 합니다. 그러기 위해서는 흔히 쓰는 Last() 함수를 호출해도 되지만 그렇게 하면
커서 위치(데이터셋의 레코드 위치)가 마지막으로 이동하므로 다시 First()를 호출해서 맨앞으로 돌아와야
하겠지요.

이럴 때 쓸 수 있는 함수가 FetchAll() 함수입니다. 이 함수를 쓰면 물리적으로 모든 데이터가 서버로부터
TQuery 컴포넌트로 전송되고, 따라서 RecordCount가 실제 레코드 갯수를 가지게 됩니다.
(TTable도 마찬가지입니다)

그럼...


이성희 님이 쓰신 글 :
: Query1->RecordCount 값이 자꾸만 -1이 되는 이유를 모르겠습니다.
: 제가 로컬 파라독스에서는 값이 제대로 나타납니다.
: 하지만 2000서버를 사용하면 값이 자꾸만 -1이 됩니다.
: Query1->RecordCount의 값이 0보다 크면 DBGrid의 선택한 레코드값을
: Edit박스에 뿌려주는 모듈을 만들려고 합니다.
: 그런데 자꾸만 -1값을 리턴하네요
: 그리고 신기한건 DBGrid의 Query1이 연결되어 있어서 내용을 뿌려줍니다.
:
: 먼저 SELECT하면 부분입니다.
:
:     AnsiString sql;
:     bool flag=false;
:     Query1->Close();
:     Query1->SQL->Clear();
:     sql="select * From tb_S_History_Sub where ";
:     if(NameCheck->Checked==true)
:     {
:         sql+="Name='"+Insa->Text+"'";
:         flag=true;
:     }
:     if(DateCheck->Checked==true)
:     {
:         if(flag==true)sql+=" and ";
:         sql+="BDate='"+DateToStr(WrkDate->Date)+"'";
:         flag=true;
:     }
:     if(ComCheck->Checked==true)
:     {
:         if(flag==true)sql+=" and ";
:         sql+="h_code='"+Company->Text+"'";
:         flag=true;
:     }
:     if(flag==true)sql+=" and ";
:     sql+="busegu='"+ClassGu+"'";
:     sql+=" order by jcdate1 DESC,Item_Name,SerialNo";
:     Query1->SQL->Add(sql);
:     Query1->Open();
: 그리고 처리하는 부분입니다.
:     if(Query1->RecordCount > 0)
:     {
:         switch(check)
:         {
:             case 0:
:                 EditInDB(Sender);
:                     break;
:             case 2:
:                 EditInDB(Sender);
:                 InsSetup(Sender);
:                 ModCheck=true;
:                 Bookmark=Query1->GetBookmark();
:                 SaveBtn->Enabled = true;
:                 Insa->SetFocus();
:                     break;
:             case 3:
:                 EditInDB(Sender);
:                 DelDB(Sender);
:                 DBGrid1->SetFocus();
:                     break;
:         }
:     }
:     else
:     {
:         ShowMessage("데이타가존재하지않습니다");
:     }
:
: 너무 답답해서 미치겠습니다.
: 오늘 저녁내내 이것만 들여다 봤습니다.
: 부디 선배님들의 도움 부탁드립니다.
: 그럼 수고하세요!!

+ -

관련 글 리스트
35590 [질문]Query의 RecordCount값이 자꾸 -1이 됩니다. 이성희 896 2004/06/11
35613     Re:[질문]Query의 RecordCount값이 자꾸 -1이 됩니다. 박지훈.임프 1329 2004/06/12
35611     그거 아마... 김태우 916 2004/06/12
35594     Re:[질문]Query의 RecordCount값이 자꾸 -1이 됩니다. 도신 907 2004/06/12
35596         Re:Re:[질문]Query의 RecordCount값이 자꾸 -1이 됩니다. 이성희 928 2004/06/12
35597             Re:Re:Re:[질문]Query의 RecordCount값이 자꾸 -1이 됩니다. 도신 832 2004/06/12
35598                 Re:Re:Re:Re:[질문]Query의 RecordCount값이 자꾸 -1이 됩니다. 이성희 904 2004/06/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.