Q&A

  • 날짜별 검색이 잘 안되는데요....
안녕들 하세요...

잘 안되는게 있어서요..

엑세스로 DB를 만들어서 날짜별로 검색을 하는데 이게 잘안되서요..

예를 들어 99-06-30 에서 99-07-02 사이의 레코드를 그리드에 출력

하는데 에러는 없는데 레코드가 그리드에 출력이 안되네요..

sql문에서 틀린것 같은데..아래 소스가...



procedure TOutcomeFrm.BitBtn1Click(Sender: TObject);

var

FDate,TDate : String;

begin

FDate := DateToStr(DateTimePicker3.Date);

TDate := DateToStr(DateTimePicker4.Date);

with DM.Outqr do begin

Close;

sql.Clear;

sql.Add('select * from outcome');

sql.Add('where 구입일 between '+FDate+' and '+TDate+'');

Open;

end;

end;



'구입일' 이라는 필드가 있고 보시는거와 같이 FDate 에서 TDate까지의

모든 레코드를 출력하는데 실행하면 빈 레코드가 나와요..분명이

해당하는 레코드가 있는데도 불구하고...'구입일'의 필드타입은 DateTime

입니다..도와 주세요..

3  COMMENTS
  • Profile
    정재홍 1999.07.02 21:53
    이주흥 께서 말씀하시기를...

    > 안녕들 하세요...

    > 잘 안되는게 있어서요..

    > 엑세스로 DB를 만들어서 날짜별로 검색을 하는데 이게 잘안되서요..

    > 예를 들어 99-06-30 에서 99-07-02 사이의 레코드를 그리드에 출력

    > 하는데 에러는 없는데 레코드가 그리드에 출력이 안되네요..

    > sql문에서 틀린것 같은데..아래 소스가...

    >

    > procedure TOutcomeFrm.BitBtn1Click(Sender: TObject);

    > var

    > FDate,TDate : String;

    > begin

    > FDate := DateToStr(DateTimePicker3.Date);

    > TDate := DateToStr(DateTimePicker4.Date);

    > with DM.Outqr do begin

    > Close;

    > sql.Clear;

    > sql.Add('select * from outcome');

    > sql.Add('where 구입일 between '+FDate+' and '+TDate+'');

    > Open;

    > end;

    > end;

    >

    > '구입일' 이라는 필드가 있고 보시는거와 같이 FDate 에서 TDate까지의

    > 모든 레코드를 출력하는데 실행하면 빈 레코드가 나와요..분명이

    > 해당하는 레코드가 있는데도 불구하고...'구입일'의 필드타입은 DateTime

    > 입니다..도와 주세요..



    제가 아는 범위내에서 문제의 소지가 있는 부분을 몇가지 짚어 보겠습니다.



    1. 엑세스디비(mdb)는 날짜를 검색조건으로 사용할때 앞뒤에 #을 붙여 주어야



    하는 걸로 알고 있습니다. 예로 #99-06-30# 이런식으로 말이죠...



    2. sql문이 제대로 형성이 되는지 검사해 보십시요...

    sql.Add('where 구입일 between '+FDate+' and '+TDate+'');

    showmessage(sql.text); <-이렇게 해서 원하는 형식으로 sql이 만들어지는지...

    Open;



    3. between을 사용하지 않고 and문을 사용하면 어떨까요?

    예)

    > sql.Add('select * from outcome');

    sql.Add('where (구입일 >= :FDate) and (구입일 <= :TDate) ');

    parambyname('FDate').asDateTime := DateTimePicker3.Date;

    parambyname('TDate').asDateTime := DateTimePicker4.Date;

    > Open;



    이렇게 한번 해 보심이....

    잘 해결 될수 있기를 바랍니다.



  • Profile
    이주흥 1999.07.03 01:08
    안녕하세요..답변 감사합니다.

    But!! 여전히 안되는군요...

    ShowMessage결과는 맞는데...여전히 레코드가 없다고 나오는군요...

    어떡하면 좋을까요..

    ShowMessage결과----->

    select * from outcome where 구입일 between 99-06-30 and 99-07-02



    이렇게 나오고요...and를 사용해도 마찬가지...아~~~ 코드의 문제가

    아닌듯한데...쩝...

  • Profile
    jack 1999.07.03 03:24
    이주흥 께서 말씀하시기를...

    > 안녕하세요..답변 감사합니다.

    > But!! 여전히 안되는군요...

    > ShowMessage결과는 맞는데...여전히 레코드가 없다고 나오는군요...

    > 어떡하면 좋을까요..

    > ShowMessage결과----->

    > select * from outcome where 구입일 between 99-06-30 and 99-07-02

    >

    > 이렇게 나오고요...and를 사용해도 마찬가지...아~~~ 코드의 문제가

    > 아닌듯한데...쩝...



    이렇게 한번 해보실래요?



    sql.Add('where 구입일 between #'+ FDate +'# and #'+ TDate +'#');

    Open;



    그리고 현재도 그렇게 하고 계실지도 모르겠지만..

    우선 액세스에서 먼저 질의를 생성해서 테스트해보고

    그 질의문을 그대로 가져다 델파이에서 적용해보는것도

    아주 좋은 방법이더라구요..

    일단 위 코드대로 해보고 혹시나 안된다면 먼저 한번 액세스에서

    해보시죠..

    성공을 기원하며..