안녕하십니까? 저는 한일정보통신에 다니는 오승섭이라고 합니다.
얼마전 Delphi4.0으로 인사업무프로그램을 개발하여 각공장에 사용자들을 관리하고
있습니다.
프로그램의 수정이 발생하면 각공장에 있는 사용자들이 자동으로 Down받을 수 있도록
프로그램을 만들었는데 화일 크기가 256Kb이상인 화일을 받으면 256Kb만 내려받습니다.
어디서 잘못이 있는지 화일을 올리는 프로그램과 내려받는 프로그램의 Source를 보시고
아시는 분은 꼭 좀 연락바랍니다.....
참고로 DB는 Oracle8.0입니다.
<< 올리는 프로그램...... >>
function TfrmUpLoadUT1.GetLocalTime(a:tfiletime):string;
var mtm: TSystemTime;
at: TFileTime;
ds,ts: ShortString;
begin
FileTimeToLocalFileTime(a,at);
FileTimeToSystemTime(at,mtm);
SetLength(ds, GetDateFormat(LOCALE_USER_DEFAULT, 0, @mtm, NIL, @ds[1], 255) - 1);
SetLength(ts, GetTimeFormat(LOCALE_USER_DEFAULT, time_noseconds, @mtm, NIL, @ts[1], 255) - 1);
Result:=ds+' '+ts;
end;
procedure TfrmUpLoadUT1.FormCreate(Sender: TObject);
begin
SetBounds(0,45,800,555);
end;
procedure TfrmUpLoadUT1.sbSaveClick(Sender: TObject);
var sFileName : String;
I : Integer;
FindData: TWin32FindData;
FindHandle :THandle;
begin
with Memo1.Lines do begin
if Count < 0 then begin
Application.MessageBox('저장할 File을 선택하십시요.','오류',mb_IconStop+mb_Ok);
Exit;
end;
for I := 0 to Count -1 do begin
sFileName := ExtractFileName(Memo1.Lines[I]); // 파일명을 가져와서...
With tbProgUpDown Do Begin
Close;
Open;
IndexFieldNames := 'PUD_GROUP;PUD_NAME';
if FindKey([cbGroup.Values[cbGroup.ValueIndex],sFileName]) then
Edit
else
Insert;
FindHandle := Windows.FindFirstFile(PChar(sFileName), FindData);
try
FieldByName('PUD_DATE').AsDateTime := StrToDateTime(GetLocalTime(FindData.ftLastWriteTime)); // 파일변경일(Modified)
finally
Windows.FindClose(FindHandle);
end;
FieldByName('PUD_GROUP').AsString := cbGroup.Values[cbGroup.ValueIndex];
FieldByName('PUD_NAME').AsString := sFileName;
TBlobField(FieldByName('PUD_FILEDATA')).LoadFromFile(sFileName);
Post;
cbGroupChange(Application);
end;
end;
end;
end;
<< 내려받는 프로그램...... >>
procedure TfrmAutoDownUT1.btnOkClick(Sender: TObject);
var str_value, errMessage : String;
rec_cnt : Integer;
// FindData: TWin32FindData;
// FindHandle :THandle;
// dFileDate : TDateTime;
begin
str_value := 'SELECT EMPNO '+
' FROM USERINFO '+
' WHERE EMPNO = '+''''+edPerNo.Text+'''';
rec_cnt := GetResultSet(DM.cdsExecute, str_value);
if rec_cnt = 0 then begin
Beep;
Application.MessageBox('등록된 사번이 아닙니다.','오류',mb_Ok+mb_IconStop);
Exit;
end;
str_value := 'SELECT A.PUD_GROUP, A.PUD_NAME, A.PUD_DATE, A.PUD_FILEDATA '+
' FROM PROG_UPDOWN A, DOWNOK B '+
' WHERE A.PUD_GROUP = B.DO_GROUP '+
' AND A.PUD_NAME = B.DO_NAME '+
' AND A.PUD_DATE = B.DO_DATE '+
' AND B.EMPNO = '+''''+edPerNo.Text+''''+
' AND B.DO_YN = '+'''N''';
Screen.Cursor := crHourGlass;
pnFindPrg.Visible := True;
Application.ProcessMessages;
Animate1.Active := True;
rec_cnt := GetResultSet(DM.cdsUpDown, str_value);
Screen.Cursor := crDefault;
pnFindPrg.Visible := False;
if rec_cnt > 0 then begin
Beep;
Application.MessageBox(PChar(IntToStr(rec_cnt)+'개의 프로그램이 수정되었습니다.'+#13+
'수정된 프로그램을 DownLoading하겠습니다.'),'Down Loading시작',mb_Ok+mb_IconInformation);
with DM.cdsUpDown do
while not eof do begin
// FindHandle := Windows.FindFirstFile(PChar(DM.cdsUpDown.FieldByName('PUD_NAME').AsString), FindData);
// try
// dFileDate := StrToDateTime(GetLocalTime(FindData.ftLastWriteTime)); // 파일변경일(Modified)
// finally
// Windows.FindClose(FindHandle);
// end;
if UpperCase(Copy(DM.cdsUpDown.FieldByName('PUD_NAME').AsString,
(Length(DM.cdsUpDown.FieldByName('PUD_NAME').AsString) - 2), 3)) = 'EXE' then
TBlobField(DM.cdsUpDown.FieldByName('PUD_FILEDATA')).SaveToFile('C:Program Files인사정보시스템'+DM.cdsUpDown.FieldByName('PUD_NAME').AsString)
else if UpperCase(Copy(DM.cdsUpDown.FieldByName('PUD_NAME').AsString,
(Length(DM.cdsUpDown.FieldByName('PUD_NAME').AsString) - 2), 3)) = 'BPL' then
TBlobField(DM.cdsUpDown.FieldByName('PUD_FILEDATA')).SaveToFile('C:windowssystem'+DM.cdsUpDown.FieldByName('PUD_NAME').AsString);
{ if FileOpen('',fmOpenReadWrite or fmShareExclusive) < 0 then
showmessage('error');
if FileSetDate(Windows.FindFirstFile(PChar(DM.cdsUpDown.FieldByName('PUD_NAME').AsString), FindData),DateTimeToFileDate(DM.cdsUpDown.FieldByName('PUD_DATE').AsDateTime)) = 0 then
showmessage('1111')
else
showmessage('2222');}
str_value := 'UPDATE DOWNOK '+
' SET DO_YN = '+'''Y'''+
' WHERE DO_GROUP = '+''''+DM.cdsUpDown.FieldByName('pud_group').AsString+''''+
' AND DO_NAME = '+''''+DM.cdsUpDown.FieldByName('pud_name').AsString+''''+
' AND EMPNO = '+''''+edPerNo.Text+'''';
errMessage := ExecuteSQL(str_value);
Next;
end;
end;
end;