혼자 레이아웃하고 만들어서 완전 꽝이지만 끝까지 포기하지 않구 완성하구 싶어서 질문까지 해요..
부탁합니다..^^ 제발 완성하게 해주세요...
우선은 도서관 프로그램이예요..
사람들 입력했구요. 도서명과 도서코드로 책들도 입력했으며 검색까지는 했거든요..
근데 이것들을 통계를 내고 싶어서요.
제 짧은 생각은
select * from BOOK_RENT
where RENT_DAY > 20050000 and RENT_DAY < 20061130
이렇게 검색했더니 검색은 되더라구요.
근데 생각이
with query1 do
begin
close;
sql.clear;
sql.add('select * from BOOK_RENT ');
sql.add('where rent_day >= :rent_day and rent_day < :rent_day1 ');
paramabyname('rent_day ').asstring := edit1.text;
paramabyname('rent_day1 ').asstring := edit2.text;
이렇게 paramabyname를 써서 년 월 일 을 받아서 검객하구 싶거든요.
물론 따로 따로 년 월 일 이구요....
2005년 부터 2006년까지
그리고
200611월부터 200612월까지 이렇게 검색해서 해야하는데
여기서 막혀요.
참 필드엔 '20061120' 요런 형태로 정장됐어요.^^ 부탁해용...
Query.sql.text := '검색쿼리' 를 사용하시는 것이 낫겠습니다.
아래부분 쿼리로만 보자면
with query1 do
begin
close;
sql.clear;
sql.text := 'SELECT * '
+ ' FROM BOOK_RENT '
+ ' WHERE RENT_DAY BETWEEN ''' + edit1.text + ''''
+ ' AND ''' + edit2.text + '''';
//edit1.text 값 : '20061101'
//edit2.text 값 : '20061231'
open;
end;
우선 날짜 검색 조건은 사용자가 지정하도록 하겠죠.
TDatetimepicker 를 사용하시면 될 것 같은데..
검색일자 := formatdatetime('yyyymmdd', Datetimepicker1.datetime);
사실 아래 질의하신 내용으로는 무엇이 문제인지는 모르겠군요.
혹 날짜를 지정하는 부분이 문제시면
아래 function을 참조하세요.
// 날짜의 년도만 발취
function TForm1.dateYear(D: TDateTime): Integer;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
Result := Year;
end;
// 날짜의 월만 발취
function TForm1.dateMonth(D: TDateTime): Integer;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
Result := Month;
end;
// 날짜의 일만 발취
function TForm1.dateDay(D: TDateTime): Integer;
var
Year,Month,Day : Word;
begin
DecodeDate (D,Year,Month,Day);
Result := Day;
end;
// 년의 시작일자
function TForm1.dateBeginOfYear(D: TDateTime): TDateTime;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
Result := EncodeDate(Year, 1, 1);
end;
// 년의 마지막일자
function TForm1.dateEndOfYear(D: TDateTime): TDateTime;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
Result := EncodeDate(Year, 12, 31);
end;
// 월의 시작일자
function TForm1.dateBeginOfMonth(D: TDateTime): TDateTime;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
Result := EncodeDate(Year, Month, 1);
end;
// 월의 마지막일자
function TForm1.dateEndOfMonth(D: TDateTime): TDateTime;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
if Month = 12 then
begin
Inc(Year);
Month := 1;
end
else
Inc(Month);
{월의 다음월의 시작일에서 1을 뺀다}
Result := EncodeDate(Year, Month, 1) - 1;
end;
// 년을 기준으로 몇번째 주인지
function TForm1.dateWeekOfYear(D: TDateTime): Integer;
const
t1: array[1..7] of ShortInt = ( -1, 0, 1, 2, 3, -3, -2);
t2: array[1..7] of ShortInt = ( -4, 2, 1, 0, -1, -2, -3);
var
doy1, doy2: Integer;
NewYear: TDateTime;
begin
NewYear := dateBeginOfYear(D);
doy1 := dateDayofYear(D) + t1[DayOfWeek(NewYear)];
doy2 := dateDayofYear(D) + t2[DayOfWeek(D)];
if doy1 <= 0 then
Result := dateWeekOfYear(NewYear-1)
else if (doy2 >= dateDayofYear(dateEndOfYear(NewYear))) then
Result:= 1
else
Result:=(doy1-1) div 7+1;
end;
// 년을 기준으로 몇번째 일인지
function TForm1.dateDayOfYear(D: TDateTime): Integer;
begin
Result := Trunc(D-dateBeginOfYear(D)) + 1;
end;
// 요일 번호
function TForm1.dateDayOfWeek(D: TDateTime): TDayOfWeek;
begin
Result := TDayOfWeek(Pred(DayOfWeek(D)));
end;
// 윤년인지 검사
function TForm1.dateLeapYear(D: TDateTime): Boolean;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;
// 주어진 일자가 포함된 분기의 시작일
function TForm1.dateBeginOfQuarter(D: TDateTime): TDateTime;
var
Year, Month, Day: Word;
begin
DecodeDate(D, Year, Month, Day);
Result := EncodeDate(Year, (((Month-1) div 3) * 3)+1, 1);
end;
// 주어진 일자가 포함된 분기의 마지막일
function TForm1.dateEndOfQuarter(D: TDateTime): TDateTime;
begin
Result := dateBeginOfQuarter(dateBeginOfQuarter(D)+(3*31)) - 1;
end;
// 주의 시작일
function TForm1.dateBeginOfWeek(D: TDateTime; Weekday: Integer): TDateTime;
begin
Result := D;
while DayOfWeek(Result) <> Weekday do
Result := Result - 1;
end;
// 월의 마지막 일
function TForm1.dateDaysInMonth(D: TDateTime): Integer;
const
DaysPerMonth: array[1..12] of Byte= (31,28,31,30,31,30,31,31,30,31,30,31);
var
Month: Integer;
begin
Month := dateMonth(D);
Result := DaysPerMonth[Month];
if (Month=2) and dateLeapYear(D) then
Inc(Result);
end;
즐코 하시길~