图片怎么储存到sql数据库中,并显示,sql的字段类型为image,图片控件用的是image1

解决方案 »

  1.   

    数据类型不能为image。我觉得太大的图片不应该存放在数据库中,应存它的路径。
      

  2.   

    //delphi7+ sql2000通过.可以保存jpeg,jpg,bmp三种格式。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, jpeg,DB, ADODB, ExtCtrls, Buttons, Grids, DBGrids,
      DBCtrls;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        OpenDialog1: TOpenDialog;
        Edit1: TEdit;
        Image1: TImage;
        Image2: TImage;
        BitBtn1: TBitBtn;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        ADOQuery1pic: TBlobField;
        ADOQuery1borj: TStringField;
        procedure Button1Click(Sender: TObject);
        procedure BitBtn1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      s:string;
      s1:string;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    bitmap1:tbitmap;
    pjpg:tjpegimage;
    pic:TMemoryStream;begin
    pjpg:=tjpegimage.Create;
    if opendialog1.Execute
        then
         s:=opendialog1.FileName ;
         s1:=extractfileext(s);
             
         if (uppercase(s1) ='.JPG' ) or (uppercase(s1)='.JPEG') // 图片格式一定要大写
           THEN
             begin
                  pjpg.LoadFromFile(s );
                  pic:=TMemoryStream.Create;
                  pjpg.SaveToStream(pic);
                  image1.Picture.Bitmap.Assign(pjpg);              pic.Position:=0;
                  adoquery1.Insert ;
                  adoquery1.FieldByName('borj').VALUE := 2;
                  TBlobField(adoquery1.FieldByName('pic')).LoadFromStream(pic);
                  adoquery1.post;
                  pic.Free;
                  pjpg.free;
            end ;    if (uppercase(s1)='.BMP')    then           begin
                  edit1.Text :=uppercase(s1);             image1.Picture.LoadFromFile(s);
                 adoquery1.Insert ;
                 adoquery1.FieldByName('pic').Assign(image1.Picture.Graphic);
                 adoquery1.FieldByName('borj').VALUE := 3;             adoquery1.Post ;
              end;
     end;  procedure TForm1.BitBtn1Click(Sender: TObject);   var
        jpeg:tjpegimage;
          begin
           image1.Picture.Graphic :=nil;
                with adoquery1 do
                     begin
                        if adoquery1.FieldByName('borj').Value =3   // bmp
                        then
                         image2.Picture.Bitmap.Assign(fieldbyname('pic'))  ;                     if adoquery1.FieldByName('borj').Value =2  //jpge;                     then
                            begin
                                   jpeg:=tjpegimage.Create ;
                                    try
                                     jpeg.Assign(adoquery1.FieldByName('pic') );
                                      image2.Picture.Graphic:=jpeg;
                                       finally
                                       jpeg.Free ;
                                     end;
                            end;                 end ;
                        end;end.另法
    var
      msTmp: TMemoryStream;
    begin
    try
      msTmp := TMemoryStream.Create;
      Image1.Picture.Graphic.SaveToStream(msTmp);
      (Adotable1.Fieldbyname('相片') as TBlobField).LoadFromStream(msTmp);
    finally
      FreeAndNil(msTmp);
    end;
    end;
      

  3.   

    2楼的我要以流方式储存,3楼的,不用image用什么?
      

  4.   

    据说有个blob字段可以,试试吧。
      

  5.   

    sql里没有这个类型,这个类型怎么来的
      

  6.   

    msTmp := TMemoryStream.Create;
      Image1.Picture.Graphic.SaveToStream(msTmp);
      (Adotable1.Fieldbyname('相片') as TBlobField).LoadFromStream(msTmp);
      

  7.   

    照adevil23(adevil)说的做就可以了