全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1950
推到 Plurk!
推到 Facebook!

如何成批地把圖片加入資料庫?

答題得分者是:banson1716
bensonh
一般會員


發表:4
回覆:2
積分:1
註冊:2002-12-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-30 12:16:42 IP:211.161.xxx.xxx 未訂閱
各位高手,我在編寫資料庫程式時,遇到一個問題,即如何成批把JPG格式圖片插入到現有的資料庫,若能幫我解決,將不勝感激。
banson1716
高階會員


發表:55
回覆:182
積分:167
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-31 17:56:16 IP:61.223.xxx.xxx 未訂閱
程式 d5 調試 unit Unit1;    interface    uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,   Dialogs, Grids, DBGrids, DB, DBTables, DBCtrls, ExtDlgs, ExtCtrls,   StdCtrls;    type   TForm1 = class(TForm)     Table1: TTable;     DataSource1: TDataSource;     DBGrid1: TDBGrid;     Table1NAME: TStringField;     Table1SIZE: TSmallintField;     Table1WEIGHT: TSmallintField;     Table1AREA: TStringField;     Table1BMP: TBlobField;     OpenPictureDialog1: TOpenPictureDialog;     Panel1: TPanel;     DBNavigator1: TDBNavigator;     Button1: TButton;     Panel2: TPanel;     Edit1: TEdit;     procedure FormCreate(Sender: TObject);     procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;       Field: TField; State: TGridDrawState);     procedure DBGrid1DblClick(Sender: TObject);     procedure Button1Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;    var   Form1: TForm1;    implementation Uses Jpeg; {$R *.dfm}    procedure TForm1.FormCreate(Sender: TObject); begin   Table1.Close;   Table1.DatabaseName:='DBDEMOS';   Table1.TableName:='animals.dbf';   Table1.Open; end;    type   TGraphicHeader = record     Count: Word;                     HType: Word;                     Size: Longint;                 end;    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;   Field: TField; State: TGridDrawState); Var BlobStream:TBlobStream;   BMP:TBitmap;   JPEGs:TJPEGImage;   JPEGStream:TMemoryStream;   Header:TGraphicHeader; begin                              if Field.IsBlob then                 begin                               if not Field.IsNull then           begin       BlobStream:=TBlobStream.Create(TBlobField(Field),bmRead);       try         BlobStream.Read(Header,Sizeof(TGraphicHeader));         //先讀一個流頭,這個流頭中記錄有圖片類型和圖片大小.         //對於BMP,TBlobField.Assign(方法會自動保存這個記錄,如果是JPG圖片,則需要編程去處理.)         if (Header.Count<>1) or (Header.Size<>(BlobStream.Size-SizeOf(Header))) then           DBGrid1.Canvas.TextOut(Rect.Left,Rect.Top,'') //如果數據不符,則表示是錯誤數據. else begin if (Header.HType=$0100) then//BMP圖片 begin BMP:=TBitmap.Create; try BMP.LoadFromStream(BlobStream); //從頭開始後面的數據. DBGrid1.Canvas.StretchDraw(Rect,BMP); //繪制在表格中. finally BMP.Free; end; end else if Header.HType=$0101 then//JPEG圖片. begin JPEGs:=TJPEGImage.Create; JPEGStream:=TMemoryStream.Create; try JPEGStream.CopyFrom(BlobStream,Header.Size); //截取圖片數據. JPEGStream.Seek(0,0); JPEGs.LoadFromStream(JPEGStream); //把圖片數據放入圖片. DBGrid1.Canvas.StretchDraw(Rect,JPEGs); //在表格中繪圖片. finally JPEGStream.Free; JPEGs.Free; end; end; end; finally BlobStream.Free; end; end else DBGrid1.Canvas.TextOut(Rect.Left,Rect.Top,''); //空數據. end else DBGrid1.DefaultDrawDataCell(Rect,Field,State); //其他格子. end; procedure TForm1.DBGrid1DblClick(Sender: TObject); Var Picture:TPicture; BlobStream:TBlobStream; MemStream:TMemoryStream; Header:TGraphicHeader; begin if DBGrid1.SelectedField.IsBlob then begin if OpenPictureDialog1.Execute then begin try Picture:=TPicture.Create; try Picture.LoadFromFile(OpenPictureDialog1.FileName); if Picture.Graphic is TBitmap then begin DBGrid1.DataSource.DataSet.Edit; TBlobField(DBGrid1.SelectedField).Assign(Picture); //這個語句會自動處理流頭的數據,其中BMP類型的Header.HType:=$0100; DBGrid1.DataSource.DataSet.Post; end else if Picture.Graphic is TJPEGImage then //JPG圖片. begin MemStream:=TMemoryStream.Create; try TJPEGImage(Picture.Graphic).SaveToStream(MemStream); //存入臨時流. Header.Count:=1; Header.HType:=$0101; //JPG數據的Header.HType:=$0101當然也可以定為其他不等於$0100的值. Header.Size:=MemStream.Size; DBGrid1.DataSource.DataSet.Edit; BlobStream:=TBlobStream.Create(TBlobField(DBGrid1.SelectedField),bmWrite); //創建Blob流. try MemStream.Seek(0,0); BlobStream.Write(Header,sizeof(Header)); //先寫入流頭. BlobStream.CopyFrom(MemStream,MemStream.Size); //寫入圖片數據. finally BlobStream.Free; DBGrid1.DataSource.DataSet.Post; end; finally MemStream.Free; end; end; finally Picture.Free; end; Except end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); Var Picture:TPicture; BlobStream:TBlobStream; MemStream:TMemoryStream; Header:TGraphicHeader; i :integer; begin if OpenPictureDialog1.Execute then begin for i:=0 to OpenPictureDialog1.Files.count-1 do begin try Picture:=TPicture.Create; try Picture.LoadFromFile(OpenPictureDialog1.files[i]); if Picture.Graphic is TBitmap then ////BMP 圖片. begin DBGrid1.DataSource.DataSet.Append; TBlobField(DBGrid1.SelectedField).Assign(Picture); //這個語句會自動處理流頭的數據,其中BMP類型的Header.HType:=$0100; DBGrid1.DataSource.DataSet.Post; end else if Picture.Graphic is TJPEGImage then //JPG圖片. begin MemStream:=TMemoryStream.Create; try TJPEGImage(Picture.Graphic).SaveToStream(MemStream); //存入臨時流. Header.Count:=1; Header.HType:=$0101; //JPG數據的Header.HType:=$0101當然也可以定為其他不等於$0100的值. Header.Size:=MemStream.Size; DBGrid1.DataSource.DataSet.Append; BlobStream := TBlobStream.Create(TBlobField(Table1.FieldByName('BMP')),bmReadWrite); try MemStream.Seek(0,0); BlobStream.Write(Header,sizeof(Header)); //先寫入流頭. BlobStream.CopyFrom(MemStream,MemStream.Size); //寫入圖片數據. finally BlobStream.Free; Table1.Post; end; finally MemStream.Free; end; end; finally Picture.Free; end; Except end; end; end; end; end.
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-31 23:51:43 IP:192.168.xxx.xxx 未訂閱
引言: 各位高手,我在編寫資料庫程式時,遇到一個問題,即如何成批把JPG格式圖片插入到現有的資料庫,若能幫我解決,將不勝感激。
請參考站長寫的範例程式,將大型圖檔存入資料庫的示範程式: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19505 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
banson1716
高階會員


發表:55
回覆:182
積分:167
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-01 16:08:57 IP:61.223.xxx.xxx 未訂閱
VAR I :INTEGER; begin    if OpenPictureDialog1.Execute then    begin      for i:=0 to OpenPictureDialog1.Files.count-1 do       begin       ADOTable1.append;       ADOTable1.FieldByName('IMG_FILENAME').AsString:=                   Extractfilename(OpenPictureDialog1.Files[i]);       ADOTable1.FieldByName('IMG_FILESIZE').AsInteger:=          filesizes(OpenPictureDialog1.Files[i]);       TBlobField(ADOTable1.FieldByName('IMG_FILEDATA')).loadfromfile(OpenPictureDialog1.Files[i]);       ADOTable1.post;       ADOTable1AfterScroll(ADOTable1);   end;   END;     
引言: 請參考站長寫的範例程式,將大型圖檔存入資料庫的示範程式: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19505 ~~~Delphi K.Top討論區站長~~~
banson1716
高階會員


發表:55
回覆:182
積分:167
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-02 12:37:58 IP:61.223.xxx.xxx 未訂閱
OpenPictureDialog1.Options :=[ofAllowMultiSelect];//加入此段可多重選擇存入資料庫檔案 if OpenPictureDialog1.Execute then begin . . . . .  
引言: 請參考站長寫的範例程式,將大型圖檔存入資料庫的示範程式: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19505 ~~~Delphi K.Top討論區站長~~~
bensonh
一般會員


發表:4
回覆:2
積分:1
註冊:2002-12-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-02 14:19:17 IP:211.161.xxx.xxx 未訂閱
非常感谢BENSON1716和站长,问题已基本上解决了,再次感谢,祝新的一年里万事如意,心想事成!!!
bensonh
一般會員


發表:4
回覆:2
積分:1
註冊:2002-12-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-02 14:27:54 IP:211.161.xxx.xxx 未訂閱
非常感謝BENSON1716和站長,問題已基本解決,再次謝謝!!!祝在新的一年裏萬事如意,心想事成!
系統時間:2024-05-14 16:13:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!