现在 ORACLE 表已经建立BLOB 字段,现用DELPHI 存取时出现“无效数据类型”错误,请各位大虾多多指点,高分相送!!!

解决方案 »

  1.   

    使用TMemoryStream和TBlobField来实现
    如:
    var a : TMemoryStream;
    a:=TMemoryStream.Create;
    image1.Picture.Bitmap.SaveToStream(a);
    TBlobField(query1.FieldByName('字段名')).LoadFromStream(a);
    query1.Post;
    写的过程正好相反
      

  2.   

    或:
    procedure TForm1.DBSaveToClick(Sender: TObject);
    var
      Str : String;
      Jpeg : TJPEGIMAGE;
      bmp :TBitmap;
    begin
      if Adotable1.FieldByName('pic').AsString ='' then
        exit
      else begin
        bmp:=TBitmap.Create;
        bmp.Assign(DBImage1.Picture.Bitmap);
      end;
      if savePicturedialog1.Execute then
        begin
         Str := ExtractFileExt(savePictureDialog1.filename);
         Str := Copy(Str,2,3);
        //仅支持bmp和jpg格式
         if Str = 'bmp' then bmp.SaveToFile(savePicturedialog1.FileName)
         else if Str = 'jpg' then
         begin
           Jpeg := TJPEGIMAGE.Create;
           Jpeg.Assign(bmp);
           Jpeg.SaveToFile(savePictureDialog1.FileName);
         end
         else
           ShowMessage('不支持其它格式!');
        end;
    end;
      

  3.   

    cg1120你好:
      我现在是如果这个表中含有二进制字段,则TABLE 的 ACTIVE 置为 TRUE 时会出现错误!
      

  4.   

    //To write to Blob;
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      blob: TBlobStream; 
    begin 
      blob := myDataset.CreateBlobStream(myDataset.FieldByName('myBLOB_test'), bmWrite); 
      try 
        blob.Seek(0, soFromBeginning); 
        fs := TFileStream.Create('E:\myFile.JPG', fmOpenRead or 
          fmShareDenyWrite); 
        try 
          blob.CopyFrom(fs, fs.Size) 
        finally 
          fs.Free 
        end; 
      finally 
        blob.Free 
      end; 
    end; 
     
    // To load from BLOB: 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      blob: TBlobStream; 
    begin 
      blob := myDataset.CreateBlobStream(myDataset.FieldByName('myBLOB_test'), bmRead); 
      try 
        blob.Seek(0, soFromBeginning); 
        with TFileStream.Create('E:\myFile.JPG', fmCreate) do 
          try 
            CopyFrom(blob, blob.Size) 
          finally 
            Free 
          end; 
      finally 
        blob.Free 
      end; 
    end; 
      

  5.   

    cg1120你好:
       用 AD0TABLE 连接表时(含有二进制字段,类型为 BLOB ),ACTIVE 置为 TRUE 时会出现错误!是否,我的ORACLE 数据库中的表设置有问题,我是用 SQL 语句创建的表,手工创建也用过。是否有其它设置,烦请告知!!!
      

  6.   

    CG1120:谢谢你的代码,等一会一定重谢,但ADOTABLE 的 ACTIVE 不能置为 TRUE 到底是什么原因呢?
      

  7.   

    好像跟选择的驱动有关,微软的驱动好像是有这个问题,选择Oralce公司的驱动程序好像可以的,如果没,可以去Oracle的网站下载,