我在修改公司2000左右写的程序,最近几年一直就没人动过,问谁谁不知道。现在出现这样一个情况:try
... ...
comment:=fieldbyname('comment').asString;
method_status:=fieldbyname('method_status').asstring;
WriteLog('save to stream layout_defination ...');TBlobField(fieldbyname('layout_defination')).saveToStream( layout_defination );    
WriteLog('save to stream process_defination ...');
TBlobField(fieldbyname('process_defination')).saveToStream( process_defination ); 
WriteLog('save to stream METHOD_DEFINATION ...');
TBlobField(fieldbyname('METHOD_DEFINATION')).saveToStream( METHOD_DEFINATION );
... ...
except
end;上面代码中WriteLog是我为了发现问题所在所写的一个日志函数
在delphi环境中,运行一切正常。
但是单独运行编译好的问题,却出现“Stream read error“的错误。
查看运行日志,日志中显示“2008-4-1 10:13:10 453---save to stream layout_defination ...”
那也就等于说,问题出现在TBlobField(fieldbyname('layout_defination')).saveToStream( layout_defination );  请问大虾们这是为何?
为何在delphi环境中F9运行没问题,到了直接运行exe文件却出现这样的提示?
不得其解,还请各位帮忙……再次先谢过各位!

解决方案 »

  1.   

    检查下process_defination有没有创建,或者在使用的时候已经被释放
      

  2.   

    其实在赋值给流时要对字段值作一个判断,给一段代码你参考:procedure TForm_Car.Car_DBGDblClick(Sender: TObject); 
    var 
     JpgFile:TjpegImage;
      mStream:TMemoryStream;
      i:integer;
    begin
    if CarDetail_Form=nil then
    CarDetail_Form:=TCarDetail_Form.Create(self);
    {当字段为空时才对流赋值及其它的操作}
    if not Car_DataS.DataSet.FieldByName('照片').IsNull then begin{-------如果照片字段不为空时}
       mStream:=TMemoryStream.Create;
      JpgFile:=TjpegImage.Create;
      TBlobField(Car_DataS.DataSet.FieldByName('照片')).SaveToStream(mStream);
      mStream.Position :=0;
      JpgFile.LoadFromStream(mStream);
      CarDetail_Form.Image1.Picture.Assign(JpgFile);
      mStream.Free;
      JpgFile.Free;
    end; for i:=1 to 14 do
     TEdit(CarDetail_Form.FindComponent('Edit'+inttostr(i))).Text:=self.Car_DBG.Columns[i].DisplayText;CarDetail_Form.ShowModal;
    end;
      

  3.   

    还有在delphi环境下运行就能创建,单独运行exe就没创建的可能吗?不过我还是按照你的说法记录了一下日志看了看,
    在使用是确定已经创建了……
      

  4.   

    谢谢GDTOPONE!但是问题是我没动过数据库。
    如果是因为空才出现问题,那么为什么在delphi环境下运行(按F9),却没有这样的错误提示呢?
      

  5.   

    GDTOPONE,
    加了,仍旧一样的问题。
    谢谢!
      

  6.   

    你的DELPHI是不是关掉了运行时的错误提示了?难道在DELPHI中运行时能够显示出第二个LOG文本?如果不能的话,证明DELPHI下运行也是有问题的。
      

  7.   

    如果我关掉了运行时错误提示,那么单步执行时肯定遇到这个异常也能跳到异常保护的except后面的语句啊!问题是我单步运行时,上面的语句全部能通过,不会出现异常。关掉运行时提示,只是运行时不显示错误提示罢了,但不会影响程序的跳转。
      

  8.   

    谢谢关注!我也头一次遇到这样的问题,F8一步一步可以运行,直接运行exe却出现问题,郁闷啊……
      

  9.   

    问题已解,但不知道为什么!诚如trainbox所说,确实环境问题。我按照以前留下的安装程序的说明,先安装了一个叫ADI的什么东西,问题就解决了……难道这是BDE的一个BUG吗?很久很久没用过BDE了,而这个程序确实用的BDE连接数据库……