起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1440|回复: 49

【结贴】二进制出现乱码的问题 。。。

[复制链接]
发表于 2009-9-21 08:35:41 | 显示全部楼层 |阅读模式
我用二进制保存文件,上传代码如下:
var
  lStream: TStream;
begin
try
  lStream := Query1.CreateBlobStream(Query1.FieldByName('WJNR'),TBlobStreamMode.bmRead);
  DBroker_XMXX.DataSet.Append;
  DBroker_XMXX.DataSet.FieldByName('LX').AsString:='首页';   //类型
  DBroker_XMXX.DataSet.FieldByName('MC').AsString:=Query1.FieldByName['SYZL'].AsString;  //名称
  TBlobField(DBroker_XMXX.DataSet.FieldByName('NR')).LoadFromStream(lStream);   //二进制流
  DBroker_XMXX.DataSet.ApplyUpdates;
   finally
    lStream.Free;
  end;
end;
----------------------------------------------------------------------------------
我保留为本地的代码如下 :
strFileName :='C:\GXZJY-DY.XLS';
TOleContainer(DataEditOLE1.InplaceControl).SaveAsDocument(strFileName);  //这句保存到本地后,Excel 没有内容
TBlobField(DataSetBrokerDY.DataSet.FieldByName('NR')).SaveToFile(strFileName); //这句保存到本地后 Excel会出现 乱码
该怎么解决啊 ??
回复

使用道具 举报

 楼主| 发表于 2009-9-21 10:04:56 | 显示全部楼层
??
那么久都没人顶
回复 支持 反对

使用道具 举报

发表于 2009-9-21 10:47:20 | 显示全部楼层
lStream := Query1.CreateBlobStream(Query1.FieldByName('WJNR'),TBlobStreamMode.bmRead);

文件是怎么存到query1中的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-21 10:56:11 | 显示全部楼层
TBlobField(Query1.FieldByName('NR')).LoadFromStream(lStream);
回复 支持 反对

使用道具 举报

发表于 2009-9-21 11:10:21 | 显示全部楼层
我是说:
如何将excel文件内容存储到lstream中的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-21 11:50:57 | 显示全部楼层
TOleContainer(DataEditOLE.InplaceControl).CreateObjectFromFile(tempFilename,false);
          lStream :=DataSetBrokerXMXX.DataSet.CreateBlobStream(DataSetBrokerXMXX.DataSet.FieldByName('NR'),TBlobStreamMode.bmReadWrite);
回复 支持 反对

使用道具 举报

发表于 2009-9-21 13:39:32 | 显示全部楼层
tempFilename就是你存的那个excel文件么?
DataEditOLE关联的就是下面DataSetBrokerXMXX.DataSet.FieldByName('NR')这个字段么?
如果是你像下面这样对lStream(TMemoryStream类型)赋值看看呢?
TOleContainer(DataEditOLE.InplaceControl).SaveToStream(lStream);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-21 14:44:36 | 显示全部楼层
tempFilename就是你存的那个excel文件么?
答 : 是
DataEditOLE关联的就是下面DataSetBrokerXMXX.DataSet.FieldByName('NR')这个字段么?
答 : 是
如果是你像下面这样对lStream(TMemoryStream类型)赋值看看呢?
TOleContainer(DataEditOLE.InplaceControl).SaveToStream(lStream);
有什么用?好像没什么效果吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-21 14:45:59 | 显示全部楼层
我的二进制文件存在数据表中
TOleContainer(DataEditOLE.InplaceControl).SaveToStream(lStream);有什么用??
回复 支持 反对

使用道具 举报

发表于 2009-9-21 14:56:52 | 显示全部楼层
TOleContainer(DataEditOLE.InplaceControl).SaveToStream(lStream);有什么用??按照olecontainer的格式存储成文件。如果lStream的格式不符合olecontainer要求,会有乱码。

您的问题主要是不能确定lstream是用什么方式存储的,所以直接存储成文件产生了乱码
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 00:10 , Processed in 0.043167 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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