뽀뽀중 님이 쓰신 글 :
: 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 역할을 합니다.
|