起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 297|回复: 15

LoadFromStream时出错,急**

[复制链接]
发表于 2008-5-17 12:02:45 | 显示全部楼层 |阅读模式
代码如下:
var
  lStream:TMemoryStream;
begin
  lStream := TMemoryStream.Create;
    with DataSetsdsOtherLog do
    begin
      if not Active then Open;
      if not IsEmpty then
      begin
        if lStream <> nil then
        begin
          lStream.Clear;
          lStream.Position := 0;
          TBlobField(FieldByName('AccountMemo')).SaveToStream(lStream);

          lStream.Position := 0;
          DataSetdsAccount.LoadFromStream(lStream);
        end;
      end;
    end;
在执行到DataSetdsAccount.LoadFromStream(lStream);时出错:
Insufficient memory for this operation.
怀疑和二进制字段内容太大小关系.因为在加载数据比较少的情况都是可以的.
我在TBlobField(FieldByName('AccountMemo')).SaveToStream(lStream);
后加了二句
     lStream.Position := 0;
          TBlobField(FieldByName('AccountMemo')).SaveToFile('e:\a.bin');
发现存的文件160K,而且用文本打开没有看到应有结束字符串,还没出现/></ROWDATA></DATAPACKET>就结束了.
回复

使用道具 举报

发表于 2008-5-17 13:41:34 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2008-5-19 09:02:01 | 显示全部楼层
楼主,问题怎么样了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 10:50:00 | 显示全部楼层
在上面的写法和2楼引用的贴子中是一样的啊?
贴中的内容:
No.4  
1楼代码这么写看下吧。
  lStream :=TMemoryStream.Create;
  try
    TBlobField(DataSetBrokerBZSJJ1.DataSet.FieldByName('QZ')).SaveToStream(lStream);
    lStream.Position := 0;
    RichEdit1.Lines.LoadFromStream(lStream);
  finally
    lStream.Free;
  end;
回复 支持 反对

使用道具 举报

发表于 2008-5-19 10:52:08 | 显示全部楼层
那还有什么问题么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 10:53:36 | 显示全部楼层
在加载数据比较少的情况下,这么写是OK的.
可在一个数据量大的时候,就出错了.



在执行到DataSetdsAccount.LoadFromStream(lStream);时出错:
Insufficient memory for this operation.
怀疑和二进制字段内容太大小关系.因为在加载数据比较少的情况都是可以的.
我在TBlobField(FieldByName('AccountMemo')).SaveToStream(lStream);
后加了二句
     lStream.Position := 0;
          TBlobField(FieldByName('AccountMemo')).SaveToFile('e:\a.bin');
发现存的文件160K,而且用文本打开没有看到应有结束字符串,还没出现/></ROWDATA></DATAPACKET>就结束了.
回复 支持 反对

使用道具 举报

发表于 2008-5-19 10:57:05 | 显示全部楼层
多大的文件啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 11:07:38 | 显示全部楼层
不是文件.是把一个数据集存在里面了.保存的代码:
    with DataSetdsAccount do
    begin
    ...
        if lStream <> nil then
        begin
          lStream.Clear;
          lStream.Position := 0;
          SaveToStream(lStream,TDataPacketFormat.dfXMLUTF8);
          lStream.Position := 0;
          if  not DataSetdsAccount.IsEmpty then
            TBlobField(DataSetsdsOtherLog.FieldByName('AccountMemo')).LoadFromStream(lStream)
          end;
    end
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-19 11:08:49 | 显示全部楼层
大小应该在160K以上.参见6楼中的说明.
回复 支持 反对

使用道具 举报

发表于 2008-5-19 13:51:24 | 显示全部楼层
Insufficient memory for this operation.
内存不足。

楼主可以看一下内存的使用情况。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 14:18 , Processed in 0.043033 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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