procedure TfrmHttz.btnShowBlobsClick(Sender: TObject);
var
  sFileName :string;
  bs:TADOBlobStream;
begin
  bs:=TADOBlobStream.Create(TBlobField(frmData.cdsHtyg.fieldByName('原稿内容')),bmRead); //此句出错,显示 InValid Class TypeCast
  try
    sFileName:=ExtractFilePath(Application.ExeName)+'tmpBlob';
    sFileName:=sFileName+'.'+frmData.cdsHtyg.fieldByName('文件类型').AsString;
    bs.SaveToFile(sFileName);
    OleContainer1.CreateObjectFromFile(sFileName,False);
  finally
    bs.free;
  end;
end;
已经使用了 adoDb,db单元
用 TBlobField(frmData.cdsHtyg.fieldByName('原稿内容')).SaveToFile(sFileName);
可以显示文件内容。
数据库为sql sever 2000 
原稿内容 为image 类型字段

解决方案 »

  1.   

    如果cdsHtyg是一个adotable的话,在开发过程中先把“原稿内容”加到这个table里面试试看。
      

  2.   

    ADO的方法:
    bs:=ADOTable1.CreateBlobStream(ADOTable1.FieldByName('原稿内容'),bmRead);
      

  3.   

    to idilent(成为星星的同时,露出菜鸟的实质):
    cdsHtyg 是客户端的一个ClientDataSet,连接的是一个adotableto oracle_lover(数据库情人):
    运行出错
    [Error] : Incompatible types: 'TADOBlobStream' and 'TStream'
      

  4.   

    昨天刚刚用的。
    procedure TRoomStateFrm.GetImageToList;
      Procedure GetImage;
      var
        vIndex : Integer;
        pic:TBitmap;
        pStream : TADOBlobStream;
      begin
        //..
        with DataModuleFrm.LSBADOQuery do
        begin
          if Active then
            Active := False;
          SQL.Clear;
          SQL.Add('Select * From RoomImagewh');
          Open;
          if RecordCount <> 0 then
          begin
            //..
            First;
            vIndex := 0;
            bImageList.Clear;
            while Not Eof do
            begin
              pStream:=TADOBlobStream.Create(TBlobField(DataModuleFrm.LSBADOQuery.FieldByName('RoomImage')),bmRead);
              Pic:=Tbitmap.Create;
              Try
                Pic.LoadFromStream(pStream);
                BImageList.Insert(vIndex,Pic,Pic);
                Inc(vIndex);
                Next;
              Finally
                Pic.Free;
                pStream.Free;
              end;
            end;
          end;
          Close
        end;
      end;
    begin
      GetImage;
      RoomStateLView.LargeImages := BImageList;
    end;procedure TRoomStateFrm.FormShow(Sender: TObject);
    begin
      GetImageToList;
    end;
      

  5.   

    senhor(百合-&gt;一个月拿颗星来玩......) 
    pStream:=TADOBlobStream.Create(TBlobField(DataModuleFrm.LSBADOQuery.FieldByName('RoomImage')),bmRead);你的这句和我的语句是一样的,为什么我的不行,因为cdsHtyg 是客户端的ClientDataSet吗?
      

  6.   

    你使用我的方法是一下,我在使用两层开发的过程,用ado连接,如果是图片的话,而在adotable没有把字段预先加入的话,以让adotable.active:=true就会出现这个错误,但是把字段加入就没有这个错误了。
      

  7.   

    测试表明:在数据源为adotable时,这段程序没错,是ClientDataSet时报错。
    看来李维的例子没错,
    TBlobField(frmData.cdsHtyg.fieldByName('原稿内容')不支持ClientDataSet