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
[19480] Re:TTable과 Filter에 대한 질문입니다...헬프를 봐도 해당 자료가 없는것 같네여..책에도 없는것 같구여.
김백일 [cedar] 1064 읽음    2002-06-20 11:08
시후 님이 쓰신 글 :
: 안녕하세요 오늘도 허접 질문을 드리게 되어 열분 고수님들 지송합니다.
: 대한민국 8강을 자축하며 봐주세염..^*^
:
: 임의의 폼위에 DBGrid를 올려 놓구 Table과 DataSource를 올려 놓았습니다.
: DB랑 연결을 했는데여..DBGird에서 원하는 검색을 하고 싶어서 Filter기능을 썻거든요
:
: AnsiString FilterValue;
:
: Table1->Active = true;
: DBGrid1->DataSource = DataSource1;
:
: Table1->Filtered = true;
: Table1->Filter = FilterValue;
: Table1->Refresh();
:
: 문제는 FilterValue 에 검색 형태에 따라 조건을 많이 주거든요..
: 그런데 DB에 있는 자료면 원하는 데로 검색을 하는데,,조건에 하나라도 맞지 않는 DB의 필드 값이 있다면 바로 에로가 떨어 지거든요..EConvertError....

"에로"라고 하니까 웬지 이상한 기분이 ^^;
TDataSet::Filter에 들어가는 문자열은
SELECT ... FROM ... WHERE ... 문의 WHERE에 들어가는 내용과 동일합니다.

예를 들어
Table1->Filter = "State = 'CA'"

일단 이 필터 문자열이 WHERE 조건문 문법에 정확히 맞는지를 보세요.
문법에 틀리기 때문에 그렇습니다.
(이 필터는 연결된 DBMS에 실제로 전달되어서 처리됩니다.
그러므로 연결한 각 DBMS의 매뉴얼을 참고하셔야 합니다.)
문법에 맞으면 이 필터 조건에 일치하는 레코드가 하나도 없어도
절대 에러가 뜨지는 않습니다.

잘 모르겠으면 아예 TTabel 대신 TQuery를 써서 SQL 속성에
SELECT ... FROM ... WHERE ... 문을 지정하세요.
이게 제대로 된다면 맞는 겁니다.

그외 필터링을 하는 강력한 방법으로
TDataSet::OnFilterRecord 이벤트를 사용하는 방법이 있습니다.
Filter로 처리할 수 없는 강력한 조건 판단을 코딩으로 처리할 수 있지만,
검색된 모든 레코드에 대해 이벤트가 발생하므로 속도는 상당히 느립니다.

예제는 다음과 같습니다.

void __fastcall TForm1::Table1FilterRecord(TDataSet *DataSet, bool &Accept)
{
  Accept = (DataSet->FieldValues["DateOfPayment"] >
            DataSet->FieldValues["DateOfPurchase"] + 30);
}

: 그렇다고 일일이 검색 조건이 추가될때마다 if문등을 써서 제어를 할순 없잖아여
: 제 생각에는 검색 조건과 DB자료가 동일하지 않으니깐 그냥 예외 처리로 하면 안될까 하는 생각도 들거든요..
: 그냥 메시지 박스를 띄워서 "검색 조건과 동일한 자료가 없습니다" 라고여..
: 그래서
:
: try
: {
:         Table1->Filter = FilterValue;
:         Table1->Refresh();
: }
: catch(EConverError&) ---> 에러메세지가 EConverError라고 뜨길래(사실 예외 처리에 대해서는
: {                            잘 모르거든요..예외 처리부분을 아직 심도 잇게 공부를 못해서)  
:         Application->MessageBox("검색 조건과 동일한 자료가 없습니다","에러",MB_OK);
: }
:
: 위와 같은 형태로 했봤거든요..근데 Table1->Filter = FilterValue이 부분에서 에러가 먼저 떨어지는 것 같더라구여..물론 위의 코드가 제대로 된건 지도 모르겠지만..열분 고수님들 오늘도 머리를 싸메고 끙끙 대고 있는 하수를 위해서 많은 조언 부탁드리겠습니다..
: 그럼 오늘도 즐거운 하루 되시고 ... 즐프하세염...^*^....대한민국 화이팅...코리아팀 화이팅..
: 감사합니다...꾸벅.....(근데 무지 급하거든요..빨리 리플 좀 달아 주세염)...

+ -

관련 글 리스트
19479 TTable과 Filter에 대한 질문입니다...헬프를 봐도 해당 자료가 없는것 같네여..책에도 없는것 같구여..급 시후 780 2002/06/20
19480     Re:TTable과 Filter에 대한 질문입니다...헬프를 봐도 해당 자료가 없는것 같네여..책에도 없는것 같구여. 김백일 1064 2002/06/20
19483         Re:Re:김백일님 조건을 한번 봐주세여..이렇게 쓰는게 틀린건지.. 시후 803 2002/06/20
19484             Re:Re:Re:김백일님 조건을 한번 봐주세여..이렇게 쓰는게 틀린건지.. 김백일 828 2002/06/20
19489                 Re:Re:Re:Re:필드에서 IS NULL, IS NOT NULL 이나 = NULL, <> NULL 은 검색 결과가 제대로 나와여 시후 1707 2002/06/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.