我用dbimage将我放到数据库中的jpg/bmp图象显示出来,却不行,报错
另外我自己写了个测试程序,也不行,用debug总是在某个位子出错!!
各位大虾绑到看看
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids,jpeg;type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    Image1: TImage;
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var    
   m_jpegstream:TMemorystream;
begin
   
   if  (ADOQuery1.FieldByName('photo')  as  Tblobfield).asstring=''  then
   begin
       exit;    
   end    
   else    
   begin    
       try    
       try
           m_jpegStream:=TMemoryStream.Create;
           // m_jpegStream:= ADOQuery1.CreateBlobStream (ADOQuery1.FieldByName('photo'),bmReadWrite);
           (ADOQuery1.fieldbyname('photo')  as  TBlobField).SaveToStream(m_JpegStream);
           m_JpegStream.Position:=0;
           try
               image1.Picture.Graphic:=nil;
               image1.Picture.Graphic:=TJpegImage.Create;
               image1.Picture.Graphic.LoadFromStream(m_JpegStream);    //读Jpeg---出错
           except
              // image1.Picture.Bitmap:=nil;
             //  image1.Picture.Bitmap:=TImage.Create;
              image1.Picture.Bitmap.LoadFromStream(m_JpegStream);      //读Bmp
           end;
       except
      end;
       finally
           m_JpegStream.Free;
       end;
   end;end;end.

解决方案 »

  1.   

    用TImage,Ado读和写Sql Server或者Access数据库中图片(bmp或者jpg格式都可以)的源代码:
    http://www.csdn.net/expert/topic/973/973247.xml?temp=.441189
      

  2.   

    //str字段名begin
        try
        try
          m_jpegStream:=TMemoryStream.Create;
          (adoQuery1.fieldbyname(str) as TBlobField).SaveToStream(m_JpegStream);
          m_JpegStream.Position:=0;
          try
            image4.Picture.Graphic:=nil;
            image4.Picture.Graphic:=TJpegImage.Create;
            image4.Picture.Graphic.LoadFromStream(m_JpegStream);  //读Jpeg
          except
            Image4.Picture.Bitmap.LoadFromStream(m_JpegStream);  //读Bmp
          end;
       except
         end;
         finally
          m_JpegStream.Free;
          adoQuery1.Close;
         end;
      end;
      

  3.   

    用datasource,adoquery,dbimage,dbnavigator就可以、实现,想更简单一点的话,用adotable,我试过了都可以的~,如果是用adoquery的话,设置datasource的dataset为ADOQuery1,再设置adoquery1的connectstring和sql 属性,再将其active设为true,dbimage的datasource为datasource1,再datafield中选图片的字段,就能显示图像了~
      

  4.   

    搞不懂你为什么要这么做TEST?搞的麻烦!
      

  5.   

    DBImage根本就不支JPEG,自己改造DBImage,或者用流中间过度下,再Image.LoadFromStream
      

  6.   

    不能用DBImage,我是用的Image的Assign。
      

  7.   

    var
    JPEG:TJPEGIMAGE;
    stream: TMemoryStream;
    begin
        image1.Picture.Assign(nil);
        if dm.DS_YGPHOTO.FieldByName('photo').IsNull  then
        begin
        image1.Tag :=0;
        panel2.Caption :='无照片';
        end
         else
        begin
        JPEG:=TJpegimage.Create ;
        stream:=TMemoryStream.Create ;
        tblobfield(dm.DS_YGPHOTO.FieldByName('photo')).savetostream(stream);
        Stream.Seek(0, soFromBeginning);
        jpeg.loadfromstream(stream);
        image1.Picture.Bitmap.Assign(jpeg);
        freeandnil(Jpeg);
        freeandnil(stream);
        image1.Tag :=1;
        end;
    end;
    我的代码不行吗?
    用adodataset,
    sql :select * from ygphoto where ygbh='333';
    在一个时候只能显示一种吧,或者你做个标记是BMP,或JPEG,
    要引入JPEG单元的
      

  8.   

    在uses 中加jpeg,用image代替dbimage
    image1.Picture.Graphic.LoadFromStream(m_JpegStream);