Access中图片字段类型为“OLE对象”当数据库里已经有记录时,但是图片字段为空,我要补一张图片在某个记录就要用到updat语句,那么怎么用ADOQuery往这个记录里写入图片,并怎么读出?

解决方案 »

  1.   

    //给你一个自定义函数:function imagesavetosql(dataset:TCustomADODataSet;zdxh:integer;picname:string):boolean;
    var
      imagebmp:Timage;
      imagejpg:Tjpegimage;
      imageico:Ticon;
      zhbl:Tbitmap;
      lx:string;
      image:Timage;
    begin
      imagebmp:=Timage.Create(nil);
      imagejpg:=Tjpegimage.Create;
      imageico:=Ticon.Create;
      zhbl:=Tbitmap.Create;
      image:=Timage.Create(nil);
      image.Picture.LoadFromFile(picname);
      image.Hint:=picname;
      image.showhint:=true;
      if image.Hint<>'' then
      begin
         lx:=ExtractFileExt(image.Hint);
         if uppercase(lx)='.BMP' then
         begin
         imagebmp.Picture.Bitmap.LoadFromFile(image.Hint);
         end;
         if uppercase(lx)='.JPG' then
         begin
         imagejpg.LoadFromFile(image.Hint);
         imagebmp.Picture.Bitmap.Assign(imagejpg);
         end;
         if uppercase(lx)='.ICO' then
         begin
         imageico.LoadFromFile(image.Hint);
         zhbl.Width:=imageico.Width;
         zhbl.Height:=imageico.Height;
         zhbl.canvas.Draw(0,0,imageico);
         end;
      end;
      try
      if uppercase(lx)='.ICO' then
      begin
      dataset.Fields[zdxh].Assign(zhbl);
      end
      else
      begin
      dataset.Fields[zdxh].Assign(imagebmp.Picture);
      end;
      result:=true;
      finally
      imagebmp.Free;
      imagejpg.Free;
      imageico.Free;
      zhbl.Free;
      image.Free;
      end;
    end;
      

  2.   

    //更新图片procedure TForm1.Button1Click(Sender: TObject);  
    var fp_temp : file of byte;
    begin
      openpicturedialog1.Filter:='All (*.Jpg;*.Bmp)|*.jpg;*.bmp';
      openpicturedialog1.FileName:='';
      openpicturedialog1.Title:='选择图片';
      openpicturedialog1.Execute;
      if openpicturedialog1.FileName='' then exit;
      AssignFile(fp_temp,openpicturedialog1.FileName);
      Reset(fp_temp);
      if filesize(fp_temp)>206000 then
        begin
          application.MessageBox('所选择的图片不能大于200K ','系统提示',MB_OK+MB_ICONINFORMATION);
          CloseFile(fp_temp);
          exit;
        end;
      CloseFile(fp_temp);
      adoquery1.edit;
      imagesavetosql(adoquery1,0,openpicturedialog1.FileName);
      adoquery1.Post;
    end;
      

  3.   

    //另存出图片(从数据库中)procedure TForm1.Button2Click(Sender: TObject);
    begin
      savedialog1.Filter:='All (*.Jpg;*.Bmp)|*.jpg;*.bmp';
      savedialog1.FileName:='';
      savedialog1.Execute;
      if savedialog1.FileName<>'' then
        DBimage1.Picture.SaveToFile(savedialog1.FileName+'.jpg');
    end;
      

  4.   

    使用dbimageex控件,就像DBEdit一樣的使用
      

  5.   

    先用ADOQUERY打开你要更新的表,设置为EDIT状态。通过流存取
    procedure TForm1.Button1Click(Sender: TObject);//保存
    var
      mystream : TMemoryStream;
    begin
      mystream := TMemoryStream.Create;
      try
        Image1.Picture.Graphic.SaveToStream(mystream);
        mystream.Position := 0;
        with ADOQuery1 do
        begin
          close;
          open;
          Append;
          TBlobField(fieldbyname('pic')).LoadFromStream(mystream);
          Post;
        end;
      finally
        mystream.Free;
      end;
    end;
      

  6.   

    http://blog.csdn.net/jinzhili/archive/2005/11/04/522994.aspx
      

  7.   

    http://blog.csdn.net/jinzhili/archive/2005/11/04/522994.aspx
    这里的好详细