程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 數據庫應用程序開發中圖像數據的存取技術

數據庫應用程序開發中圖像數據的存取技術

編輯:Delphi
  Delphi提供了數據訪問(DataAccess)和數據控制(DataControls)的可視化控件,能夠方便快捷地產生具有良好界面且功能強大的數據庫應用程序。對於涉及圖像數據(含Graphic字段)的數據庫應用程序,如人事管理信息系統等,圖像數據的存取技術是一個關鍵。然而,有關Delphi下圖象的存取,特別是圖像的保存方面的技術各種資料上很少提及。下面,筆者結合一個簡單的例子來說明。
  
  
  一、圖像數據的保存
  
  1.創建一個含有Graphic字段的數據庫列表。
  
  在WindowsISQ(或Databasedesktop)下create database mydb.gdb
  
  
  create table myfrIEds(name varchar(15) notnull,telephone varchar(12), address varchar(30),zipvarchar(8),picture varchar(15),image blob);
  
  
  其中,picture字段用於保存圖像的名稱(包括路徑),image(Graphic字符)則用於存儲圖像,其數據類型為“blob”。
  
  
  2.建立窗體(如圖1所示),設置窗體中各控件的屬性。
  
  
  該窗體的主要功能是將某人信息進行編輯和保存。需要注意的圖像保存所用的圖像框必須用TImage而不能用TDBImage,編輯框宜用Tedit而不宜用TDBEdit,這一點與圖像的讀取恰好相反。
  
  
  其中,各主要控件的屬性設置如下:
  
  Datasource1.Dataset:=table1;
  
  Table1.Databasename:=mydb.gdb;
  
  Table1.Tablename:=myfrIEnds;
  
  Table1.active:=true;
  
  其他諸如Caption之類的屬性設置不再敘述。
  
  
  3.數據處理程序的建立。
  
  (1)圖像( .bmp文件)打開的處理。
  
  procedureTForm1.pictopenbtnClick(Sender:TObject);
  
  beginopendialog1.execute;
  
  image1.picture.loadfromfile(opendialog1.filename);
  
  end;
  
  
  (2)圖像保存的處理。
  
  圖像保存的處理程序完成把在窗體1所編輯的信息包括圖像保存到相應的數據庫中,其關鍵是要定義一個Graphic類型的變量且該變量要用Assign()函數傳遞到相應數據庫中保存。具體程序如下:
  
  procedureTform1.Savebtnclick(sender:TObject);
  
  var
  
  graphic1:TGraphic;
  
  begin
  
  graphic1:=TGraphic.Create;
  
  graphic1.loadfromfile(opendialog1.filename);
  
  table1.insert;
  
  table1.fIEldbyname('name').asstring:=edit1.text;
  
  table1.fIEldbyname('telephon').asstring:=edit2.text;
  
  table1.fIEldbyname('address').asfloat:=edit3.text;
  
  table1.fIEldbyname('zip').asfloat:=edit4.text;
  
  table1.fIElds[4].assign(graphic1);
  
  table1.post;
  
  graphic1.free;
  
  end;
  
  
  二、圖像數據的讀取
  
  在數據庫數據(包括Graphic字段的數據)的讀取和浏覽方面,Delphi這一具有強大代碼自動生成功能的面向對象的開發工具的優越性得到淋漓盡致的體現。毫不誇張地說,不需要一條語句即可完成這一功能!
  
  圖中Table1和Datasource1的屬性的設置與數據的保存部分(圖1)相同,所不同的是數據庫數據的讀取時用TDBEdit和TDBImage控件而不用TEdit和TImage。控件TDBEdit和TDBImage只要將datafIEld屬性設置為其相對應的域;TDBNavigator的datasouce屬性設置為datasource1即可。
  
  tre
  
  級別: 散兵  
  來自:廈門
  OICQ:
  積分:457
  專家分:107
  總排名:180
  最後現身:2001-5-23 19:34:05(登陸100次)  
  發表於: 2001-5-23 20:02:40
  
  
  --------------------------------------------------------------------------------
  我也貼片給你是李維ado書上的
  procedure TForm1.Button1Click(Sender: TObject);
  var
  sfilename:string;
  function blobcont(const filename:string):string;
    begin
    with tfilestream.Create(filename,fmopenread) do
     try
      setlength(result,size);
      read(pointer(result)^,size);
     finally
      free;
     end;
    end;
  
  begin
  if opendialog1.Execute then
    begin
      sfilename:=opendialog1.FileName;
      adodataset1.Append;
      adodataset1.FIEldByName('ff').asstring:=blobcont(sfilename);
      adodataset1.Post;
    end;
  end;
  
  procedure TForm1.Button2Click(Sender: TObject);
  var
  sfilename:string;
  bs:tadoblobstream;
  begin
  bs:=tadoblobstream.Create(tblobfield(adodataset1.FIEldByName('ff')),bmread);
  try
  
    sfilename:='c:ff.doc';//換成圖片格式就可以了
    if fileexists(sfilename) then
     deletefile(sfilename);
    bs.SaveTofile(sfilename);
    OleContainer1.CreateObjectFromFile(sfilename,false);
    //OleContainer1.LoadFromFile(sfilename);
    //OleContainer1.LoadFromStream()
    //memo1.Lines.LoadFromFile(sfilename);
  // WebBrowser1.Navigate(pchar(sfilename));
  finally
    bs.free;
  end;
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved