Q&A

  • 256Kb이상인 화일을 내려받기하려면 ......
안녕하십니까? 저는 한일정보통신에 다니는 오승섭이라고 합니다.

얼마전 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;

0  COMMENTS