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
[75262] Re:Re:검색한 결과를 DBGrid 에 다시 표시 하려면 어떻게 해야 하나요?
뽀뽀중 [kissjung] 2726 읽음    2019-01-29 22:33
빌더(TWx) 님이 쓰신 글 :
: 뽀뽀중 님이 쓰신 글 :
: : FireDAC를 이용해서 DB 프로그램을 작성 하고 있습니다.
: :
: : 1. 테이블에 입력된 자료를 DBGrid에 표시 합니다.
: : 2. 검색결과만 동일한 DBGrid에 표시하려 하는데, 이부분을 어떻게 해야 하는지 모르겠습니다.
: :   (검색되지 않은 데이터를 삭제 하는 것이 아닌, DBGrid 에서만 보이게 하고 싶습니다.)
: :
: : 제가 작성한 코드는 아래와 같습니다.
: :
: :     FDTableRegDoc->Active = false;
: :     FDTableRegDoc->TableName = "MasterReg";
: :     FDTableRegDoc->Connection = FormMain->FDConnection1;
: :     FDTableRegDoc->Active = true;
: :     FDTableRegDoc->Open();
: :
: :     FDTableRegDoc->Edit();
: :
: :     FormMain->FDCommand1->CommandText->Clear();
: :
: :     // 검색어 조건에 따라 SQL 문장을 변경 한다.
: :     if (AsGum == "전체" && AsMyun == "전체" && AsRi == "전체" && AsFacType == "전체" && AsBunGi == "") {
: :         AsSQLString = "SELECT * FROM MasterReg";
: :     }
: :
: :     else {
: :         AsSQLString = "SELECT * FROM MasterReg WHERE "  AddressSi='양평군' and AddressMyun = '강상면';
: :     }
: :
: :     FormMain->FDCommand1->CommandText->Add(AsSQLString);
: :     FormMain->FDCommand1->Active = true;
: :
: :     FDTableRegDoc->Post();
: :     FDTableRegDoc->Close();
: :     DBgrdRegDoc->Refresh();
: :     FormMain->FDCommand1->Active = false;
: :
: : 검색한 결과 만 자동으로 DBgrdRegDoc에 표시(입력)되는 것으로 생각하고 있었는데,....
: : 안되네요..
: :
:
:
:
:
: 답변:
:
:
:
: TFDCommand는 TDataSet으로 부터 상속되어 구현된 클래스가 아니라서
: data set 의 쿼리 조건 요구에 따라서 데이타 베이스로 부터 rercord set을 리턴 받는 경우엔 사용될 수 없습니다.
:
: TFDCommand는 메모리 테이블과 테이블 아답타와 연계해서 인터페이스를 취할 때나 의미가 있는 거고
: 각기 클래스들의 컴포지션 관계를 숙지하고 있어야 합니다.
:
:
: 그런데...
:
: VCL Document Help 는 안봐요?
:
:
: TFDCommand 에 대해서...
:
: "The class does not provide TDataSet-aware access to returned result sets."
:
: 라고 친절하게 설명해 놓고 있는데...
:
:
: 다음과 같은 식으로 TFDQuery 로 시퀄(SQL) 조건을 설정해서 사용하세요.
:
:     FDTableRegDoc->SQL->Text = "select * from MasterReg where AddressSi = :AddressSi";
:     FDTableRegDoc->ParamByName("AddressSi")->AsString = "시이름";
:
: ':AddressSi' 에서 앞 부분의 ':' 는 파라미터임을 나타내는 Token 역할을 합니다.
:
:

먼저 답변 감사 드립니다.

알려 주신 방법으로 시도를 해 보았는데, 제가 실력(지식)이 부족하여 만족할만한 결과를 얻지 못했습니다.

답변 계시전에 다른 방법인 filter 사용하는 방법으로 하니, 검색은 원하는 결과를 얻었으나
DBGrid 에 검색결과를 업데이트 가 안되고 있습니다.

BBGrid 에 보이는 레코드를 클릭하면, 해당 자료를 읽게 하였으며,
검색어에 포함되지 않은 레코드는 클릭을 하여도, 해당 자료를 읽을수는 없습니다.

close(), open(), refrash() 등등 시도를 해 보았는데, 안되네요...

수정된 코드는 아래와 같습니다.

FDTableRegDoc->Active = false;
FDTableRegDoc->TableName = "MasterReg";
FDTableRegDoc->Connection = FormMain->FDConnection1;
FDTableRegDoc->Active = true;
FDTableRegDoc->Open();

// 검색어 조건에 따라 SQL 문장을 변경 한다.
if (AsGum == "전체" && AsMyun == "전체" && AsRi == "전체" && AsFacType == "전체" && AsBunGi == "") {
AsSQLString = "I_MasterID <> 0";
FDTableRegDoc->Filter = AsSQLString;
}

else {
AsSQLString = AsSQLGum + AsSQLMyun + AsSQLRi + AsSQLBunGi;
FDTableRegDoc->Filter = AsSQLString;
// select * from MasterReg where AddressSi='무명군' and AddressMyun = '무명면';
}

FDTableRegDoc->Filtered = true;
FDTableRegDoc->FilterChanges;
FDTableRegDoc->First();
FDTableRegDoc->Refresh();

////**** 테이블과 DBGrid 연결이 안된듯 함

FDTableRegDoc->EnableControls();

ShowMessage(FDTableRegDoc->RecordCount);

DBgrdRegDoc->Refresh();
FDTableRegDoc->Close();


===> 검색에 성공(?) 하였습니다.
아래 코드와 같이 수정 하면 됩니다.
우선 테이블이 아닌 쿼리 로 해야 하는 것이 었습니다.

    FDQueryRegDoc->Filtered = false;

    // 검색어 조건에 따라 SQL 문장을 변경 한다.
    if (AsGum == "전체" && AsMyun == "전체" && AsRi == "전체" && AsFacType == "전체" && AsBunGi == "") {
        AsSQLString = "I_MasterID <> 0";
    }

    else {
        AsSQLString = AsSQLGum + AsSQLMyun + AsSQLRi + AsSQLBunGi;
        // select * from MasterReg where AddressSi='양평군' and AddressMyun = '강상면';
    }

    FDQueryRegDoc->Filter = AsSQLString;
    FDQueryRegDoc->Filtered = true;

+ -

관련 글 리스트
75260 검색한 결과를 DBGrid 에 다시 표시 하려면 어떻게 해야 하나요? 뽀뽀중 2603 2019/01/29
75261     Re:검색한 결과를 DBGrid 에 다시 표시 하려면 어떻게 해야 하나요? 빌더(TWx) 2687 2019/01/29
75262         Re:Re:검색한 결과를 DBGrid 에 다시 표시 하려면 어떻게 해야 하나요? 뽀뽀중 2726 2019/01/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.