|
这几段代码
constructor TFileDoc.Create(ADataSet: TSQLDataSet;FlowField,FileNameField:String);
begin
inherited create;
FRefDataSet :=ADataSet;
FFlowField :=FlowField;
FFileNameField :=FileNameField;
FContent := TMemoryStream.Create;
end;
destructor TFileDoc.Destroy;
begin
FContent.Free;
inherited;
end;
procedure TFileDoc.LoadFromDB;
var
lBlobField: TBlobField;
begin
FContent.Clear;
FContent.Position := 0;
if not FRefDataSet.Eof then
begin
lBlobField :=TBlobField(FRefDataSet.FieldByName(FFlowField));
lBlobField.SaveToStream(FContent);
end;
end;
procedure TFileDoc.LoadFromFile(const AFileName: string);
begin
if SysUtils.FileExists(AFileName) then
begin
FContent.LoadFromFile(AFileName);
end
else
jsDialogs.ShowWarning(SysUtils.Format('文件%s不存在', [AFileName]),'');
end;
procedure TFileDoc.SaveToFile(const AFileName: string);
begin
FContent.SaveToFile(AFileName);
end;
procedure TFileDoc.SaveToDB;
var
lBlobField: TBlobField;
begin
try
if not (FRefDataSet.State in [TDatasetState.dsInsert,TDataSetState.dsedit]) then
FRefDataSet.Edit;
FRefDataSet.FieldByName(FFileNameField).AsString := Name + '.' + ExpName;
lBlobField := TBlobField(FRefDataSet.FieldByName(FFlowField));
Content.Position := 0;
lBlobField.LoadFromStream(Content);
FRefDataSet.Post;
except
raise Exception.Create('上传失败!');
end;
end;
procedure TFileDoc.UploadExecute;
var
lOpenDialog: TOpenDialog;
begin
lOpenDialog := TOpenDialog.Create(nil);
lOpenDialog.Filter := '所有文件|*.*';
try
if lOpenDialog.Execute then
begin
Name := JSSysUtils.ExtractOnlyFileName(lOpenDialog.FileName);
ExpName := JSSysUtils.GetFileExt(lOpenDialog.FileName);
LoadFromFile(lOpenDialog.FileName);
SaveToDB;
// FRefDataSet.ApplyUpdates;
end else
SysUtils.Abort;
finally
lOpenDialog.Free;
end;
end;
procedure TFileDoc.OpenExecute;
var
lTempFileName: string;
begin
if FRefDataSet.FieldByName(FFileNameField).AsString='' then
begin
jsdialogs.ShowMsg('当前单据还没有上传附印件,请先上传!','');
sysutils.Abort;
end ;
LoadFromDB;
lTempFileName := JSSysUtils.GetSystemTempPath + FRefDataSet.FieldByName(FFileNameField).AsString;
if SysUtils.FileExists(lTempFileName) then
SysUtils.DeleteFile(lTempFileName);
SaveToFile(lTempFileName);
Borland.Delphi.ShellAPI.ShellExecute(0, 'open',PChar(lTempFileName), '', '', Borland.Delphi.Windows.SW_SHOW);
end;
procedure TFileDoc.SaveAsExecute;
var
lFileName: string;
lSaveDialog: TSaveDialog;
begin
lFileName := FRefDataSet.FieldByName(FFileNameField).AsString;
if (lFileName = '') or (lFileName = nil) then
begin
jsdialogs.ShowMsg('当前单据还没有上传附印件,请先上传!','');
sysutils.Abort;
end ;
LoadFromDB;
with Business.Forms.TSaveDialog.Create(nil) do
begin
FileName := lFileName;
if Execute then
begin
if SysUtils.FileExists(FileName) then
if not jsDialogs.ConfirmBox('文件已经存在是否覆盖?', '', 1) then
begin
SysUtils.DeleteFile(FileName);
Exit;
end;
SaveToFile(FileName);
end;
end;
end;
procedure TFileDoc.ClearExecute;
var
lBlobField: TBlobField;
begin
try
if not (FRefDataSet.State in [TDatasetState.dsInsert,TDataSetState.dsedit]) then
FRefDataSet.Edit;
FRefDataSet.FieldByName(FFileNameField).clear;
lBlobField := TBlobField(FRefDataSet.FieldByName(FFlowField));
lBlobField.Clear;
FRefDataSet.ApplyUpdates;
except
raise Exception.Create('清除失败!');
end;
end;
procedure TZLTXWJ.LoadFromFile(FileName: String);
begin
FContent.LoadFromFile(FileName);
end;在只有一个窗体上面是可以上传多个(例如编号001,002,003都能上传不同数据对应的文件)的,当有子窗体的时候,在子窗体上面做上传文件的时候,每条数据对应的都是同一个附件。。。也就是最后上传的那个附件。。。这是咋回事? |
|