300分!关于interbase数据库中 用IBX控件如何实现blob字段的读写,并追加到richedit中 (300分)

  • 主题发起人 主题发起人 bitd
  • 开始时间 开始时间
B

bitd

Unregistered / Unconfirmed
GUEST, unregistred user!
关于interbase数据库中 用IBX控件如何实现blob字段的读写,并追加到richedit中?

有一个表A 有一个字段x(为blob类型的文章),
如何用IBQUERY控件与文件流来操作,从数据库中读出字段x的值显示到richedit中?
另有一个表B,有一个字段Y(为blob类型的文章),
如何用IBQUERY控件与文件流来操作,从数据库中读出字段Y的值,
将该值追加到richedit中?
请给出代码,多谢各位大侠了!
 
代码没有验证,大意如此。
另外,如果你要保留richedit中的格式信息,用richedit1.lines.....是不行的。
var stream:Tmemorystream;
begin


IBQuery1.SQL.text := 'insert into Table1 values (:NID,:SNAME,BDATA)';
stream := Tmemorystream.Create;
try
RichEdit1.Lines.SaveToStream(stream);
stream.Position := 0;


IBQuery1.ParamByName('BDATA').LoadFromStream(Strean,ftMemo);
IBQuery1.ParamByName('NID').value := 1;
IBQuery1.ParamByName('SNAME').value := 'TEST char';

IBQuery1.Transaction.StartTransaction;
try
IBQuery1.ExecSQL;
IBQuery1.Transaction.Commit;
except
IBQuery1.Transaction.Rollback;
showmessage('error');
end;
finally
stream.free;
end;

end;
 
to 三代坦克:
  感谢你的答复,你的代码是保存richedit中的内容,
那么如何实现我说的读出blob类型的字段值并把它显示在richedit上,
而且要实现上面我提到的“追加”?
另外stream.Position := 0;一句中的position属性具体作何解?
  麻烦你了。
也请各位大侠说说。thanks
  
 
首先纠正一下我上文说的错误:
》》另外,如果你要保留richedit中的格式信息,用richedit1.lines.....是不行的。
这句话是错的,lines中保留的是带格式的rtf文本,抱歉。误导。保存后用dbmemo看
是rtf格式文本。

richedit2.Lines.Assign(ibquery2.FieldByName('BDATA'));
就可以读出 bdata字段中保存的数据到richedit2

stream.Position := 0; 把流的指针归零。回到起始位置。
RichEdit1.Lines.SaveToStream(stream);后 stream 指针 到尾部了,
stream.Position := 0 这句可以不用加,因为在LoadFromStream 方法中
有:
procedure TParam.LoadFromStream(Stream: TStream; BlobType: TBlobType);
var
DataStr: string;
Len: Integer;
begin
with Stream do
begin
FDataType := BlobType;
Position := 0;
Len := Size;
SetLength(DataStr, Len);
ReadBuffer(Pointer(DataStr)^, Len);
Self.Value := DataStr;
end;
end;

我加这句是因为我不知道下一个操作是否正确的设置了Position
保险起见。在这里是冗余的。
 
非常感谢你:三代坦克!敬业的回答!祝你好运!谢谢
 
后退
顶部