写ORACLE数据库的BLOB字段,代码如下:
...
...
ADSSEND.Edit;
TblobField(ADSSEND.FieldByName('PICBLOB')).LoadFromStream(FMemStream); //FmemStream有数据
ITEST := ADSSEND.FieldByName('PICBLOB').DataSize;//测试语句,发现DataSize总是为0
ADSSEND.Post;
...为什么ADSSEND.FieldByName('PICBLOB').DataSize总是为0,如何才能把大字段存入ADSSEND数据集?
很急呀,请大虾们指导一下,小弟不胜感激!

解决方案 »

  1.   

    很简单啊procedure PhotoLoad(DataSet: TDataSet; Field: TField);
    var
      OpenPicDlg: TOpenPictureDialog;
      Photo: TPicture;
      Stream: TStream;
    begin
      OpenPicDlg:=TOpenPictureDialog.Create(Application);
      OpenPicDlg.Filter:='All (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp';
      if OpenPicDlg.Execute then
      begin
        Photo:=TPicture.Create;
        Photo.LoadFromFile(OpenPicDlg.FileName);
        DataSet.Edit;
        Stream:=DataSet.CreateBlobStream(Field, bmWrite);
        try
          Photo.Graphic.SaveToStream(Stream);
        finally
          Stream.Free;
        end;
        DataSet.Post;
        Photo.Free;
      end;
      OpenPicDlg.Free;
    end;这是一个把照片保存到数据表字段中的过程,直接调用即可至于为什么Size=0除了别的原因外,还有ADO引擎的问题
      

  2.   

    跟什么数据库没关系,我在本地的数据集上就不能导入大字段,即ADSSEND.FieldByName('PICBLOB').DataSize总是为0
      

  3.   

    TblobField(ADSSEND.FieldByName('PICBLOB')).LoadFromStream(FMemStream); 
    TBlobField(ADOQuery1.FieldByName('')).SavetoStream(AStream);