用数据库怎样存放一张照片???

解决方案 »

  1.   

    var 
      MyJPEG : TJPEGImage;
      MS: TMemoryStream;
    begin
      openpicturedialog1.Execute;
      if openpicturedialog1.FileName<>'' then
      begin
        image.Picture.LoadFromFile(openpicturedialog1.FileName);
        openpicturedialog1.FileName:='';
        MyJPEG := TJPEGImage.Create;
        try
          with MyJPEG do
          begin
            Assign(Image.Picture.Graphic);
            MS:=TMemoryStream.create;
            SaveToStream(MS);
            MS.Position:=0;
            adotable1.Append;
            TBlobField(adotable1.FieldbyName('photo')).LoadFromStream(MS);
            adotable1.Post;
            messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);
            image.Picture.CleanupInstance;
          end;
        finally
          MyJPEG.Free;
        end;
      end;
    显示图片
    var
      tempstream:TStringStream;
      tempjpeg:TJPEGImage;
    begin
      try
        tempstream:=TStringStream.Create(' ');
        TBlobField(adodataset1.FieldByName('photo')).SaveToStream(tempstream);
        tempstream.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(tempstream);
        DBImage1.Picture.Bitmap.Assign(tempjpeg);
      finally
        tempstream.Free;
        tempjpeg.Free;
      end;
    end;
      

  2.   

    这是一段CB的代码,你可以自己改变一下://往数据库中存放图片
    bool SetImgField(TDataSet * tds,TField * tfd,TPicture  *pPicture)
    {
      TJPEGImage *jp = new TJPEGImage();
      bool flag = true;
      jp->Assign(pPicture->Bitmap);
      TStream *pstream;
      pstream = tds->CreateBlobStream(tfd, bmReadWrite);
      try
      {
        jp->Compress();
        jp->SaveToStream(pstream);
        //flag = true;
      }
      __finally
      {
        delete pstream;
        //flag = false;
      }
      delete jp;
      return flag;
    }
    //---------------------------------------------------------------------------
    //从数据库中读出图片
    bool GetImgField(TPicture  *pPicture, TDataSet * tds, TField * tfd)
    {
      TStream *pstream;
      pstream = tds->CreateBlobStream( tfd, bmRead);
      if( pstream->Size == 0) return false;
      TJPEGImage *jp = new TJPEGImage();
      try
      {
        jp->LoadFromStream(pstream);
      }
      __finally
      {
        delete pstream;
      }
      pPicture->Bitmap->Assign( jp ) ;
      delete jp;
      return true;
    }