我用了 Button Image DataSource ADOQuery ADOConnection 控件 。
我想先简单的试验一下向数据库存储图片,用下面的代码:
 procedure TForm1.Button1Click(Sender: TObject);
var
ms:tmemorystream;
begin
  ms:=TmemoryStream.Create;
  ms.Loadfromfile('D:\Images\info3[1].gif');
 if ms.size>0 then
 begin
   ms.position:=0;
   (adoquery1.fieldbyname('pic') as Tblobfield).loadfromstream(ms);
 end ;
end;
可当我按下按钮,报错提示ADOQuery1 :Field ‘pic’ not found!
我当怎样才能让它存到 picture 表的 ‘pic’ 字段中呢?或者我少了什么控件?

解决方案 »

  1.   

    你的ADOQuery连上pic所在的表了吗?
      

  2.   

    用这个:TBlobField(FieldByName('ZP')).LoadFromStream(stmPic);看看我的代码:    sSql:=     'SELECT * FROM Table';    with dmPublic.qryUpdate do
        begin
            SQL.Text:=sSql;
            Open;
            if Not Eof then
            begin
                stmPic:=TMemoryStream.Create;
                try
                    // 取得图片
                    Edit;
                    if not bPicture then
                    begin
                        // 假设该字段为照片(ZP)
                        TBlobField(FieldByName('ZP')).Clear;
                    end
                    else
                    begin
                        jpg:=TJpegImage.Create;
                        try
                            jpg.Assign(imgPicture.Picture.Bitmap);
                            jpg.SaveToStream(stmPic);
                            TBlobField(FieldByName('ZP')).LoadFromStream(stmPic);
                        finally
                            jpg.Free;
                        end;
                    end;
                    Post;
                finally
                    stmPic.Free;
                end;
            end;
            Close;
        end;
    end;注:变量声明如下:
    var
        sSql        :string;
        stmPic      :TStream;
        jpg         :TJpegImage;
      

  3.   

    var
    ms:tmemorystream;
    begin
      ms:=TmemoryStream.Create;
      ms.Loadfromfile('D:\Images\info3[1].gif');
     if ms.size>0 then
     begin
       ms.position:=0;
       with adoquery1 do
       begin
         if active then close;
         sql.clear;
         sql.add('select * from yourtablename where yourcordinal');
         open;
         append;
         (adoquery1.fieldbyname('pic') as Tblobfield).loadfromstream(ms);
         post;
     end ;
      

  4.   

    我要用 Image 显示从数据库查询的图片,应该怎么设阿?
      

  5.   

    adoquery1.eidt;
    TBlobField(adoquery1.FieldByName('ZP')).LoadFromStream(ms);
    adoquery1.post;
      

  6.   

    现在是这样的,我的picture有两个字段,pic image ,pname char(10) 我想把图片和 name 一起插入到表里面,上面的方法不行阿。
      

  7.   

    照片的显示:
     try
        Image1.Picture.Assign(FieldByName('photo'));
     except
        Image1.Picture.Assign(nil);
     end;
      

  8.   

    存到数据库
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pjpg.LoadFromFile(F:\JPG.jpg);
    pic:=TMemoryStream.Create;
    pjpg.SaveToStream(pic);
    pic.Position:=0;
    TBlobField(dataset.FieldByName('Img')).LoadFromStream(pic);
    dataset.post;
    pic.Free;
    pjpg.free;
    end;
    从数据库取出
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pic:=TMemoryStream.Create;
    TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
    pic.positon:=0;
    pjpeg.LoadFromStream(pic);
    image.graphi.bmp.assign(pjpeg);
    end;end;
      

  9.   

    数据库中Image 为二进制类型 ,pname为字符类型,当然不能放在一起写入可以分开写入,另外
    图片可以定义成binary类型
      

  10.   

    给你提供一个ACCSEE存储图片的例子,到
    http://www.kaer.com.cn/default.aspx
    下,其它凭你的 悟性了。