在Delphi中如何在数据库中保存和读取照片---------------流和文件

解决方案 »

  1.   

    回答了很多这样的问题,技术方案就是用BLOB字段,你上网搜一下很多这样的文章。
      

  2.   

    下面是利用流在sqlserver中保存图片的代码,看看对你是否有帮助。
    读取图片,我直接用的是dmimage控件与数据库关联,偷懒了。
    procedure TFrmNewGoods.AddPicture(sgoodscode:String);
    var
      picstream:tadoblobstream;
      bmppic:tbitmap;
      jpgpic:tjpegimage;
      bmpstream:TMemoryStream;
      OpenPicDialog:TOpenPictureDialog;
      itype:boolean;
    begin
      try
        OpenPicDialog:=TOpenPictureDialog.Create(nil);
        //if messagedlg('此商品是否有图片信息,如果有请选择是进行保存,否则选则否退出!',mtInformation,[mbYes, mbNo], 0) = mrNo then exit;
        adoquery1.Connection:=DMdataMode.DBConnection;
        OpenPicDialog.Filter:='All *.jpg;|*.jpg;)';
        itype:=false;
        adoquery1.SQL.Text:='select goodscode,picture from gds_goodscode with(nolock) where goodscode='+sgoodscode;
        adoquery1.open;
        adoquery1.Edit;
        if OpenPicDialog.Execute then
        begin
          jpgpic:=tjpegimage.Create;
          bmppic:=tbitmap.Create;
          bmpstream:=tmemorystream.Create;
          jpgpic.LoadFromFile(OpenPicDialog.filename);
          bmppic.Assign(jpgpic);
          bmppic.SaveToStream(bmpstream);
          picstream:=tadoblobstream.Create(tblobfield(adoquery1.Fields[1]),bmWrite);
          picstream.LoadFromStream(bmpstream);
          picstream.Position:=0;
          tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
          itype:=true;
        end;
        adoquery1.Post;
        if itype then
        begin
          Adoquery1.Edit;
          picstream.Free;
          jpgpic.Free;
          bmppic.Free;
          bmpstream.Free;
        end;
      finally
        OpenPicDialog.free;
      end;
    end;