我的代码如下:
procedure TForm2.SpeedButton11Click(Sender: TObject);
begin
form8.ADOQuery1.Edit ;
if openpicturedialog1.Execute then
begin
  dbimage1.Picture.LoadFromFile(openpicturedialog1.FileName);
  end; 
end;procedure TForm2.SpeedButton4Click(Sender: TObject);
begin
form8.ADOQuery1.Edit ;
form8.ADOQuery1.Post ;
end;如果我选择jpg格式的图片插入,插不进去。如果是bmp格式的话,很大的图片都可以,为什么?
请大虾帮忙解决,谢谢啦……
注:SQL数据库,字段的数据类型为image,长度为:16

解决方案 »

  1.   

    应该不会的!用Stream插入到Blob字段中,连Exe都可以插入的,更不要说JPG图片啦!
      

  2.   

    不会吧,用流操作应该都可以的,图片,文档,任何文件
    ADOQuery.Edit;
    TBlobField(ADOQuery.FieldByName('MyBlob')).LoadFromFile(FFileName);
    ADOQuery.Post;
      

  3.   

    var  tempst:TMemoryStream;
      tpJpg:TJpegImage;
    begin  if self.Image2.Picture=nil  then exit;  tpjpg:=TJpegImage.Create;
      tempst:=tmemorystream.Create;
      try
        tpjpg.LoadFromFile(RzOpenDialog1.FileName);    tpjpg.SaveToStream(tempst);    //Tjpegimage(image2.Picture).SaveToStream(tempst);
        adoquery1.edit;
        //adoquery1.FieldByName('a').AsString:='a';
        Tblobfield(adoquery1.FieldByName('photo')).LoadFromStream(tempst);
        //self.Image1.Picture.SaveToFile('c:\temp.jpg');
        adoquery1.Post;
        bitbtn2click(bitbtn2);
        //showmessage('ok!')
      finally
        tempst.Free;  end;
      

  4.   

    jinjazz(近身剪(充电中...):wo 在uses 中加了 jpeg也不行哦,怎么回事?
      

  5.   

    ADO控件存取SQL Server数据库图片
    在win98+sql server桌面版中测试通过,源码如下:
    unit Unit1;interfaceuses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ExtCtrls, DBCtrls, Grids, DBGrids, Db, ADODB,jpeg, StdCtrls,dbtables;
     {一定要USES JPEG单元,使能存储jpg文件格式}
    type
    TForm1 = class(TForm)
      DataSource1: TDataSource;
      ADOQuery1: TADOQuery;
      DBGrid1: TDBGrid;
      DBNavigator1: TDBNavigator;
      Image1: TImage;
      savebutton: TButton;
      showbutton: TButton;
      OpenDialog1: TOpenDialog;
      ADOQuery1id: TIntegerField;
      ADOQuery1pic: TBlobField;
      procedure savebuttonClick(Sender: TObject);
      procedure showbuttonClick(Sender: TObject);
      procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    private
      { Private declarations }
    public
      { Public declarations }
    end;var
    Form1: TForm1;implementation{$R *.DFM}function JpegStartsInBlob(PicField:TBlobField):integer;
     var
      ghy: TADOBlobstream;
      buffer:Word;
      hx: string;
     begin
      Result := -1;
      ghy := TADOBlobstream.Create(PicField, bmRead);
      try
      while (Result = -1) and (ghy.Position + 1 < ghy.Size) do
      begin
       ghy.ReadBuffer(buffer, 1);
       hx:=IntToHex(buffer, 2);
       if hx = ’FF’ then begin
       ghy.ReadBuffer(buffer, 1);
       hx:=IntToHex(buffer, 2);
       if hx = ’D8’ then Result := ghy.Position - 2
       else if hx = ’FF’ then
          ghy.Position := ghy.Position-1;
       end; //if
      end; //while
      finally
       ghy.Free
      end; //try
     end;
    procedure TForm1.savebuttonClick(Sender: TObject);
    var
    picstream:tadoblobstream;
    begin
    adoquery1.edit;
    picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);
    if form1.opendialog1.execute then
    begin
    picstream.LoadFromFile(opendialog1.filename);
    picstream.Position:=0;
    adoquery1.edit;
    tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
    adoquery1.post;
    end;
    end;procedure TForm1.showbuttonClick(Sender: TObject);
    var
    ghy:TADOBlobstream;
    pic:tjpegimage;
    begin
    ghy := TADOBlobstream.Create(Adoquery1pic, bmRead);
    try
    ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning);
    Pic:=TJpegImage.Create;
    try
     Pic.LoadFromStream(ghy);
     Image1.Picture.Graphic:=Pic;
    finally
     Pic.Free;
    end;
    finally
    ghy.Free
    end;
    end;procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    begin
    if button in [nbFirst, nbPrior, nbNext, nbLast] then showbutton.Click;
    end;end.如果数据库中要存储的是BMP文件,则在procedure TForm1.showbuttonClick(Sender: TObject);过程中代码更改如下即可存储显示BMP文件格式的操作。
    procedure TForm1.showbuttonClick(Sender: TObject);
    var
    ghy:TADOBlobstream;
    pic:tbitmap;
    begin
    ghy := TADOBlobstream.Create(Adoquery1pic, bmRead);
    try
    { ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning);}
    Pic:=Tbitmap.Create;
    try
     Pic.LoadFromStream(ghy);
     Image1.Picture.Graphic:=Pic;
    finally
     Pic.Free;
    end;
    finally
    ghy.Free
    end;
    end;