请问Delphi5.0怎样写代码图片存入数据库。(在线等待十分急,分不够再加)

解决方案 »

  1.   

    输入图片到blob字段: procedure TForm1.Button1Click(Sender: TObject);
      var
        C: TClipboard;
      begin
        C := TClipboard.Create;
        try
          if Clipboard.HasFormat(CF_BITMAP) then        DBImage1.PasteFromClipboard
          else
            ShowMessage('Clipboard does not contain a bitmap!');
        finally
          C.Free;
        end;
      end;
      procedure TForm1.Button2Click(Sender: TObject);
      begin
        Table1Bitmap.LoadFromFile(
          'c:\delphi\images\splash\16color\construc.bmp');
      end;procedure TForm1.Button3Click(Sender: TObject);
      var
        B: TBitmap;
      begin
        B := TBitmap.Create;
        try
          B.LoadFromFile('c:\delphi\images\splash\16color\athena.bmp');
          DBImage1.Picture.Assign(B);
        finally
          B.Free;
        end;
      end;
    ///////////////////////////////////////////////////////////
    var
      st: TStringStream;
    begin
      st := tstringstream.create('');
      bitmap.savetostream(st);
      query1.sql.text := 'insert into table Image_field values :bmp';
      query1.parambyname('bmp').asblob := st.datastring;
      query1.execsql;
      st.free;
    end;
    ////////////////////////////////////////////////////////////////////////
    unit Unit1; interface {$IFDEF WIN32} 
      uses 
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
          Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, 
          DBTables; 
    {$ELSE} 
    uses 
      SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, 
      Forms, Dialogs, DBTables, DB, Grids, DBGrids, ExtCtrls, StdCtrls; 
    {$ENDIF} type 
      TForm1 = class(TForm) 
        Table1: TTable; 
        DataSource1: TDataSource; 
        DBGrid1: TDBGrid; 
        Image1: TImage; 
        Button1: TButton; 
        Table1Name: TStringField; 
        Table1WMF: TBlobField; 
        OpenDialog1: TOpenDialog; 
        procedure FormCreate(Sender: TObject); 
        procedure FormDestroy(Sender: TObject); 
        procedure Button1Click(Sender: TObject); 
        procedure DataSource1DataChange(Sender: TObject; Field: TField); 
      private 
        { Private declarations } 
        FileName : string; {Used to hold a temp file name} 
        procedure LoadWMFFromDatabase; {loads a WMF from the database} 
      public 
        { Public declarations } 
      end; var 
      Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); 
    begin 
     {Used for loading metafiles} 
      OpenDialog1.Filter := 'Metafiles (*.wmf)|*.wmf'; 
      OpenDialog1.Options := [ofHideReadOnly, ofNoChangeDir]; 
      Image1.Stretch := true; 
    end; procedure TForm1.FormDestroy(Sender: TObject); 
    begin 
     {Erase the temp file if it exists} 
      if FileName <> '' then 
        DeleteFile(FileName); 
    end; {This function gets a temporary file name form the system} 
    function GetTemporaryFileName : string; 
    {$IFNDEF WIN32} 
      const MAX_PATH = 144; 
    {$ENDIF} 
    var 
     {$IFDEF WIN32} 
      lpPathBuffer : PChar; 
     {$ENDIF} 
      lpbuffer : PChar; 
    begin 
     {Get the file name buffer} 
      GetMem(lpBuffer, MAX_PATH); 
     {$IFDEF WIN32} 
     {Get the temp path buffer} 
      GetMem(lpPathBuffer, MAX_PATH); 
     {Get the temp path} 
      GetTempPath(MAX_PATH, lpPathBuffer); 
     {Get the temp file name} 
      GetTempFileName(lpPathBuffer, 
                      'tmp', 
                      0, 
                      lpBuffer); 
     {Free the temp path buffer} 
      FreeMem(lpPathBuffer, MAX_PATH); 
     {$ELSE} 
     {Get the temp file name} 
      GetTempFileName(GetTempDrive('C'), 
                      'tmp', 
                      0, 
                      lpBuffer); 
     {$ENDIF} 
     {Create a pascal string containg} 
     {the  temp file name and return it} 
      result := StrPas(lpBuffer); 
     {Free the file name buffer} 
      FreeMem(lpBuffer, MAX_PATH); 
    end; procedure TForm1.LoadWMFFromDatabase; 
    var 
      FileStream: TFileStream; {a temp file} 
      BlobStream: TBlobStream; {the WMF Blob} 
    begin 
      Image1.Picture.Metafile.Assign(nil); 
     {Create a blob stream for the WMF blob} 
      BlobStream := TBlobStream.Create(Table1WMF, bmRead); 
      if BlobStream.Size = 0 then begin 
       BlobStream.Free; 
       Exit; 
      end; 
     {if we have a temp file then erase it} 
      if FileName <> '' then 
        DeleteFile(FileName); 
     {Get a temp file name} 
      FileName := GetTemporaryFileName; 
     {Create a temp file stream} 
      FileStream := TFileStream.Create(FileName, 
                                       fmCreate or fmOpenWrite); 
     {Copy the blob to the temp file} 
      FileStream.CopyFrom(BlobStream, BlobStream.Size); 
     {Free the streams} 
      FileStream.Free; 
      BlobStream.Free; 
     {Dispaly the image} 
      Image1.Picture.Metafile.LoadFromFile(FileName); 
    end; {Save a wmf file to the database} 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      FileStream: TFileStream; {to load the wmf file} 
      BlobStream: TBlobStream; {to save to the blob} 
    begin 
     {Allow the button to repaint} 
      Application.ProcessMessages; 
      if OpenDialog1.Execute then begin 
       {Turn off the button} 
        Button1.Enabled := false; 
       {Assign the avi file name to read} 
        FileStream := TFileStream.Create(OpenDialog1.FileName, 
                                         fmOpenRead); 
        Table1.Edit; 
       {Create a BlobStream for the field Table1WMF} 
        BlobStream := TBlobStream.Create(Table1WMF, bmReadWrite); 
       {Seek to the Begginning of the stream} 
        BlobStream.Seek(0, soFromBeginning); 
       {Delete any data that may be there} 
        BlobStream.Truncate; 
       {Copy from the FileStream to the BlobStream} 
        BlobStream.CopyFrom(FileStream, FileStream.Size); 
       {Free the streams} 
        FileStream.Free; 
        BlobStream.Free; 
       {Post the record} 
        Table1.Post; 
       {Load the metafile in to a TImage} 
        LoadWMFFromDatabase; 
       {Enable the button} 
        Button1.Enabled := true; 
      end; 
    end; procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); 
    begin 
      if (Sender as TDataSource).State = dsBrowse then 
        LoadWMFFromDatabase; 
    end; end. 
      

  2.   

    private
        ...   
     picfile:string;function BlobContentToString(const filename:string):string;
     begin
     with Tfilestream.Create(filename,fmopenread) do
      try
       begin
       setlength(Result,size);
       read(pointer(Result)^,size);
       end;
       finally
       free;
       end;
     end;
    ....OpenPictureDialog1.Execute;
    picfile:=OpenPictureDialog1.FileName;...if picfile<>'' then fieldByName('照片').AsString:=blobcontenttostring(picfile);
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Unit2, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;type
      TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        DBImage1: TDBImage;
        DBNavigator1: TDBNavigator;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Database1: TDatabase;
        OpenDialog1: TOpenDialog;
        Image1: TImage;
        Button4: TButton;
        Button5: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Database1BeforeConnect(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Database1.Open;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      DataModule1.Table1.Close;
      Database1.Close;
    end;procedure TForm1.FormActivate(Sender: TObject);
    begin
      DataModule1.Table1.Open;
    end;procedure TForm1.Button3Click(Sender: TObject);
    var
       bmp : TBitMap;
    begin
      if OpenDialog1.Execute then
      begin
        bmp := TBitMap.Create;
        bmp.LoadFromFile(OpenDialog1.FileName);
        Image1.Picture.Bitmap := bmp;
        bmp.Free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      MaxNo : Integer;
      MStream:TMemoryStream;
    begin
      With DataModule1.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select Max(No) from testblob');
        if Not Prepared then Prepared := True;
        Open;
        MaxNo := Fields[0].AsInteger;
      end;
      MStream := TMemoryStream.Create;
      Image1.Picture.Bitmap.SaveToStream(MStream);
      ShowMessage(IntToStr(MStream.Size));
      MStream.Position := 0;
      DataModule1.Table1.Insert;
      DataModule1.Table1.FieldByName('No').AsInteger := MaxNo + 1;
      //DataModule1.Table1.Fields[1].Assign(Image1.Picture.Bitmap);
      //TBlobField(DataModule1.Table1.FieldByName('Image')).LoadFromStream(MStream);
      try
        DataModule1.Table1.Post;
      except
        ON E:Exception do
          begin
           MStream.Free;
           Showmessage(E.Message);
           Exit;
          end;
      end;
      MStream.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      DataModule1.Table1.Delete;
    end;procedure TForm1.Button4Click(Sender: TObject);
    var
      BlobS : TBlobStream;
    begin
      Image1.Hide;
      //Image1.Picture.Bitmap.FreeImage;
      BlobS := TBlobStream.Create(TBlobField(DataModule1.Table1.FieldByName('Image')),bmRead);
      Image1.Picture.bitmap.LoadFromStream(BlobS);
      Image1.Refresh;
      Image1.Show;
      BlobS.Free;
    end;procedure TForm1.Button5Click(Sender: TObject);
    var
      MaxNo : Integer;
      MStream:TStringStream;
    begin
      With DataModule1.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select Max(No) from testblob');
        if Not Prepared then Prepared := True;
        Open;
        MaxNo := Fields[0].AsInteger;
      end;
      MStream := TStringStream.Create('');
      Image1.Picture.Bitmap.SaveToStream(MStream);
      ShowMessage(IntToStr(MStream.Size));
      MStream.Position := 0;
      DataModule1.Query1.Active := False;
      DataModule1.Query1.Close;
      DataModule1.Query1.SQL.Clear;
      DataModule1.Query1.SQL.Add('Insert into testblob values(:No,:Image)');
      DataModule1.Query1.ParamByName('No').AsInteger := MaxNo + 1;
      DataModule1.Query1.ParamByName('Image').AsBlob := MStream.DataString;
      DataModule1.Query1.Prepare;
      DataModule1.Query1.ExecSQL;
      DataModule1.Table1.Refresh;
    end;procedure TForm1.Database1BeforeConnect(Sender: TObject);
    begin
      DataBase1.Session.SQLHourGlass := False;
    end;end.