起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1485|回复: 4

[分享]Business3中存取BLOB及OLE字段的方法

[复制链接]
发表于 2004-4-2 18:00:28 | 显示全部楼层 |阅读模式
【从一个dsMB中复制二进制流的图片到ds1中】
var
  lStream: TMemoryStream;
begin
  //图像
  lStream := TMemoryStream.Create;
  try
    ds1.DataSet.Append;
    ds1.DataSet.FieldByName('ID').Asstring := JSCommon.CreateGUIDStr;
    TBlobField(dsMB.DataSet.FieldByName('PicMB')).SaveToStream(lStream); //其中的PicMB对应物理表中一个进制流的图片字段
    lStream.Position := 0;
    TBlobField(ds1.DataSet.FieldByName('ZD2')).LoadFromStream(lStream); //其中的ZD2对应物理表中一个进制流的图片字段
    ds1.DataSet.Post;
    ds1.DataSet.ApplyUpdates;
  finally
    lStream.Free;
  end;
end;

【通过OpenDialog选择一个图片文件】
begin
  //图像
  if OpenDialog1.Execute then
  begin
    ds1.DataSet.Append;
    ds1.DataSet.FieldByName('ID').Asstring := Business.System.JSCommon.CreateGUIDStr;
    TBlobField(ds1.DataSet.FieldByName('ZD2')).LoadFromFile(OpenDialog1.FileName);
    ds1.DataSet.Post;
    ds1.DataSet.ApplyUpdates;
  end;
end;

【从一个dsMB中复制OLE文件如Word文档到ds1中】注意数据字典中的二进制流文件如果选择表现类型为OLE,则也要同时选择SQLType为非结构化,否则文件有32K大小的限制。
var
  lStream: TMemoryStream;
begin
  //Word
  lStream := TMemoryStream.Create;
  try
    ds1.DataSet.Append;
    ds1.DataSet.FieldByName('ID').Asstring := JSCommon.CreateGUIDStr;
    TBlobField(dsMB.DataSet.FieldByName('WordMB')).SaveToStream(lStream);//其中的WordMB对应物理表中一个进制流的OLE字段
    lStream.Position := 0;
    TBlobField(ds1.DataSet.FieldByName('ZD1')).LoadFromStream(lStream); //其中的ZD1对应物理表中一个进制流的OLE字段
    ds1.DataSet.Post;
    ds1.DataSet.ApplyUpdates;
  finally
    lStream.Free;
  end;
end;

【通过OpenDialog选择一个OLE文件】
var
  lStream: TStream;
begin
  if OpenDialog1.Execute then
  begin
    ds1.DataSet.Append;
    ds1.DataSet.FieldByName('ID').Asstring := JSCommon.CreateGUIDStr;

    TOleContainer(OLEZXHYWXX.TJLST1(DocViewOLEZXHYWXX_JLST1.Doc).DataEditOLEZD
      .InplaceControl).CreateObjectFromFile(OpenDialog1.FileName, False);
    lStream := ds1.DataSet.CreateBlobStream(ds1.Dataset.FieldByName('OLEZD'),
      TBlobStreamMode.bmReadWrite);
    TOleContainer(OLEZXHYWXX.TJLST1(DocViewOLEZXHYWXX_JLST1.Doc).DataEditOLEZD
      .InplaceControl).SaveToStream(lStream);
    lStream.Free;

    ds1.DataSet.Post;
    ds1.DataSet.ApplyUpdates;
  end;
end;

另外可以通过如下代码获得系统的OLE文件选择对话框
  if TOLEContainer(OLEZXHYWXX.TJLST1(DocViewOLEZXHYWXX_JLST1.Doc).DataEditOLEZD.InplaceControl).InsertObjectDialog then
  begin
    ...
  end;
回复

使用道具 举报

 楼主| 发表于 2004-4-2 18:01:26 | 显示全部楼层

【补充:保存为本地文件的方法】

begin
  if SaveDialog1.Execute then
  begin
    TBlobField(ds1.DataSet.FieldByName('...')).SaveToFile(SaveDialog1.FileName);
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2008-8-14 23:24:15 | 显示全部楼层
如果我想读取二进制文件后,保存到本地的同时把文件还原到保存初的格式怎么操作呢?
回复 支持 反对

使用道具 举报

发表于 2008-8-15 08:49:28 | 显示全部楼层
还原到保存初的格式
这句话是什么意思?你的初格式是什么样的?

这个一个分享帖,所以还是希望楼主,自己发一个帖子
回复 支持 反对

使用道具 举报

发表于 2008-8-15 08:51:41 | 显示全部楼层
“保存初的格式” 这怎么理解,不明白楼主的意思
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-2-5 17:38 , Processed in 0.034193 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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