分解blob字段中的流(100分)

  • 主题发起人 主题发起人 119
  • 开始时间 开始时间
1

119

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位高手,谁有此源程序:
1。能把多个word文档存入一个blob字段中。
2。在此blob字段中,能把此字段中的流分解为若干个word文档。
3。在打印报表中,其中有一个字段来判断是否存为doc 的字段,如果为0则存的是doc流,如果为1则存的是RTF流,
怎样在QReport程序中来区分它们。
其中打印RTF的QReport控件为QReport的专用控件:为RTF时,正常打印;为DOC时,标注[见附录].
请各位高手指点,小弟不胜感激。
在此,谢了先!!!!
EMAIL:_weikun_@163.com
 
发这么多干吗啊,51delphi上我已经回答你了
 
你回答的不对,请再详细的看一看我的问题。
 
你试过了吗?给你贴一段代码,我在一个BLOB字段中存了N个报表,报表类型是未定义的,可能是
FastReport的,也可能是ReportMachine的,也可能是其他报表系统的。

procedure TSysReport.FormShow(Sender: TObject);
var
reps:^Rep;
i:integer;
bm:TClientBlobStream;
begin
inherited;
Reps:=pointer(integer(Fdata[3]));
Connect:=TDispatchConnection(integer(FData[2]));
getvalueMethod:=FData[4];
ParNames:=pointer(integer(Fdata[5]));
ModuleId:=Fdata[6];
rights:=FData[7];
fform:=TForm(integer(FData[8]));
localname:=Fdata[9];
for i:=0 to high(reps^) do
dxPickEdit1.Items.Addobject(Reps^.RepName,TObject(@Reps^));
//读取模块的报表
with SWDataSet1 do
try
RemoteServer:=Connect;
DisableMsg:=true;
open;
if Fields[2].IsNull then
ClientDataSet1.CreateDataSet
else
begin
BM:=TClientBlobStream.Create(TBlobField(Fields[2]),bmread);
bm.Position:=0;
ClientDataSet1.LoadFromStream(BM);
bm.Free;
end;
except
end;
end;

//保存到数据库
procedure TSysReport.DoOK;
var
BM:TClientBlobStream;
begin
ClientDataSet1.CheckBrowseMode;
SWDataSet1.ReadOnly:=false;
SWDataSet1.Edit;
bm:=TClientBlobStream.Create(TBlobField(SWDataSet1.fields[2]),bmwrite);
bm.Position:=0;
ClientDataSet1.SaveToStream(bm);
bm.Free;
SWDataSet1.SaveData;
inherited;
end;

其中SWDataSet1中有一个字段Fields[2]是Blob字段,其中实际保存了一张表,其表结构是:

ClientDataSet1RepName: TStringField;
ClientDataSet1RepType: TStringField;
ClientDataSet1RepVersion: TStringField;
ClientDataSet1MISONo: TStringField;
ClientDataSet1VISONo: TStringField;
ClientDataSet1Remark: TBlobField;
ClientDataSet1Report: TBlobField;
ClientDataSet1RepDef: TBlobField;

OK,明白了?
 
真是谢谢djdsz的热心,今天出去办点事。你的代码我将要试试。
 
既然使用了数据库,又何必自己分解合并文件,多此一举呢?
一个文件就用一条记录,加个标记表示文件类型即可
速度、效率肯定比你分解又合并得来得好,而且灵活性好很多。

非要合并分解得也简单
在流的最后写入当前流中包含的各文件大小信息
然后根据这个信息进入分解。
 
后退
顶部