안녕들 하세요...
잘 안되는게 있어서요..
엑세스로 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
입니다..도와 주세요..
> 안녕들 하세요...
> 잘 안되는게 있어서요..
> 엑세스로 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;
이렇게 한번 해 보심이....
잘 해결 될수 있기를 바랍니다.