请教内存流的传递图片如何实现
原功能是:
   通过查询而得到"部分"信息并显示到Listview中,再根据选择,
并将其相关的信息,显示到相关控件中....
Listview中的部分代码如下:
   Edit1.text:=ADOQuery_Save.FieldByName('XXXX_JBID').AsString;
   DBRichEdit.Text:=ADOQuery_Save.FieldByName('XXXX_INFOS').AsString;
这些信息是能正常读取并得到,我的现在的问题这个表中有一个图片字段pictab
图片内容是以流的方式写入,我现在想再以流的方式再读取到控件DBImage1,代码
如下:
   MS:=TMemoryStream.create;
   TBlobField(ADOQuery_Save.FieldByName('pictab')).LoadFromStream(MS);
   //下面两行提示出错Dataset not in edit or inset mode.
   MS.Position:=0;
   DBImage1.Picture.Graphic.LoadFromStream(MS);  

解决方案 »

  1.   

     Edit1.text:=ADOQuery_Save.FieldByName('XXXX_JBID').AsString;
    这行代码是对的,我想直接将那个图片控件直接与数据库中表内字段直接连接
    TBlobField(ADOQuery_Save.FieldByName('pictab'))
      

  2.   

    MS:=TMemoryStream.create;
    TBlobField(ADOQuery_Save.FieldByName('pictab')).LoadFromStream(MS);
    上句的LoadFromStream应该为SaveToStream
      

  3.   

    是我打错,这个不支持BMP格式的图片
      

  4.   

    //这样即可var
      ms:TMemoryStream;
      JPG: TJpegImage;
    begin
      MS:=TMemoryStream.create;
      JPG := TJpegImage.Create;
      ADOQuery_Save.close;
      ADOQuery_Save.SQL.Clear;
      ADOQuery_Save.SQL.Add('select * from 表 where 条件');
      ADOQuery_Save.open;
      TBlobField(ADOQuery_Save.FieldByName('pictab')).SaveToStream(MS);
      MS.Position := 0;
      jpg.LoadFromStream(ms);
      Image1.Picture.Bitmap.Assign(JPG);
      jpg.free;
      MS.Free;
    end;
      

  5.   

    Image1.Picture.Bitmap.Assign(JPG);
    就是这句谢谢>>>>>>>>>
      

  6.   

    数据库图片存取
    {=================================================================
       DELPHI存取JPEG、BMP图像到数据库完整解决方案(演示版)
       版权所有  李明亮   2003-2008
       成都地区的朋友需要我兼职的话,请联系。
       [email protected]
    ==================================================================}
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ExtDlgs, StdCtrls, ADODB, Grids, DBGrids, ExtCtrls,jpeg,
      DBCtrls;type
      TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        ADOConnection1: TADOConnection;
        ADOTable1: TADOTable;
        selectimage: TButton;
        savetodb: TButton;
        OpenPictureDialog1: TOpenPictureDialog;
        DataSource1: TDataSource;
        DBNavigator1: TDBNavigator;
        savetofile: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Button1: TButton;
        Bevel1: TBevel;
        Bevel2: TBevel;
        GroupBox1: TGroupBox;
        Image1: TImage;
        Label3: TLabel;
        Label4: TLabel;
        DBImage1: TDBImage;
        procedure selectimageClick(Sender: TObject);
        procedure savetodbClick(Sender: TObject);
        procedure ADOTable1AfterScroll(DataSet: TDataSet);
        procedure savetofileClick(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure ADOTable1BeforeScroll(DataSet: TDataSet);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
       uses unit2;
    {$R *.dfm}procedure TForm1.selectimageClick(Sender: TObject); //选择图像
    begin
     if openpicturedialog1.Execute then
       image1.Picture.LoadFromFile(openpicturedialog1.FileName );
    end; ////如下保存方法only to sql and access'data
    procedure TForm1.savetodbClick(Sender: TObject);  //保存图像
    var
      strm:tmemorystream;
      ext:string;
    begin
       if image1.picture.Graphic <> nil then  //避免image1中无图像保存出错
       begin
       ext:=extractfileext(openpicturedialog1.FileName );
       strm := tmemorystream.Create ;
       try
       image1.Picture.Graphic.SaveToStream(strm);
       adotable1.Edit ;
       strm.Position :=0;
       DBImage1.dataField :='';  //dbimage只能显示BMP,否则myimage由BMP变为jpeg时会出错
       tblobfield(adotable1.FieldByName('myimage')).LoadFromStream(strm);
       //如需直接由文件保存 TBlobField(adotable1.FieldByName('myimage')).LoadFromFile(OpenPictureDialog1.FileName);
       //以下记录保存到数据库的图像格式
       if uppercase(ext) = '.BMP' then
       begin
       adotable1.FieldByName('isbmp').Value := 1;
       dbimage1.dataField := 'myimage';
       end
       else if (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') THEN
       adotable1.FieldByName('isbmp').Value := 0;
       adotable1.Post ;
       finally
       strm.Free ; //如果你选用TBLOBSTREAM类,程序运行到此语句会出错,可该语句前添入adotable1.edit
       end;
       end;
    end;
     ///如下显示方法不适用于paradox中的graphic字段的显示。
    procedure TForm1.adoTable1AfterScroll(DataSet: TDataSet);  //显示图像
    var
    strm:tadoblobstream;
    jpegimage:tjpegimage;
    bitmap:tbitmap;
    begin
      strm := tadoblobstream.Create(tblobfield(adotable1.fieldbyname('MYIMAGE')),bmread);
      try    //try1
      strm.position :=0;
      image1.Picture.Graphic := nil;
      DBIMAGE1.DataField := '';
      //显示时,BMP、JPEG两种图像数据必需分别处理
      if adotable1.fieldbyname('isbmp').asstring ='1' then
        begin    //begin11
        bitmap := tbitmap.Create ;
        try     //try11
        bitmap.LoadFromStream(strm);
        image1.Picture.Graphic := bitmap;
        DBIMAGE1.DataField := 'myimage';
        finally
        bitmap.Free;
        end;    //end try11
        end     //end begin11
        else if adotable1.fieldbyname('isbmp').asstring ='0' then
        begin   //begin12
        jpegimage := tjpegimage.Create ;
        try     //try12
        jpegimage.LoadFromStream(strm);
        image1.Picture.Graphic := jpegimage;
        finally
        jpegimage.Free ;
        end;    //end try12
        end;    //end begin12
      finally
      strm.Free ;
      end;     //end try1
    end;////显示时必须分bmp and jpeg 两种情况处理,而保存可统一。procedure TForm1.savetofileClick(Sender: TObject);
    var
      tmpstr:string;
    begin
       if image1.Picture.Graphic <> nil then
       begin
       tmpstr := openpicturedialog1.Filter;
       if adotable1.fieldbyname('isbmp').asstring ='1' then
       begin
       openpicturedialog1.Filter := 'Bitmaps (*.bmp)|*.bmp';
       if openpicturedialog1.Execute then
      image1.Picture.SaveToFile(openpicturedialog1.FileName+'.bmp');
      end
      else
      begin
       openpicturedialog1.Filter := 'JPEG Image File (*.jpg)|*.jpg';
       if openpicturedialog1.Execute then
      image1.Picture.SaveToFile(openpicturedialog1.FileName+'.jpg');
      end;
      openpicturedialog1.Filter := tmpstr;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      form2.Show;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      adoconnection1.Connected := true;
      adoconnection1.LoginPrompt := false;
      adotable1.Active := true;
      
    end;procedure TForm1.ADOTable1BeforeScroll(DataSet: TDataSet);
    begin
      dbimage1.dataField :='';  //这条语句不能遗漏,不信你试试
    end;end.
    delphi图片数据库存取测试
    procedure TForm1.BtnReadClick(Sender: TObject);
    var
      blob:Tadoblobstream;
      jpgimg:TJpegImage;
    begin
      if not adotrsgl.fieldbyname('zp').IsNull then
      try
        blob:=Tadoblobstream.Create(Tblobfield(adotrsgl.fieldbyname('zp')),bmread);
        blob.position:=0;
        jpgimg:=TJpegImage.create;
        try
          jpgimg.loadfromstream(blob);
          imgzp.picture.graphic:=jpgimg;
        finally
          jpgimg.free;
        end;
      finally
        blob.free;
        blob:=nil;
      end;
    end;procedure TForm1.BtnWriteClick(Sender: TObject);
    var
      zp:Tmemorystream;
    begin
      adotrsgl.Edit;
      zp:=Tmemorystream.Create;
      if imgzp.Picture.Graphic<>nil then
      begin
        imgzp.Picture.Graphic.SaveToStream(zp);
        zp.Position:=0;
        Tblobfield(adotrsgl.FieldByName('zp')).LoadFromStream(zp);
      end;
      adotrsgl.Post;
    end;