在数据库中流的读写。 (150分)

T

test01

Unregistered / Unconfirmed
GUEST, unregistred user!
在ACCESS数据库中建立一OLE字段。存放RTF格式的文档。
现通过“流”的方式提取所有已存的RTF文档并合并到一个“流”中。
代码如下:
procedure TForm1.Button3Click(Sender: TObject);
var
s1,s2 : TMemoryStream;
begin
s1 := TMemoryStream.Create;//读取每个记录存放的内容。
s2 := TMemoryStream.Create;//将每个记录合并到此。
with query1 do
begin
First;
while not eof do
begin
TBlobField(query1.FieldByName('公示文本')).SaveToStream(s1);
s2.LoadFromStream(s1);
query1.Next;
end;
end;
RichEdit1.Lines.LoadFromStream(s2);
end;
但很奇怪的是,S2的内容始终为该数据集第一条记录。
何解?我都快要疯掉了。:)。。。。。
 
with query1 do
begin
S1.Clear;
TBlobField(query1.FieldByName('公示文本')).SaveToStream(s1);
S1.Position := 0;
S2.CopyFrom(S1, S1.Size);
query1.Next;
end;

 
没错,要重置流的指针.
 
to Test01:
>>1、现通过“流”的方式提取所有已存的RTF文档并合并到一个“流”中。
>>2、但很奇怪的是,S2的内容始终为该数据集第一条记录。
其实第1点你已经做到了,我估计你主要是想实现第2点。这个问题跟流操作没有关系。
而是RTF文档格式的问题。你试着将S2保存到一个文本文件里,你可以看到所有的数据
库记录其实已经提取并且合并。
 
在我机器上试了你的程序没有问题呀,稍改之后看看:
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2 : TMemoryStream;
begin
try
s1 := TMemoryStream.Create;
s2 := TMemoryStream.Create;
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from 表名');
Open;
First;
while not EOF do
begin
TBlobField(Query1.FieldByName('公示文本'')).SaveToStream(s1);
s2.LoadFromStream(s1);
Next;
end;
end;
Memo1.Lines.LoadFromStream(s2);
finally
s1.Free;
s2.Free;
end;
end;
但OLE字段是文本文件形式的.
 
的确是RTF格式文档的问题。谢谢Kingdeezj.
 
顶部