我用SQL Server2000建的数据表,里面有个字段用来存储图片数据(是不是image类型?),现在我不知道怎么把一张图片存到我的数据表中去,而且怎么显示存储在数据表中的图片?应该是用TDBImage控件吧,具体怎么用,望赐教啊!

解决方案 »

  1.   

    TDBImage 有属性的设置下就可以了。这个下面是不用TDBImage的方法,
    ....
    function TDbBlobField.LoadFromFile(FileName: String): boolean;
    var MemSize :integer; Buffer :pchar;
        FileStream :TFileStream;
        BlobSteam :TBlobStream;
    begin
      try
       FileStream := TFileStream.Create(FileName,fmOpenRead);
       with FOwnerTable do
       begin
         BlobSteam := TBlobStream.Create(FBindField as TBlobField,bmWrite);
         MemSize := FileStream.Size ;
         inc(MemSize);
         Buffer := AllocMem(MemSize);
         try
           BlobSteam.Seek(0,soFromBeginning);
           FileStream.Read(Buffer^,MemSize);
           BlobSteam.Write(Buffer^,MemSize);
         finally
           BlobSteam.Free ;
           FileStream.Free ;
         end;
       end;
       Result := True;
      except
        Result := False;
      end;
    end;... 
    代码不全,仅参考。
      

  2.   

    设置DBImage的Datacource属性为DataSource1
    DataSource1的DataSet指定为Table1
    DBImage的DataField属性设置成你的那个字段名比如"TuPian"
    然后
    Table1.Append;
    //加载图片
    Table1.Post;打完收工
      

  3.   

    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;
      

  4.   

    use jpeg
    就可以使用JPG图片了。
       其实有一个很简单的方法存取图象(仅限BMP和JPEG)到数据库字段中,不需要使用流,我初学还不会流。
       这是我的一个代码:unit Unitpic;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DBCtrls, StdCtrls, DB, Grids, DBGrids, ADODB, Mask;type
      TForm1 = class(TForm)
        ADOTable1: TADOTable;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        ADOTable1DSDesigner: TWideStringField;
        ADOTable1DSDesigner2: TWideStringField;
        ADOTable1DSDesigner3: TBlobField;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        DBImage1: TDBImage;
        OpenDialog1: TOpenDialog;
        DBEdit1: TDBEdit;
        DBComboBox1: TDBComboBox;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure DBImage1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
        if not adotable1.Bof then
           adotable1.Prior;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
        if  not adotable1.Eof then
            adotable1.Next;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
        adotable1.Insert;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
        adotable1.Delete;
        if adotable1.Eof then
        showmessage('没有数据了!');
    end;procedure TForm1.DBImage1Click(Sender: TObject);
    begin
        if opendialog1.Execute then
            begin
                adotable1.Edit;
                 ADOTable1DSDesigner3.LoadFromFile(opendialog1.FileName);
            end;
    end;end.
      

  5.   

    如果简单的用EDIT POST方式,将DBIMAGE属性连到某个字段,这样只能存bmp文件,如果用流方式连接文件,其他方式也可以存吧。。:)
      

  6.   

    还有一个问题:图片存在SQL Server2000数据表中,字段数值表现的是什么?  我的都还是<Binary>