jpeg不能加入dbimage中 |
尚未結案
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
請問一下我要在資料庫中的dbimage中插入jpg圖片可是可以正常進入可是我選擇jpeg檔後就會出現錯誤訊號請問我那裡出問題了????研究好久感激不盡~~以下是我的程式碼不知那裡錯了
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask, DB, ADODB, Grids, DBGrids, ComCtrls,
Buttons, ToolWin, ImgList, ExtDlgs,jpeg, var jpg:TJpegImage; begin
if openpicturedialog1.execute then
begin
adoquery1.Edit;
adoquery1dsdesigner14.loadfromfile(openpicturedialog1.filename);
end
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! DBImage不支援顯示Jpeg的圖片檔, 所以要做一些變通的方法才可以顯示出來, 請參考justmade版主大人的大著.
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30976
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19482
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27715 另外, 您也可以選擇其它變通的方法, 比如說在對應Image的欄位中存入該圖片檔的連接路徑, 而后再配合TImage元件來顯示(TImage元件支援Jpeg圖片檔的顯示), 如下連接:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37249 參考看看! =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
我重新改了還是有錯誤
覺的好像有點亂的說~ 還有這一句表示什麼意思呢??
TBlobField(AdoQuery1.FieldByName('照片') as TBlobField).SaveToStream
困擾許久目前以下是我的程式碼 procedure TForm1.DBImage1DblClick(Sender: TObject);
var jpg:TJpegImage;
Stream:TMemoryStream;
begin
Stream:=TMemoryStream.Create ;
jpg:= TJPEGImage.Create;
jpg.LoadFromStream(Stream);
DBImage1.Picture.Assign(jpg);
if openpicturedialog1.execute then
begin
adoquery1.Edit;
adoquery1dsdesigner14.loadfromfile(openpicturedialog1.filename);
TBlobField(AdoQuery1.FieldByName('照片') as TBlobField).SaveToStream(Stream); Stream.Free;
jpg.free;
end
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
我看了好多類似的文章可是還是不行
我的程式碼為以下
目前可以存取bmp檔可是jpg檔都會出現錯誤不知我那裡錯了??? procedure TForm1.DBImage1DblClick(Sender: TObject);
var jpg:TJpegImage;
Stream:TMemoryStream;
begin
Stream:=TMemoryStream.Create ;
jpg:= TJPEGImage.Create;
jpg.LoadFromStream(Stream);
DBImage1.Picture.Assign(jpg);
if openpicturedialog1.execute then
begin
adoquery1.Edit;
adoquery1dsdesigner14.loadfromfile(openpicturedialog1.filename);
TBlobField(AdoQuery1.FieldByName('照片') as TBlobField).SaveToStream(Stream); Stream.Free;
jpg.free;
end
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
我有參考您的文件可是為什麼我的程式碼到了adoquery1.Close;
adoquery1.Clear;
adoquery1.SQL.Add('Select * From Image1 Where 照片=''' DBEdit1.Text '''');
這幾段都會出現錯誤訊息???? begin
if OpenPictureDialog1.Execute then
DBEdit1.Text := OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile(DBEdit1.Text);
end;
//以DBEdit來記錄圖檔的路徑名稱﹐再以Image來顯示﹒
//在查詢是否重覆的時候﹐就可利用DBEdit1的Text來判斷﹐如下﹕
begin
adoquery1.Close;
adoquery1.Clear;
adoquery1.SQL.Add('Select * From Image1 Where 照片=''' DBEdit1.Text '''');
QImage.Open;
if adoquery1.RecordCount>0 then
Application.MessageBox('已有相同的圖片','錯誤視窗',MB_OK);
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 請問錯誤信息是什么?
另外, 小弟做了一個簡單的範例, Access資料庫形態, 資料表中只有編號和圖片兩個欄位, DBEdit1感知元件對應圖片欄位, 程式碼如下, 經測試可正常Run.
procedure TForm1.ADOQuery1AfterEdit(DataSet: TDataSet); begin if OpenPictureDialog1.Execute then begin DBEdit1.Text := OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile(DBEdit1.Text); end else Exit; end; 存入資料表之后...(略Post步驟) procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin if FileExists(DBEdit1.Text) then Image1.Picture.LoadFromFile(DBEdit1.Text) else Image1.Picture := nil; end;供您參考看看! ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/10/12 12:54:29
------
忻晟 |
wuabc
初階會員 發表:6 回覆:60 積分:33 註冊:2002-10-28 發送簡訊給我 |
這一篇應是你要的
{ Article: Pictures inside a database http://delphi.about.com/library/weekly/aa030601a.htm Chapter three of the free Delphi Database Course for beginners. Displaying images (BMP, JPEG, ...) inside an Access database with ADO and Delphi. For the .zip file of this project click here. } unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ExtCtrls, StdCtrls, Db, ADODB, Grids, DBCtrls, DBGrids; type TForm1 = class(TForm) ADOTable1: TADOTable; DataSource1: TDataSource; btnShowImage: TButton; ADOImage: TImage; ADOTable1Name: TWideStringField; ADOTable1Description: TWideStringField; ADOTable1Author: TWideStringField; ADOTable1Type: TWideStringField; ADOTable1Size: TFloatField; ADOTable1Cost: TBCDField; ADOTable1DateUpl: TDateTimeField; ADOTable1Picture: TBlobField; DBGrid1: TDBGrid; procedure btnShowImageClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; const JPEGstarts = 'FFD8'; BMPstarts = '424D'; //BM var Form1: TForm1; implementation uses jpeg; {$R *.DFM} function JpegStartsInBlob (PicField:TBlobField):integer; var bS : TADOBlobStream; buffer : Word; hx : string; begin Result := -1; bS := TADOBlobStream.Create(PicField, bmRead); try while (Result = -1) and (bS.Position 1 < bS.Size) do begin bS.ReadBuffer(buffer, 1); hx:=IntToHex(buffer, 2); if hx = 'FF' then begin bS.ReadBuffer(buffer, 1); hx:=IntToHex(buffer, 2); if hx = 'D8' then Result := bS.Position - 2 else if hx = 'FF' then bS.Position := bS.Position-1; end; //if end; //while finally bS.Free end; //try end; procedure TForm1.btnShowImageClick(Sender: TObject); var bS : TADOBlobStream; Pic : TJpegImage; begin bS := TADOBlobStream.Create(AdoTable1Picture, bmRead); try bS.Seek(JpegStartsInBlob(AdoTable1Picture), soFromBeginning); Pic:=TJpegImage.Create; try Pic.LoadFromStream(bS); ADOImage.Picture.Graphic:=Pic; finally Pic.Free; end; finally bS.Free end; end; procedure TForm1.FormCreate(Sender: TObject); var sDBPath, sCons: string; begin //change the sDBPath to point to your database! sDBPath := 'c:\!Gajba\About\aboutdelphi.mdb'; sCons := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' sDBPath ';Persist Security Info=False'; ADOTable1.ConnectionString := sCons; ADOTable1.TableName := 'Applications'; DataSource1.DataSet := ADOTable1; DBGrid1.DataSource := DataSource1; ADOTable1.Active:=True; end; procedure TForm1.FormDestroy(Sender: TObject); begin ADOTable1.Active:=False; end; //Extra!! save JPG to table procedure SaveJpegToTable(Table: TADOTable; PicField:TBlobField; sPicPath: string); { Usage: SPicFileName := 'C:\!gajba\cdcovers\cdcover1.jpg'; SaveJpegToTable(ADOTable1, ADOTable1Picture, SPicFileName); } var fS : TFileStream; begin fs:=TFileStream.Create(sPicPath, fmOpenRead); try Table.Edit; PicField.LoadFromStream(fs); Table.Post; finally fs.Free; end; end; end. |
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
您好cashxin2002 我有按照你的教法去做目前是可以正常去存取bmp檔的圖那麼jpg圖檔的圖只能取出和放入DBIMAGE元件內可是每當我按存檔時DBIMAGE元件內的JPG馬上就不見了可是BMP檔卻可以正確存取 procedure TForm1.ADOQuery1AfterEdit(DataSet: TDataSet);
begin
if OpenPictureDialog1.Execute then
begin
DBEdit1.Text := OpenPictureDialog1.FileName;
Image1.Picture.LoadFromFile(DBEdit1.Text);
end
else
Exit;
end;
存入資料表之后...(略Post步驟)
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if FileExists(DBEdit1.Text) then
Image1.Picture.LoadFromFile(DBEdit1.Text)
else
Image1.Picture := nil;
end;
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 如果您是使用存取檔案路徑的方法﹐將圖檔路徑存入資料表中對應的欄位(字串形態)﹐那就應該可以正常存取和顯示﹐可能您忽略了一個地方﹐就是小弟是用Image元件﹐而不是DBImage元件﹐不能將Jpeg格式圖檔通過DBImage資料感知元件存入資料表﹐這就是之前所說的問題所在﹐所以改用Image元件﹐應該就可以解決您的問題了﹒ 有一個地方需要注意﹐就是圖檔所在的路徑必須正确﹐且存入后不要將圖檔移至其它的位置﹐否則將會找不到圖檔﹒ 參考看看﹗ =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: 感謝cashxin2002可是我還有一個問題我是使用access做一個通訊錄那麼我使用您的方法去抓jpg檔目前是可以了可是只要我按儲存那麼這個圖示也會從image中消失而路徑記錄到dbedit1.txt那麼我可以讓image元件的圖示不要消失而且每一頁的圖示都不同嗎您好! 有關這個問題, 之前有寫到這樣一段程式碼: procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin if FileExists(DBEdit1.Text) then Image1.Picture.LoadFromFile(DBEdit1.Text) else Image1.Picture := nil; end;以上的程式碼是寫在DataSource元件的OnDataChange事件中, 這個事件會根据目前資料指針的任何移動狀態而使用資料感知元件反應出對應的欄位內容, 您可以將DBEdit1元件的Visible屬性值設為False, 亦在Form中看不到這個元件, 然后再利用DBEdit1元件的Text值配合Image1元件來顯示圖檔. 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |