在程式設計中,我需要在資料庫中存盤圖片檔案,如何實作?(我用的資料庫為SQL SERVER,最好能說明存盤圖片欄位的屬性,解決方法)),謝謝!
uj5u.com熱心網友回復:
屬性好像就是image或什么大物件或二進制。。。。一般還是保存到服務器的子目錄比較好吧,資料庫里只保存它的【相對】路徑
uj5u.com熱心網友回復:
謝謝,我也知道資料庫中保存相對目錄的方法,但我還是想知道有沒有直接存盤到資料庫中的方法?uj5u.com熱心網友回復:
使用image欄位,用流檔案保存到欄位中。
uj5u.com熱心網友回復:
存圖片的路徑uj5u.com熱心網友回復:
在delphi中用query的blob資料型別倒入檔案,然后存入資料庫中的對應欄位(image或什么大物件或二進制)uj5u.com熱心網友回復:
TBlobField(DataSet.FieldByName('欄位名')).LoadFromFile(完整檔案名);uj5u.com熱心網友回復:
1. 影像資料的選擇及保存procedure Tform1.selectimageClick(Sender: TObject); //選擇影像
begin
if openpicturedialog1.Execute then
image1.Picture.LoadFromFile(openpicturedialog1.FileName );
end;
procedure Tform1.savetodbClick(Sender: TObject); //保存影像到資料庫
var
ext:string;
begin
if image1.picture.Graphic <> nil then //避免image1中無影像保存出錯
begin
adotable1.Edit ;
adotable1.FieldByName(myimage).Assign(image1.Picture.Graphic);
//以下記錄保存到資料庫的影像格式
ext:=extractfileext(openpicturedialog1.FileName ); //取出檔案擴展名
if uppercase(ext) = .BMP THEN
adotable1.FieldByName(isbmp).VALUE := 1 //BMP型影像資料
ELSE IF (UPPERCASE(EXT) = .JPEG) OR (UPPERCASE(EXT) = .JPG) THEN
adotable1.FieldByName(isbmp).VALUE := 0; //JPEG型影像資料
ADOTABLE1.Post ;
end;
end;
2. 影像資料的讀取及顯示
procedure Tform1.ADOTable1AfterScroll(DataSet: TDataSet); //ADOTable1的AfterScroll事件方法程式
var
jpegimage:tjpegimage;
begin
image1.Picture.Graphic :=nil;
//下邊BMP、JPEG兩種影像資料必需分別處理
if adotable1.fieldbyname(isbmp).Asstring = 1 then //BMP型影像資料
image1.Picture.bitmap.Assign(adotable1.fieldbyname(myimage))
//上邊陳述句中的bitmap不能為graphic,否則會出錯
else if adotable1.fieldbyname(isbmp).asstring = 0 then //JPEG型影像資料
begin //begin2
jpegimage := tjpegimage.Create ; //通過jpegimage將影像顯示在image1,否則會出錯
try
jpegimage.Assign(adotable1.fieldbyname(myimage));
image1.Picture.Graphic :=jpegimage;
finally
jpegimage.Free ;
end; //end try
end; //end begin2
end;
注:別忘了在單元檔案介面部分的uses陳述句中添入JPEG單元參考。
以上程式代碼在DELPHI6.0+SQL(或ACCESS或PARADOX)資料庫下運行通過。
uj5u.com熱心網友回復:
圖片格式在資料庫中就是選IMAGE,存盤及讀取一般是用流的方式,我給你一段代碼,分別是上傳附件與下載附件的功能:上傳:
var
fs:TFileStream;
FtpStr:string;
begin
FtpStr:=edt3.Text;//這里主要是用DlgOpen控制元件選擇的檔案名
fs:=Tfilestream.Create(FtpStr,Fmopenread);
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('select * from 檔案管理');
qry1.Open;
qry1.Append;
qry1.FieldByName('主題').AsString:=edt1.text;
qry1.FieldByName('類別').AsString:=cbb1.Text;
qry1.FieldByName('附件大小').AsString:=FileSizeStr;
Tblobfield(qry1.FieldByName('附件')).LoadFromStream(fs);//這里就是保存附件的方式
qry1.Post;
fs.Free;
下載:
TBlobField(qry1.FieldByName('附件')).SaveToFile(dlgSave1.FileName);
以上希望對你有幫助!
uj5u.com熱心網友回復:
樓上分析詳細uj5u.com熱心網友回復:
image欄位,blobfield用流檔案保存到欄位中 ...
uj5u.com熱心網友回復:
我以前接觸過一個把圖片保存到資料庫里的系統,用的資料庫也是sql server,運行了幾個月時間后,貌似效率變得難以忍受。還是建議采用目錄的形式保存uj5u.com熱心網友回復:
這個很好uj5u.com熱心網友回復:
1、SQL可以保存影像資料,保存在IMAGE欄位中。本地SQL可以正常讀寫。如果SQL服務器,就要變法讀了。2、建議大的影像不能保存在資料庫中,否則。資料運行很慢。
uj5u.com熱心網友回復:
這是SQL SERVER的機制問題,我用其他資料庫不存在慢的問題.uj5u.com熱心網友回復:
圖片還是以檔案形式保存,不然資料庫會慢得嚇人。uj5u.com熱心網友回復:
image型別,資料存為二進制,取出資料較慢,建議存圖片地址。uj5u.com熱心網友回復:
效率問題需要考慮!!uj5u.com熱心網友回復:
如果直接存的話,以二進制方式保存,一般都是保存路徑的uj5u.com熱心網友回復:
影像保存在資料庫,可以共享。但運行起來,讀取影像資料(大)就慢。有一種辦法,首先將影像保存在資料庫,同時在本地磁盤中,保存影像檔案,當有本地有影像檔案時,就讀取本地影像資料,如果無讀取資料庫影像資料,并保存在本地磁盤中,這樣,運行起來也快。uj5u.com熱心網友回復:
這個網上一大堆 哈哈 LZ 一定是解決了uj5u.com熱心網友回復:
保存路勁是最好的,用流就需要用到轉二進制了~~讀取出來還要轉~uj5u.com熱心網友回復:
用TBlodFiled,不管是什么檔案,一律用流加載存放該欄位中。uj5u.com熱心網友回復:
我記得要把圖片格式轉換為流,以前在ACCESS里面做過uj5u.com熱心網友回復:
oracle中的話用bolob欄位sqlserver中用binary欄位
uj5u.com熱心網友回復:
這是誰挖的墳?uj5u.com熱心網友回復:
mark下來。。。
不要罵我挖墳啊
uj5u.com熱心網友回復:
資料表中設定至少兩個欄位,一個欄位保存二進制原始檔案,一個欄位記錄檔案的型別。本人覺得,樓主非這樣做的話,可以在上傳檔案的時候,先將檔案壓縮,還原的時候,再將檔案解壓,再根據保存的檔案型別用對應的應用程式打開。
這樣的話可以最大限度節省磁盤空間,不過,浪費了點時間,增加了壓縮解壓縮這兩個步驟。
//C:\TestDoc.Doc
//壓縮原檔案,檔案名為原檔案加ZIP
MyCompact('C:\TestDoc.Doc');
qry1.Edit;
TBlobField(qry1.FieldByName('照片')).LoadFromFile('C:\TESTDOC.DOC.ZIP');
qry1.FieldByName('檔案型別').AsString:='DOC';
qry1.Post;
僅供參考
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
procedure TForm1.Button1Click(Sender: TObject);var MyImg:TBitmap;
MyStream:TMemoryStream;
begin
try
MyImg:=TBitmap.Create;
MyImg.LoadFromFile('C:\Documents and Settings\zhengys\桌面\顏色\色塊123.JPG');
MyStream:=TMemoryStream.Create;
Myimg.SavetoStream(MyStream);
ADODataSet1.Edit;
(ADODataSet1.FieldByName('TP') as TBlobField).LoadFromStream(MyStream);
ADODataSet1.Open;
finally
MyImg.Free;
MyStream.Free;
end;
end;
uj5u.com熱心網友回復:
記得要給我分。uj5u.com熱心網友回復:
用檔案流寫入資料庫存盤!uj5u.com熱心網友回復:
存圖片地址在本機別的電腦查看不方便,可以共享檔案夾吧uj5u.com熱心網友回復:
資料庫設為二進制就可以了;然用用BLOB方試:TBlobField(DataSet.FieldByName('欄位名')).LoadFromFile(檔案名);uj5u.com熱心網友回復:
這么多人都回答了哦!~uj5u.com熱心網友回復:
如果將圖片保存在本機,那么別人訪問看不到圖片吧,要么保存到共享目錄,這樣行不行??轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/87406.html
標籤:數據庫相關
