|
행복 님이 쓰신 글 :
: 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!");
}
이상입니다.
도움이 되셨으면 좋겠습니다.
급히 쓰느라 오류는 없었는지... 쩝쩝...
|