起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 231|回复: 10

【结贴】二进制方式上传和下载**

[复制链接]
发表于 2008-11-5 11:01:07 | 显示全部楼层 |阅读模式
我是用 query 实现的考虑到使用标准数据集,附件大了和记录多了打开速度慢 在标准数据集的字段上取消了附件字段的选择)

上传:
      ID := DataSetBroker.DataSet.FieldByName('NOR_TABLE_NO').AsString;
      Query := TQuery.Create(nil);
      Query.ConnectionString:='DATABASEURL=Biz:\SCXTBGPT\SCXTPTSJK.DATABASE';
            Query.Close;
            Query.CommandText:='update TAB_NOR_TABLE set NOR_TABLE_ANNEX1=:NOR_TABLE where NOR_TABLE_NO = '''+ID+'''';
Query.Params.ParamByName('NOR_TABLE').loadfromfile(OpenDialog1.FileName,TFieldType.ftBlob);
Query.Execute;

下载:
var
  Query:TQuery;
  ID:String;
begin
  if DataSetBroker.DataSet.RecordCount>0 then
    begin
      ID := DataSetBroker.DataSet.FieldByName('NOR_TABLE_NO').AsString;
      Query := TQuery.Create(nil);
      Query.ConnectionString:='DATABASEURL=Biz:\SCXTBGPT\SCXTPTSJK.DATABASE';
      Query.CommandText := 'select NOR_TABLE_ANNEX1 from TAB_NOR_TABLE where NOR_TABLE_NO = '''+ID+'''';
      Query.Open;
      SaveDialog1.FileName:=DataSetBroker.Dataset.FieldByName('NOR_File_Name').AsString;
      if(SaveDialog1.Execute) then
        begin
          try
            TBlobField(Query.FieldByName('NOR_TABLE_ANNEX1')).SaveToFile(SaveDialog1.FileName);
          except
            raise exception.Create('文件保存失败!');
          end;
        end;
      Query.Close;
      Query.Free;
    end;
end;

发现上传后,在下载就是乱码了,不知道是什么原因?
(补充说明下:如果使用标准数据集加上附件字段
TBlobField(DataSetBroker.Dataset.FieldByName('NOR_TABLE_ANNEX1')).LoadFromFile(OpenDialog1.FileName);  再用上面的下载代码就不会有乱玛)
回复

使用道具 举报

发表于 2008-11-5 11:27:40 | 显示全部楼层
那你用query也可以跟标准数据集的方式进行村附件的。(或者还是用标准数据集,但是你要这样子做:用两个数据集,一个是主表,取除了图像字段外的,一个是从表,取图像字段,这样子也不会慢了。)
TBlobField(query.FieldByName('NOR_TABLE_ANNEX1')).LoadFromFile(OpenDialog1.FileName);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-5 11:54:34 | 显示全部楼层
不能说明白点吗?我看不懂
回复 支持 反对

使用道具 举报

发表于 2008-11-5 12:30:58 | 显示全部楼层
哪里没看懂呢?
方法1
用TQuery上传附件的写法跟用数据集的写法一样的(对你1楼说的上传,没有验证,不知道是否可行,但看你说(补充说明下:如果使用标准数据集加上附件字段
TBlobField(DataSetBroker.Dataset.FieldByName('NOR_TABLE_ANNEX1')).LoadFromFile(OpenDialog1.FileName);  再用上面的下载代码就不会有乱玛)
),那么:
TBlobField(query.FieldByName('NOR_TABLE_ANNEX1')).LoadFromFile(OpenDialog1.FileName);

方法2
对于你1楼说的:
我是用 query 实现的考虑到使用标准数据集,附件大了和记录多了打开速度慢 在标准数据集的字段上取消了附件字段的选择)

那就使用两个数据集的方式:
A数据集--sql语句取非图像字段的所有字段。
B数据集--sql语句取图像字段
A是主表,B是从表,这样子打开数据集的时候就会很快了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-5 13:42:41 | 显示全部楼层
方法1 我试了 报错
      ID := DataSetBroker.DataSet.FieldByName('NOR_TABLE_NO').AsString;
      Query := TQuery.Create(nil);
      Query.ConnectionString:='DATABASEURL=Biz:SCXTBGPTSCXTPTSJK.DATABASE';
      Query.CommandText := 'select NOR_TABLE_ANNEX1 from TAB_NOR_TABLE where NOR_TABLE_NO = '''+ID+'''';
      Query.Open;
query.Edit;
TBlobField(query.FieldByName('NOR_TABLE_ANNEX1')).LoadFromFile(OpenDialog1.FileName);
    query.Post;
    query.ApplyUpdates;

111111111111.jpg

18.65 KB, 下载次数: 113

回复 支持 反对

使用道具 举报

发表于 2008-11-5 14:21:54 | 显示全部楼层
query.ApplyUpdates;
去掉他看一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-5 14:32:53 | 显示全部楼层
去掉query.ApplyUpdates; 错不报了,但是好象数据没保存到字段里
(用下载代码,得到空内容的文件)
回复 支持 反对

使用道具 举报

发表于 2008-11-5 14:49:29 | 显示全部楼层
更新选项你怎么设置的?
回复 支持 反对

使用道具 举报

发表于 2008-11-5 14:51:21 | 显示全部楼层
我这么测试了一下:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Query2.Edit;
    TBlobField(Query2.FieldByName('TX')).LoadFromFile(OpenDialog1.FileName);
    Query2.Post;
    Query2.ApplyUpdates;
  end;
end;
query2的sql语句:
Query2.CommandText := ' select id,tx from b
query2的更新选项中:
更新语句:
update b set tx=:tx where id=:id

然后保存没有问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-5 15:26:40 | 显示全部楼层
我是用 Query := TQuery.Create(nil);  生成的,
选项怎么设置?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-25 23:36 , Processed in 0.044391 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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