프로그램에서 일정 시간 간격으로 파일의 새로운 데이타를 읽어서 db에 저장해야 합니다.
예를 들어 1분 간격으로 텍스트 파일에 접근해서 새롭게 추가된 데이타를 읽어서 db에 저장해야죠.
그런데 Timer사용했었는데요. 테스트중에 실행,종료,실행,종료 반복하다보니
시스템 자원이 바닥났다고? 나오고 디비에 데이타가 들어가질않네요.
뭐가 문제 일까요?
소스는 다음과 같아요.
procedure TForm1.Timer1Timer(Sender: TObject);
var
F1: TextFile;
S: String[255];
startdate:TDateTime;
tmpstmp:TTimeStamp;
today,currtime:TDateTime;
List: TStringList;
i : integer;
tYear,tMonth,tDay,tHour,tMin,tSec,MSec:Word;
date,time,value1, value2,year,temp,hh,mm : string;
begin
S:='';
Table1.Open;
AssignFile(F1, 'c:/pc208w/test1.dat');
Reset(F1);
i := 0;
try
while not Eof(F1) do
begin
Readln(F1,S);
List := TStringList.Create;
List.CommaText := s;
year := List[1];
date := List[2];
time := List[3];
value1 := List[4];
startdate := EncodeDate(1899,12,30);
tmpstmp := DateTimeToTimeStamp(startdate);
tmpstmp.Date := tmpstmp.Date + StrToInt(date);
today := TimeStampToDateTime(tmpstmp);
DecodeDate(today,tYear,tMonth,tDay);
Label1.Caption := IntToStr(i);
//DecodeTime(StrToInt(time),tHour,tMin,tSec,MSec);
//currtime := EncodeTime(tHour,tMin,tSec,MSec);
if Length(time)=3 then
begin
hh:='0'+Copy(time,0,1);
mm := Copy(time,2,2);
end
else if Length(time)=4 then
begin
hh := Copy(time,0,2);
mm := Copy(time,3,2);
end
else
begin
hh := '00';
mm := '00';
end;
today := EncodeDate(StrToInt(year),tMonth,tDay);
// currtime := EncodeTime(tHour,tMin,0,0);
table1.Insert;
table1['Date'] := today;
table1['Time'] :=hh + ':'+ mm;
table1['Value1'] := value1;
// table1['Value2'] := value2;
table1.Post;
S:='';
date := '';
time := '';
value1 := '';
// value2 := '';
end;
finally
CloseFile(F1);
Table1.Close;
end;
타이머 간격은 30초로 되 있어요.
end;