在ACCESS数据库里面用什么字段类型保存图片啊,DELPHI怎么写保存,怎么写读取啊,用什么控件显示啊,谢谢!

解决方案 »

  1.   

    uses 
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialog*, 
      **tCtrls, 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;