var
  strm: TADOBlobstream; 
begin
    strm := TADOBlobstream.Create(
      TBlobField(fADO.FieldByName('SpeakMP3')),bmread);
    try
      try
        strm.Position := 0;
        strm.SaveToFile('c:\MP3Temp.Mp3');
      except on E: Exception do
       ShowMessage('保存内存流出错');
      end;
    finally
      strm.Free;
    end;
end;以上代码,在有些机上运行正常,每次都可以得到字段中的MP3数据生成的文件。
可是在有些机上,进入程序后只有第一次能运行,以后再运行总是在保存时出错了。也就是能得到第一次生成的MP3文件。。只有退出程序重新进入才能再得到一个。。
尝试将文件删除DeleteFile();但文件在目录中仍显示,但直接打开却又提示已删除了实在不明白(注:在有些机上删除是正常的)

解决方案 »

  1.   

    我想做的是,MP3歌曲放到数据库中,在点播时取出来再取出当前的MP3字段进行播放,我对流操作不熟悉,不知以上代码有什么问题如果不对,为什么在有些机上没有任何错误。。如果对,为什么又会在有些机上出错呢???如果是与操作系统有关又该如何设置,查遍网上资料都找不取相关问题,所以在此提出,共同学习请教中。
      

  2.   

    >>进入程序后只有第一次能运行,以后再运行总是在保存时出错了什么样的错误提示呀,贴出来看看楼主这样写试试:
    var
      strm: TADOBlobstream;
      fs: TFileStream;
    begin
      fs:=TFileStream.create('c:\MP3Temp.Mp3',fmCreate,fmShareDenyWrite);
      try
        try
          strm := TADOBlobstream.Create(TBlobField(tbl1.FieldByName('SpeakMP3')), bmread);      strm.Position := 0;
          if (strm.size > 0) then
          begin
            strm.SaveToStream(fs);
          end;
        except on E: Exception do
            ShowMessage('保存内存流出错'+E.message);
        end;
      finally
        strm.Free;
        fs.free;
      end;
    end;