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
[13784] Re:[질문]정말.. 살려주세요.. 부탁드립니다. ^^;;
강요찬 [kyc3003] 754 읽음    2001-12-20 12:05
행복 님이 쓰신 글 :
: AnsiString d = "SELECT * FROM test WHERE (([test].[Date1])=#"
:                             + DateTime1->Date.DateString()
:                             + "#) AND (([test].[Name])='"
:                             + C_Name->Text
:                             + "') ORDER BY [test].[" ;
:
:         Query->Close();
:         Query->SQL->Clear();
:
:         if(Column->FieldName == "ttt")
:         {
:             if(Clicked_Flag)
:             {
:                 Query->SQL->Add(d + "ttt]");
:             }
:             else
:             {
:                 Query->SQL->Add(d + "ttt] DESC");
:             }
:         }
:
:
: 이렇게 했더니 소트가 안되내요..
:
: AnsiString d = "SELECT * FROM test WHERE (([test].[Date1])=#"
:                             + DateTime1->Date.DateString()
:                             + "#) AND (([test].[Name])='"
:                             + C_Name->Text
:                             + "') ORDER BY [test].[" ;
:
: 이부분에서 잘못된 것이 있나.. 봐주시면 안될까요? ^^;;

=========================================================

행복님을 살려드릴 수 있을만한 실력은 없지만, 보기에 눈에 띄는 것이 있어 몇자 적습니다.
저두 다 겪어본 터라... 그냥 지나칠 수가 없어서요...

1. [test].[Date1] 등등에서 [] 괄호로 묶는 것은 에러는 나지 않을 것 같지만(?) 굳이 없어도 될 것 같습니다. 즉 test.Date1 - 이렇게 말입니다. 또, () 괄호가 너무 많아 코드가 복잡해 보입니다. 뺄 수 있으면 빼는 것이 좋을 것 같구요.

2. ...#"+ DateTime1->Date.DateString()+ "#... 이 구문이 이상해 보입니다. # 와 # 사이에는 TDateTime 변수가 들어 가겠지요? AnsiString d 변수에 TDateTime 변수를 함께 이어 쓸 수 없겠지요. 또, DateTime1->Date.DateString() 은 DateTime1->DateString() 을 잘못 표기하신 것 같은데(?) 그렇다면 리턴값이 또 그 리턴값이 AnsiString 값이므로 앞뒤의 # 문자는 필요 없겠구요. 위와 같은 방식의 코딩은 어딘가에서 오자가 있다해도 발견하기가 쉽지가 않을 겁니다. 이렇게 해 보시는 것이 어떨까요?

3. 결론
가정 1) test.Date1 의 필드값이 TDateTime 형일 경우

         AnsiString d="SELECT * FROM test "
                      "         WHERE test.Date1=:1"
                      "               AND test.Name=:2"
                      "         ORDER BY test.";
         Query->Close();
         Query->SQL->Clear();
         if (Column->FieldName == "ttt") {
             if (Clicked_Flag) {
                 d+="ttt";
             } else {
                 d+="ttt DESC";
             }
         }
         Query->SQL->Text=d;
         Query->Parameters->Items[0]->DataType = ftDateTime; // 생략가능
         Query->Parameters->Items[1]->DataType = ftString;   // 생략가능
         Query->Parameters->Items[0]->Value = DateTime1;
         Query->Parameters->Items[1]->Value = C_Name->Text;
         try {
           Query->Open();
         } catch (...) {
           ShowMessage("Select Error!");
         }

가정 2) test.Date1 의 필드값이 AnsiString 형일 경우
        
         AnsiString d="SELECT * FROM test "
                      "         WHERE test.Date1=:1"
                      "               AND test.Name=:2"
                      "         ORDER BY test.";
         Query->Close();
         Query->SQL->Clear();
         if (Column->FieldName == "ttt") {
             if (Clicked_Flag) {
                 d+="ttt";
             } else {
                 d+="ttt DESC";
             }
         }
         Query->SQL->Text=d;
         Query->Parameters->Items[0]->DataType = ftString;   // 생략가능
         Query->Parameters->Items[1]->DataType = ftString;   // 생략가능
         Query->Parameters->Items[0]->Value = DateTime1->DateString(); // 이 부분은 스트링형태에 따라 수정해 주셔야할겁니다. DateTime1->FormatString("yyyy-mm-dd"); 등과 같이 말이죠.
         Query->Parameters->Items[1]->Value = C_Name->Text;
         try {
           Query->Open();
         } catch (...) {
           ShowMessage("Select Error!");
         }

이상입니다.
도움이 되셨으면 좋겠습니다.
급히 쓰느라 오류는 없었는지... 쩝쩝...

+ -

관련 글 리스트
13769 [질문]정말.. 살려주세요.. 부탁드립니다. ^^;; 행복 715 2001/12/19
13784     Re:[질문]정말.. 살려주세요.. 부탁드립니다. ^^;; 강요찬 754 2001/12/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.