**我想把RxRichEdit里面图文混编的内容保存到数据库里面,用什么方法最好 RxRichEdit里面既有图片又有文字,用什么方法保存,即节省空间,效率又比较高呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 保存成流格式在数据库中,不过如果数据很大的话,保存成文件存放在电脑上吧,数据库就只保存路径流格式大概像这样:var MS:TMemoryStream;begin MS:=TMemoryStream.Create; try Adoquery1.append; RxRichEdit.Lines.SaveToStream(MS); MS.Position:=0; TBlobField(Adoquery1.FieldByName('KKOO')).LoadFromStream(MS); Adoquery1.post; finally MS.Free; end;end; RxRichEdit存储文件流,然后将流存入数据库 我大概里面有些图片文字吧,最多可能是有2,3M的内容,数据库为ACESS,主要是希望能节省空间,速度又快点 我刚才试验了一下,发现一个40KB的图片,要占差不多10MB样子,这也太大了,空间占的好大,除了保存在本地磁盘上,没有别的方法可以节省空间了吗 怎么可能,代码show出来。流只是一个字节读写的封装而已,影响最终大小的还是看你代码怎么写。 刚才由重新试验了,把原来的表删除了,发现了数据库的大小还是20M,而当我重新插入几个图片放进去的时候,数据库的大小也还是20M,并我没有像我第一次的时候插入的时候那种情况,每插入一张表,数据库就快速增长,这是为什么呢?数据库ACCESS InsertNode :=RzTV_Function.Selected ; if (InsertNode <>nil) and (InsertNode.Level <>0) then begin Parent_Name :=InsertNode.Parent.Text; Child_Name :=InsertNode.Text ; Ms :=TMemoryStream.Create ; try with frm_Common do begin AdoCon_Formula.Connected :=True ; Adoqry_Save.Close ; Adoqry_Save.SQL.Clear ; Adoqry_Save.SQL.Add('Select * from '+Parent_Name +' where Type = :c'); Adoqry_Save.Parameters.Items[0].Value :=Child_Name ; Adoqry_Save.Open ; Adoqry_Save.Edit ; RxRedt_Formulas.Lines.SaveToStream(Ms); Ms.Position :=0; TBlobField(Adoqry_Save.FieldByName('Content')).LoadFromStream(Ms); Adoqry_Save.Post ; end; finally Ms.Free ; end; end;end;下面是我的数据库加入字段后的大小和删除后的数据库大小,有两个表,电气这个表是专门用来存放“流的”,我删除了电气这个表后,数据大小没有改变 流的大小直接通过Ms.Size来判断单位是字节;RxRedt_Formulas.Lines.SaveToStream(Ms);这种代码中保存了文本,并不会保存richedit中的其他内容。 但是图片肯定也保存进去了,我用的是rxrichEdit,因为我可以从数据库中直接读出图片啊,恩,我试验一下看下MS.SIZE 单位是字节吗?我刚才插入一个图片后,显示的SIZE是456881,然后我把图片删除了以后显示的SIZE是164 刚才我试验了,SIZE的单位是字节吗?刚才我写了几个字,我看了一下,SIZE的大小是180,如果我添加了一个图片,SIZE就变为456897,为什么呢 RichEdit 存为流同样是 rtf编码,这个编码就是以16进制的文本来保存二进制数据,一个二进制字节,要用3个字节来保存,再加上格式控制码字节会比3个字节还多, (类似\hh 的文本,当然占的空间大了),既然是可见纯文本,用Zlib压缩一下吧,压缩比能达到5:1,空间是很可观的,效率上稍微要慢一点点,不过对单记录来说不会有感觉的。首先把RichEdit存到内存流中,然后用TCompressionStream压缩,最后把输出流保存到数据库中,解压缩反之,用TDecompressionStream而已。 关于银行在线支付 用EnumWindows枚举出所有正在运行的窗体后,无法将指定的窗体最大化? 有没有能显示一个复合内容的控件? 老问题:TQuery:插入一条记录提交后其他有记录会隐藏不见 这本书怎么样? 关于压缩!!!!!!!!!! 安装程序的制作?急!急!急!小弟只有50分的家底了。 dbgrideh运行报错!!帮帮我! 和访问数据库有关的问题。 用InternetExpress发现一个严重的问题 错误Line to long on line 181 求mysql数据库备份的问题 delphi Webbrowser控件 复制与粘贴问题
var
MS:TMemoryStream;
begin
MS:=TMemoryStream.Create;
try
Adoquery1.append;
RxRichEdit.Lines.SaveToStream(MS);
MS.Position:=0;
TBlobField(Adoquery1.FieldByName('KKOO')).LoadFromStream(MS);
Adoquery1.post;
finally
MS.Free;
end;
end;
怎么可能,代码show出来。流只是一个字节读写的封装而已,影响最终大小的还是看你代码怎么写。
if (InsertNode <>nil) and (InsertNode.Level <>0) then
begin
Parent_Name :=InsertNode.Parent.Text;
Child_Name :=InsertNode.Text ;
Ms :=TMemoryStream.Create ;
try
with frm_Common do
begin
AdoCon_Formula.Connected :=True ;
Adoqry_Save.Close ;
Adoqry_Save.SQL.Clear ;
Adoqry_Save.SQL.Add('Select * from '+Parent_Name +' where Type = :c');
Adoqry_Save.Parameters.Items[0].Value :=Child_Name ;
Adoqry_Save.Open ;
Adoqry_Save.Edit ;
RxRedt_Formulas.Lines.SaveToStream(Ms);
Ms.Position :=0;
TBlobField(Adoqry_Save.FieldByName('Content')).LoadFromStream(Ms);
Adoqry_Save.Post ;
end;
finally
Ms.Free ;
end;
end;
end;
下面是我的数据库加入字段后的大小和删除后的数据库大小,
有两个表,电气这个表是专门用来存放“流的”,我删除了电气这个表后,数据大小没有改变
RxRedt_Formulas.Lines.SaveToStream(Ms);这种代码中保存了文本,并不会保存richedit中的其他内容。
首先把RichEdit存到内存流中,然后用TCompressionStream压缩,最后把输出流保存到数据库中,解压缩反之,用TDecompressionStream而已。