建一个数据表命名为照片表,含两个字段(照片----image型,序号----int型且递增)。  新建一窗体,含三个按扭(打开按扭,保存按扭,显示按扭),image控件,opendialog和eidt控件。
1.单击打开按扭,图片通过opendialog打开,在image1中显示,代码如下:
      opendialog1.execute;
      image1.Picture.LoadFromFile(opendialog1.FileName);
2,单击保存按扭,将image1中显示的图片的路径保存到照片表中。
3. 在edit1中输入序号,单击显示按扭,则序号对应的图片显示在image1中。
                     
                             (注:image1中可以显示bmp,jpg,gif型图片)请教各位大侠,2和3该怎么写,请给出完整代码,谢谢!!

解决方案 »

  1.   

    image改为dbimage,并将dbimage与字段联系起来adotable.post即可用了dbimage之后,3就不是问题了
      

  2.   

    保存procedure TForm1.Button2Click(Sender: TObject);
    var
      MS:TMemoryStream;
    begin
        MS:=TMemoryStream.create;
        image1.Picture.Bitmap.SaveToStream(MS);
        MS.Position:=0;
        adoquery1.Insert;
        TBlobField(adoquery1.FieldbyName('tp')).LoadFromStream(MS);
        adoquery1.Post;
    end;
      

  3.   

    存到数据库
    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;
      

  4.   

    还是不行。
    保存时都存不进去啊,而且我要的是针对bmp,jpg,gif类型均可以的图片。
      

  5.   

    使用imageen控件,支持好多格式,你可以自定义JPEG的压缩率,简单易操作,大大加快开发速度,我在多个软件中使用,效果不错。
      

  6.   

    to  qwertyasd(昊) 
    如果有pjpg定义为picture型,pjpg.SaveToStream(pic)时出错,提示pjpg没有savetostream方法,而且即使将pjpg定义为:tjpegimage型数据也存不到数据库中,我是个初学者,请您说得详细些好吗,谢谢!!
      

  7.   

    var pjpg:tpicture;
    begin
      pjpg.Graphic.SaveToStream(pic);
      

  8.   

    to  qwertyasd(昊) 
    我试过了,代码如下:
    var
    pjpg:tpicture;
    pic:TMemoryStream;
    begin
    adoquery1.Append ;
    pjpg:=tpicture.Create;
    pjpg.LoadFromFile('F:\f.jpg');
    pic:=TMemoryStream.Create;
    pjpg.Graphic.SaveToStream(pic);
    pic.Position:=0;
    TBlobField(adoquery1.FieldByName('照片')).LoadFromStream(pic);
    adoquery1.post;
    pic.Free;
    pjpg.free;运行过程中虽然没有错误,但是数据保存不上。
      

  9.   

    2:var
    xp:Tmemorystream;
    jpeg:Tjpegimage;
    begin
        xp:=Tmemorystream.Create;
        jpeg:=Tjpegimage.Create;
        jpeg.Assign(image1.Picture);
        jpeg.SaveToStream(xp);
        with adoquery1 do
            begin
                close;
                sql.Clear;
                sql.Add('insert into demo (xp) values(:aa)');
                adoquery1.Parameters.ParamByName('aa').LoadFromStream(xp,ftblob);
                execsql;
            end;
        image1.Picture.Assign(nil);
    end;3:
        with adoquery1 do
            begin
                close;
                sql.Clear;
                sql.Add('select * from demo where id=:aa');
                adoquery1.Parameters.ParamByName('aa').Value:=edit1.text;
                open;
            end;
        if adoquery1.RecordCount<>0 then
            begin
                xp:=Tmemorystream.Create;
                jpeg:=Tjpegimage.Create;
                tblobfield(adoquery1.FieldByName('xp')).SaveToStream(xp);
                xp.Seek(0,sofrombeginning);
                jpeg.LoadFromStream(xp);
                image1.Picture.Assign(jpeg);
            end;
      

  10.   

    to fuction(我是东北那旮来地)
    先谢谢你,可是你的代码只是针对jpeg图片的,如果有bmp,gif类型的图片就执行不过去。
    我把你的代码改了一下:
    保存:
    var
    xp:Tmemorystream;
    jpeg:tpicture;
    begin
        xp:=Tmemorystream.Create;
        jpeg:=Tpicture.Create;
        jpeg.Assign(image1.Picture);
        jpeg.Graphic.SaveToStream(xp);
        with adoquery1 do
            begin
                close;
                sql.Clear;
                sql.Add('insert into 照片表(照片) values(:aa)');
                adoquery1.Parameters.ParamByName('aa').LoadFromStream(xp,ftblob);
                execsql;
            end;
        image1.Picture.Assign(nil);
    end;      显示:
    var
    xp:Tmemorystream;
    jpeg:Tpicture;
    begin
     with adoquery1 do
            begin
                close;
                sql.Clear;
                sql.Add('select * from 照片表 where 序号=:aa');
                adoquery1.Parameters.ParamByName('aa').Value:=edit1.text;
                open;
            end;
        if adoquery1.RecordCount<>0 then
            begin
                xp:=Tmemorystream.Create;
                jpeg:=Tpicture.Create;
                tblobfield(adoquery1.FieldByName('照片')).SaveToStream(xp);
                xp.Seek(0,sofrombeginning);
                jpeg.Graphic.LoadFromStream(xp);
                image1.Picture.Assign(jpeg);
            end;
    end;可是运行显示时总是弹出错误信息,请各位大侠帮我看看,谢谢!!
      

  11.   

    用你的方法保存图片肯定没有问题,但是如果存的是bmp格式的图片读的时候就会有问题,除非你能事先判断出图片的格式,不知道各位大侠还有何高见,帮你up!
      

  12.   

    关于显示图片var
    xp:Tmemorystream;
    jpeg:Tjpegimage;
    bmp:tbitmap;
    buffer:word;
    begin
     with adoquery1 do
            begin
                close;
                sql.Clear;
                sql.Add('select * from 照片表 where 序号=:aa');
                adoquery1.Parameters.ParamByName('aa').Value:=edit1.text;
                open;
            end;
      if adoquery1.RecordCount<>0 then
         begin
          xp:=Tmemorystream.Create;
          xp.ReadBuffer(Buffer,2);
          xp.Position:=0;
          if Buffer=$4D42 then    
          begin
           //BMP            bmp:=Tbitmap.Create;
                tblobfield(adoquery1.FieldByName('照片')).SaveToStream(xp);
                xp.Seek(0,sofrombeginning);
                bmp.LoadFromStream(xp);
                image1.Picture.Assign(bmp);
           end ;
          else if Buffer=$D8FF then
          begin
            //JPEG            jpeg:=Tjpegimage.Create;
                tblobfield(adoquery1.FieldByName('照片')).SaveToStream(xp);
                xp.Seek(0,sofrombeginning);
                jpeg.LoadFromStream(xp);
                image1.Picture.Assign(jpeg);
          end    end;
     end;但是运行后,显示stream read error的错误信息,请问这是怎么回事?谢谢大家