我在oracle中创建了一个含blob字段的表,用来存照片,可向中保存时保存不进去。
procedure TForm1.Button2Click(Sender: TObject);
 var graphic1:Tgraphic;
begin
  graphic1:=graphic1.Create;
  graphic1.LoadFromFile(OpenPictureDialog1.FileName);
  with adoquery1 do
   begin
   open;
   INSERT;
    fieldbyname('id').AsString:=TRIM(edit1.Text);
   FieldByName( 'IMAGE1').Assign(graphic1);
    //TblobField(FieldByName( 'IMAGE1' )).SaveToFile(OpenPictureDialog1.FileName);
    POST;
   end;
   graphic1.Free
end;

解决方案 »

  1.   

    不是用Assign,Assign是把一个对象copy给另外一个对象,你把Tgraphic copy给TField,是错误的。你改成这样试试?
    TBlobField(FieldByName( 'IMAGE1')).LoadFromFile(OpenPictureDialog1.FileName);
      

  2.   

    create table t_blob(cblob blob);
    /begin
      self.ADODataSet1.Close;
      self.ADODataSet1.CommandText:='select * from t_blob';
      self.ADODataSet1.Open;
      self.ADODataSet1.Append;
      TBlobField(self.ADODataSet1.FieldByName( 'cBlob' )).LoadFromFile( 'D:\41207.JPG' );
      self.ADODataSet1.Post;
    end;
      

  3.   

    提示:stream read error.
    为什么?
      

  4.   


      with adoquery1 do
       begin
       close;
       sql.Clear;
         sql.Add('select * from photo1');
        open;
       append;
      if OpenPictureDialog1.FileName <> '' then
        fieldbyname('shbzh').AsString:=TRIM(edit1.Text);    
        TblobField(FieldByName( 'IMAGE1' )).LoadFromFile(OpenPictureDialog2.FileName);
       post;
      这样可以,但只能存入*.bmp文件,不能存入*.jpg文件。为什么?image1是long row型
      

  5.   


      with adoquery1 do
       begin
       close;
       sql.Clear;
         sql.Add('select * from photo1');
        open;
       append;
      if OpenPictureDialog1.FileName <> '' then
        fieldbyname('shbzh').AsString:=TRIM(edit1.Text);    
        TblobField(FieldByName( 'IMAGE1' )).LoadFromFile(OpenPictureDialog2.FileName);
       post;
      这样可以,但只能存入*.bmp文件,不能存入*.jpg文件。为什么?image1是long row型
      

  6.   

    把*.jpg图片转换为*.bmp格式再存入BLOG字段就OK了
      

  7.   

    to 78hgdong(赤脚):
     我现在就是这样做的,可我想直接存入jpg文件,bmp文件太大,占用空间大不说,存入时间也长。如果数量多的话怎么受得了啊。
      

  8.   

    var
      ms: TMemoryStream;
    begin
      WaitForm.pdShowProgress(cSMPhoto);
      ms := TMemoryStream.Create;
      dbimgPhoto.Picture.Graphic.SaveToStream(ms);
      ms.Position := 0;
      with TADOQuery.Create(nil) do
      try
        Connection := AdodsOp.GetADOConn;
            1: begin //µÚÒ»´ÎɨÃè
              SQL.Add('INSERT INTO VW_DA_RYZPB0(GRID00,RYZPGS,RYZP00,JBR000,JBRQ00) ');
              SQL.Add('VALUES(:GRID00,:RYZPGS,:RYZP00,:JBR000,:JBRQ00)');
            end;
        Parameters.ParamByName('GRID00').Value := Trim(edtGRID00.Text);
        Parameters.ParamByName('RYZPGS').Value := edtRYZPGS.Text;
        Parameters.ParamByName('RYZP00').LoadFromStream(ms, ftDBaseOle);
        Parameters.ParamByName('JBR000').Value := Trim(gUserInfo.vUserName);
        Parameters.ParamByName('JBRQ00').Value := gSysInfo.PO_SYSDATE;
        ExecSQL;
      finally
        Free;
        ms.Free;
        WaitForm.pdCloseProgress;
      end;