起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 184|回复: 7

【结贴】TIOStream怎么使用?**

[复制链接]
发表于 2008-9-18 11:01:04 | 显示全部楼层 |阅读模式
请问平台中的TIOStream怎么使用,怎么和TMemoryStream进行转换?
回复

使用道具 举报

发表于 2008-9-18 11:13:15 | 显示全部楼层
用TIOStream要做什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-18 11:21:18 | 显示全部楼层
我这里项目中,客户要求套打,内容很简单,但客户要求可以自己调整打印的位置和文字。我在平台中找到TSheetGrid这个类,用它的Sheet属性读取表格文档。我想把修改的表格文档存储到数据库的Blob字段中,然后还原。不知到您有什么好方法解决这个问题吗。
回复 支持 反对

使用道具 举报

发表于 2008-9-18 11:31:27 | 显示全部楼层
楼主,把你写的代码贴上来看看吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-18 11:36:15 | 显示全部楼层
unit MainForm;

interface

uses
  Business.System, Business.Model, Business.Forms, BGWD, Business.Data;

type
  TMainForm = class(TForm)
    FuncBroker: TFuncBroker;
    InfoBrokerBGWD: TInfoBroker;
    ControlBar: TControlBar;
    DocViewBar: TDocViewBar;
    Button1: TButton;
    Button2: TButton;
    ds: TDataSetBroker;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel: TPanel;
    DocView1: TDocView;
    Panel1: TPanel;
    Button3: TButton;
    procedure BizFormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    {private declarations}
  public
    {public declarations}
    ASheetGrid: TSheetGrid;
    BSheetGrid: TSheetGrid;
    BSheet: TSheet;
  end;

implementation


procedure TMainForm.BizFormCreate(Sender: TObject);
begin
  ASheetGrid:= TSheetGrid.Create(self);
  ASheetGrid.Parent:= self.Panel;
  ASheetgrid.Align:= TAlign.alClient;


  ASheetGrid.Sheet:=  TSheetDoc(DocView1.Doc).Sheet;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  lExporter: TSheetExporter;
begin
  lExporter:= TSheetExporter.Create(self);
  lExporter.Sheet := TBG(DocView1.Doc).Sheet;
  lExporter.PageInfo := TBG(DocView1.Doc).PageInfo as TSheetPageInfo;

  lExporter.HFSheet := TBG(DocView1.Doc).HF.Sheet;

  lExporter.Preview(nil);

end;

procedure TMainForm.Button2Click(Sender: TObject);
var
  aStream: TMemoryStream;
begin
  aStream:= TMemoryStream.Create;
  TBG(DocView1.Doc).SaveToStream(aStream);
  if not ds.DataSet.Active then ds.DataSet.Open;
  ds.DataSet.Edit;
  TBlobField(ds.DataSet.FieldByName('DocFile')).LoadFromStream(aStream);
  ds.DataSet.Post;
  aStream.Free;
end;

procedure TMainForm.Button3Click(Sender: TObject);
var
  aStream: TMemoryStream;
  bStream: TIOStream;
begin
  aStream:= TMemoryStream.Create;
  bStream:= TIOStream.Create;
  TBlobField(ds.DataSet.FieldByName('DocFile')).SaveToStream(aStream);
  bStream.CopyFrom(aStream,aStream.Size);  //这行出错
  BSheetGrid:= TSheetGrid.Create(self);
  BSheetGrid.Parent:= self.Panel1;
  BSheetgrid.Align:= TAlign.alClient;
  BSheet:= TSheet.Create(BSheetGrid);
  BSheetGrid.Sheet:= BSheet;

  BSheet.LoadFromStream(bStream);
  aStream.Free;
end;

end.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-18 11:38:17 | 显示全部楼层
procedure TMainForm.Button2Click(Sender: TObject); 是保存表格文档到数据Blob字段
procedure TMainForm.Button3Click(Sender: TObject);是读取数据,但转换失败:Stream Read ERRor
回复 支持 反对

使用道具 举报

发表于 2008-9-19 08:53:39 | 显示全部楼层
TIOStream不可实例化,把TMemoryStream强制转换成TIOStream使用就可以
var
  aStream: TMemoryStream;
  bStream: TIOStream;
begin
  aStream:= TMemoryStream.Create;
  bStream:= TIOStream.Create;
  TBlobField(ds.DataSet.FieldByName('FContent')).SaveToStream(aStream);

  aStream.Position := 0;

  //bStream.CopyFrom(aStream,aStream.Size);  //这行出错
  BSheetGrid:= TSheetGrid.Create(self);
  BSheetGrid.Parent:= self.Panel1;
  BSheetgrid.Align:= TAlign.alClient;
  BSheet:= TDataSheet.Create(BSheetGrid);
  BSheetGrid.Sheet:= BSheet;

  BSheet.LoadFromStream(TIOStream(aStream));
  aStream.Free;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-19 11:41:37 | 显示全部楼层
谢谢,问题已经解决
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 06:37 , Processed in 0.039156 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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