Delphi資料庫應用程式開發中圖像資料的存取技術 |
尚未結案
|
linky
一般會員 發表:1 回覆:1 積分:0 註冊:2002-09-09 發送簡訊給我 |
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 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
不知所云 圖像之存取不過就是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 發送簡訊給我 |
先說 ---- 我是個新手 看不太懂!!!!! 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
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |