起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 586|回复: 23

上传文件的问题??**

[复制链接]
发表于 2009-9-22 16:30:31 | 显示全部楼层 |阅读模式
这几段代码
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都能上传不同数据对应的文件)的,当有子窗体的时候,在子窗体上面做上传文件的时候,每条数据对应的都是同一个附件。。。也就是最后上传的那个附件。。。这是咋回事?
回复

使用道具 举报

 楼主| 发表于 2009-9-22 17:10:25 | 显示全部楼层
谁帮忙测下是甚么问题?!!
回复 支持 反对

使用道具 举报

发表于 2009-9-22 18:12:36 | 显示全部楼层
传个例子过来吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 08:39:12 | 显示全部楼层
lizi

lz.part1.rar

1.93 MB, 下载次数: 78

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 08:40:15 | 显示全部楼层
2

lz.part2.rar

1.93 MB, 下载次数: 76

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 08:41:40 | 显示全部楼层
3

lz.part3.rar

587.28 KB, 下载次数: 78

回复 支持 反对

使用道具 举报

发表于 2009-9-23 09:44:53 | 显示全部楼层
[警告]YJHS.LIBRARY: 引用 "Biz:\ZJGLXT\GGHS.LIBRARY" 不存在
[错误]Biz:\ZJGLXT\FIVE_ZYGL\TXWJGL\ZLTXWJML.FUNC.DIR\ZLTXWJMLLB.FORM.PAS(69, 3): URL“Biz:\ZJGLXT\GGHS.LIBRARY”转换为文件名失败

应该少了个资源集
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 09:54:08 | 显示全部楼层
请重新下载那几个附件看看可以么
回复 支持 反对

使用道具 举报

发表于 2009-9-23 10:36:28 | 显示全部楼层
还是运行不了,好像还少Texcelapp这个类,应该是第三方的控件里面的。

楼主自己使用代码在savetodb的时候跟踪一下看看吧,上传附件的时候附件对应数据集的主键是否正确?现在每条数据打开的附件都是同一个附件,首先要确定存入数据库里面的记录是否正确?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 11:08:02 | 显示全部楼层
就是因为它存不了进数据库(在单独一个功能是可以存进数据库的,在功能的子窗体上面做上传就存不进去),我才在SaveToDB;
     后面添加 FRefDataSet.ApplyUpdates;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 00:12 , Processed in 0.053157 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表