線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1462
推到 Plurk!
推到 Facebook!

Delphi資料庫應用程式開發中圖像資料的存取技術

尚未結案
linky
一般會員


發表:1
回覆:1
積分:0
註冊:2002-09-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-03 17:08:16 IP:202.39.xxx.xxx 未訂閱
Delphi提供了資料訪問(DataAccess)和資料控制(DataControls)的視覺化控制項,能夠方便快捷地?生具有良好介面且功能強大的資料庫應用程式。對於涉及圖像資料(含Graphic欄位)的資料庫應用程式,如人事管理資訊系統等,圖像資料的存取技術是一個關鍵。然而,有關Delphi下圖像的存取,特別是圖像的保存方面的技術各種資料上很少提及。下面,筆者結合一個簡單的例子來說明。 一、圖像資料的保存 1.創建一個含有Graphic欄位的資料庫列表。 在WindowsISQ(或Databasedesktop)下createdatabasemydb.gdbcreatetablemyfrieds(namevarchar(15)notnull,telephonevarchar(12),addressvarchar(30),zipvarchar(8),picturevarchar(15),imageblob); 其中,picture欄位用於保存圖像的名稱(包括路徑),image(Graphic字元)則用於存儲圖像,其資料類型?“blob”。 2.建立表單(如圖1所示),設置表單中各控制項的屬性。 該表單的主要功能是將某人資訊進行編輯和保存。需要注意的圖像保存所用的圖像框必須用TImage而不能用TDBImQage,編輯框宜用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類型的變數且該變數要用assing()函數傳遞到相應資料庫中保存。具體程式如下: procedureTform1.Savebtnclick(sender:TObject); vargraphic1:TGraphic; begin graphic1:=TGraphic.Create; graphic1.loadfromfile(opendialog1.filename); table1.insert; 這是在大陸網站找到一篇文章,但實際操作有問題, 能請各位找一下問題在那嗎?試了很久說。 發表人 - linky 於 2002/10/03 17:26:10 發表人 - linky 於 2002/10/03 17:29:15
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-03 17:11:52 IP:61.220.xxx.xxx 未訂閱
??????????????????????????? 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-04 09:04:15 IP:61.219.xxx.xxx 未訂閱
不知所云 圖像之存取不過就是BLOB 欄位嗎, 有什麼問題 用TImage就以Stream方式存取,用TDBImage就直接Connect沒什麼特別啊 只是BLOB field有兩個限制定義在alias之設定上須注意, 也不是圖像才這樣,所有BLOB 均一樣(由SQL Explorer中看看) 1. BLOB size: 一個BLOB最大size,單位為KB, 若不夠可以改大 2. 最多BLOB之數量,預設為64,即若用 Data Aware開含有BLOB之Table,資料超過64筆就完了. 改大此數字故可解決, 卻會造成效率問題,這是所以不直用DataAware處理BLOB之原因. 解決方法: 不要將BLOB包含在Dataset之data field中 1. 用TImage單獨處理 2. Create一個Calculate field在onCalculate中取入, 仍可用TDBImage 3. 用單獨之Query在原DataSet之AfterScroll中取入,同樣可用TDBImage
linky
一般會員


發表:1
回覆:1
積分:0
註冊:2002-09-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-04 11:38:48 IP:202.39.xxx.xxx 未訂閱
先說 ---- 我是個新手 看不太懂!!!!! procedure TForm1.Button1Click(Sender: TObject); begin opendialog1.execute; image1.picture.loadfromfile(opendialog1.filename); end; //要先挑選一張圖到image1中 procedure TForm1.Button2Click(Sender: TObject); begin try Query1.Close; Query1.SQL.Clear; Query1.Params.Clear; Query1.SQL.Add('INSERT INTO CLASS (學號,姓名,座號,班級,地址,電話)'); Query1.SQL.Add('VALUES (:Q1 , :Q2 , :Q3 , :Q4 , :Q5 , :Q6 )'); Query1.ParamByName('Q1').AsString:=Edit1.Text; Query1.ParamByName('Q2').AsString:=Edit2.Text; Query1.ParamByName('Q3').AsString:=Edit3.Text; Query1.ParamByName('Q4').AsString:=Edit4.Text; Query1.ParamByName('Q5').AsString:=Edit5.Text; Query1.ParamByName('Q6').AsString:=Edit6.Text; Query1.ExecSQL; FormCreate(Sender); MessageDlg('寫入成功!' ,mtInformation,[mbOK],0); except MessageDlg('寫入失敗!' ,mtError,[mbOK],0); end; end; //那該如何將所選到的圖片加到資料庫中呢? 是不是在insert 加入 圖片一個field 然後再 Query1.ParamByName('Q6').AsBlob:=image1.picture; ?????? 發表人 - linky 於 2002/10/04 11:43:00
系統時間:2024-05-07 0:24:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!