Q&A

  • 쿼리문의 의문점입니다.
with DBModule.QInJ do begin

Close;

SQL.Clear;

SQL.Add('Select *');

SQL.Add('from InJepum ');

SQL.Add('Where IJ_Sang="' + fdSang +

'" AND IJ_Name="' + fdName +

'" AND IJ_Type="' + fdType +

'" AND (Extract(Year From IJ_InDate) * 10000 + Extract(Month From IJ_InDate) * 100 + Extract(Day From IJ_InDate))=' + fdDate + ' ');

if Prepared = False then Prepare;

Open;

if RecordCount <> 0 then

ShowMessage('있다')

esle ShowMessage('없다');

end;



IJ_Sang, IJ_Name, IJ_Type = String 필드

IJ_InDate = DateTime 필드

fdDate, fdSang, fdname, fdType = String 변수





이렇게 했는데 없다라는 메시지만 나타나네요.



(Extract(Year From IJ_InDate) * 10000 + Extract(Month From IJ_InDate) * 100 + Extract(Day From IJ_InDate))=' + fdDate + ' '

이 라인을 지우고 검색을 하면 찾는데 이 라인만 들어가면 찾지를 못합니다.



디비를 열어보면 분명히 4가지 조건에 만족하는 데이타가 있거든요.



답변 부탁드리겠습니다.





2  COMMENTS
  • Profile
    김광섭 2001.03.29 00:05
    델초보 wrote:

    > with DBModule.QInJ do begin

    > Close;

    > SQL.Clear;

    > SQL.Add('Select *');

    > SQL.Add('from InJepum ');

    > SQL.Add('Where IJ_Sang="' + fdSang +

    > '" AND IJ_Name="' + fdName +

    > '" AND IJ_Type="' + fdType +

    > '" AND (Extract(Year From IJ_InDate) * 10000 + Extract(Month From IJ_InDate) * 100 + Extract(Day From IJ_InDate))=' + fdDate + ' ');

    > if Prepared = False then Prepare;

    > Open;

    > if RecordCount <> 0 then

    > ShowMessage('있다')

    > esle ShowMessage('없다');

    > end;

    >

    > IJ_Sang, IJ_Name, IJ_Type = String 필드

    > IJ_InDate = DateTime 필드

    > fdDate, fdSang, fdname, fdType = String 변수

    >

    >

    > 이렇게 했는데 없다라는 메시지만 나타나네요.

    >

    > (Extract(Year From IJ_InDate) * 10000 + Extract(Month From IJ_InDate) * 100 + Extract(Day From IJ_InDate))=' + fdDate + ' '

    > 이 라인을 지우고 검색을 하면 찾는데 이 라인만 들어가면 찾지를 못합니다.

    >

    > 디비를 열어보면 분명히 4가지 조건에 만족하는 데이타가 있거든요.

    >

    > 답변 부탁드리겠습니다.

    >

    그 조건이 날짜를 가져 오는것 같은데 그렇다면 쿼리오픈전에

    ShowMessage(DBModule.QInJ.Text);

    해서 확인해보세요.

    그리구여 쿼리문을 코딩할 경우에는여 쿼리문을 쿼리빌더나 해당 DB 도구를 이용해서 쿼리를 확인하구 코딩하면 틀릴 경우가 거의 없죠..

    그럼, 항상 즐코 하세요.

  • Profile
    이희정 2001.03.28 23:21
    델초보 wrote:

    > with DBModule.QInJ do begin

    > Close;

    > SQL.Clear;

    > SQL.Add('Select *');

    > SQL.Add('from InJepum ');

    > SQL.Add('Where IJ_Sang="' + fdSang +

    > '" AND IJ_Name="' + fdName +

    > '" AND IJ_Type="' + fdType +

    > '" AND (Extract(Year From IJ_InDate) * 10000 + Extract(Month From IJ_InDate) * 100 + Extract(Day From IJ_InDate))=' + fdDate + ' ');

    > if Prepared = False then Prepare;

    > Open;

    > if RecordCount <> 0 then

    > ShowMessage('있다')

    > esle ShowMessage('없다');

    > end;

    >

    > IJ_Sang, IJ_Name, IJ_Type = String 필드

    > IJ_InDate = DateTime 필드

    > fdDate, fdSang, fdname, fdType = String 변수

    >

    >

    > 이렇게 했는데 없다라는 메시지만 나타나네요.

    >

    > (Extract(Year From IJ_InDate) * 10000 + Extract(Month From IJ_InDate) * 100 + Extract(Day From IJ_InDate))=' + fdDate + ' '

    > 이 라인을 지우고 검색을 하면 찾는데 이 라인만 들어가면 찾지를 못합니다.

    >

    > 디비를 열어보면 분명히 4가지 조건에 만족하는 데이타가 있거든요.

    >

    > 답변 부탁드리겠습니다.

    >

    >



    위에 (Extract(Year From IJ_InDate) * 10000 + Extract(Month From IJ_InDate) * 100 + Extract(Day From IJ_InDate)) 는 만약에 IJ_InDate가 '2001/02/01'이라고 하면



    20010201이 수치형으로 들어오겠죠?



    그러니 STRINGE형인 '2001/02/01'값을 비교하면 값이 틀리겠죠??



    이런 경우는 그냥 문자로 비교하는 게 더 정확할 겁니다.



    (TO_CHAR(Extract(Year From IJ_InDate) * 10000) || '''/''' || TO_CHAR(Extract(Month From IJ_InDate) * 100) || '''/''' || TO_CHAR(Extract(Day From IJ_InDate)))



    이렇게 바꾸셔서 비교해 보세용~