관리하는 데이타 중에 매년 데이타를 업데이트해야하는 필드가 있는데, 이를 효율적으로 관리할 수 있는 방안을 찾고자 합니다.
자세히 말씀드리면 필드1에 하나의 날짜가 입력되면 이 날짜와 현재 시스템 날짜(원래는 년도만 의미있음)의 차 값 + 1을 관리하여야 합니다. 즉 시스템 날짜가 2001년도이고 필드1의 날짜가 2001이면 1, 시스템 날짜가 2002이면 2 하는 형태입니다.
현재는 무식하게 필드1 입력시 초기값으로 필드2값을 1로 두고, 매년 필드2+1 하는 방식으로 일괄처리하고 있는데, 이 또한 번거롭고 해서 좀더 효율적인 방안이 있으면 합니다.
또한가지, 디비에디트1에 하나의 날짜를 입력하고, 엔터키를 입력하면 디비에디트2의 값을 디비에디트1의 값 + 2달(또는 60일)인 값으로 입력을 하고 싶습니다.이리저리 StrTodate, DateToStr을 써서 만들어도 원하는 값이 나오지 않는군요.
제발, 바쁘시더라두 많은 조언 부탁드립니다.
> 관리하는 데이타 중에 매년 데이타를 업데이트해야하는 필드가 있는데, 이를 효율적으로 관리할 수 있는 방안을 찾고자 합니다.
>
> 자세히 말씀드리면 필드1에 하나의 날짜가 입력되면 이 날짜와 현재 시스템 날짜(원래는 년도만 의미있음)의 차 값 + 1을 관리하여야 합니다. 즉 시스템 날짜가 2001년도이고 필드1의 날짜가 2001이면 1, 시스템 날짜가 2002이면 2 하는 형태입니다.
>
> 현재는 무식하게 필드1 입력시 초기값으로 필드2값을 1로 두고, 매년 필드2+1 하는 방식으로 일괄처리하고 있는데, 이 또한 번거롭고 해서 좀더 효율적인 방안이 있으면 합니다.
>
> 또한가지, 디비에디트1에 하나의 날짜를 입력하고, 엔터키를 입력하면 디비에디트2의 값을 디비에디트1의 값 + 2달(또는 60일)인 값으로 입력을 하고 싶습니다.이리저리 StrTodate, DateToStr을 써서 만들어도 원하는 값이 나오지 않는군요.
>
> 제발, 바쁘시더라두 많은 조언 부탁드립니다.
안냐세영? UserSpace입니당.
우선 질문이 정확하게 이해가 안가는 관계로 제가 이해한 만큼만 설명할께영.
괜찮죠?
첫번째는 ...
var
szDate1, szDate2 : String;
begin
// Edit1.Text = '2001' 이라 가정
DateTimeToString( szDate1, 'YYYY', Edit1.Text );
DateTimeToString( szDate2, 'YYYY', Now );
Edit2.Text := IntToStr( StrToInt( szDate1 ) - StrToInt( szDate2 ) + 1 );
end;
이라고 하면 될것 같은데... 쩝.
다른 하나는 제가 가지고 있는 정보인데 좀 보세여
// 주어진 날짜를 disc 만큼 더하거나 빼는 함수
function TForm1.IncDec_date(yyyy,mm,dd: Integer; disc: Real): String;
var
MyDate: TDateTime;
Convert_OK: Boolean;
begin
if (yyyy <= 0) or (mm <= 0) or (dd <= 0) then
begin
IncDec_date := '';
System.exit;
end;
if disc = 0 then
begin
try
Convert_OK := True;
MyDate := EncodeDate(yyyy, mm, dd);
except // 예외가 발생했다는 것은 날짜가 잘못 되었다는 의미입니다
on EConvertError do
Convert_OK := False;
end;
if Convert_OK then
begin
IncDec_date := FormatDateTime('yyyymmdd', MyDate);
end
else
begin
IncDec_date := '';
end;
end
else
begin
Convert_OK := True;
try
MyDate := EncodeDate(yyyy, mm, dd);
except
on EConvertError do
Convert_OK := False;
end;
if Convert_OK then
begin
IncDec_date := FormatDateTime('yyyymmdd', MyDate+disc);
end
else
begin
IncDec_date := '';
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// 정확히 입력된 날짜인지를 검사
if IncDec_date(StrToIntDef(Copy(Edit1.Text,1,4),0),
StrToIntDef(Copy(Edit1.Text,5,2),0),
StrToIntDef(Copy(Edit1.Text,7,2),0),
0) = '' then
begin
MessageBox(Handle, '날짜를 정확히 입력하세요.', '입력오류', MB_ICONWARNING);
System.Exit;
end;
// 아래 365 * 2 가 2년 후를 일수로 바꾸어서 날짜를 증가시킨 예제입니다
// 반대로 음수를 지정하면 날짜를 빼는 효과가 있겠죠
Edit2.Text := IncDec_date(StrToIntDef(Copy(Edit1.Text,1,4),0),
StrToIntDef(Copy(Edit1.Text,5,2),0),
StrToIntDef(Copy(Edit1.Text,7,2),0),
365 * 2);
end;