如何保存jpg图像到数据库中?(急)(50分)

S

sjx

Unregistered / Unconfirmed
GUEST, unregistred user!
一jpg图像,12k,存入access或sql server2000中,体积却增大400k。
求各位大虾指点一二,不胜感激(最好附加源代码),谢谢!!!!

 
看来你已经会加了,

至于体积增大过多,是正常现象,
数据库需要预先分配空间,
你可以增加几百个,
再看一下增加量,反而不是很大了
 
看看吧,我是可以的,不知適合你不
function SaveBlobField(Field: TField; const FileName: String): Boolean;
function BlobContentToString(const FileName: String): String;
begin
with TFileStream.Create(FileName, fmOpenRead) do
try
SetLength(Result, Size);
Read(Pointer(Result)^, Size);
finally
Free;
end;
end;

begin
Result := True;
try
Field.AsVariant:= BlobContentToString(FileName);
except
Result := False;
end;
end;
Instance
procedure TfrmXT.btnTPClick(Sender: TObject);
var fileName:string;
begin
inherited;
if diaPic.Execute then
fileName:=diaPic.FileName ;
DM.XT.edit;
try
SaveBlobField(DM.XT.FieldByName('XT_TP'),fileName);
DM.XT.UpdateBatch();
except
showmessage('圖片添加未成功');
end;
end;
 
我不知道怎么增加啊?
 
to fxjpost
用BlobField.LoadFromFile或BlobField.LoadFromStream直接读取就可以吧,
为何要加上SetLength(Result, Size)呢
 
将图像字段强制转化为
TBlobField
然后如 "滑翔机" 所说LoadFromFile 或者 LoadFromStream
就可以存入数据库了
 
这样不会增加
procedure TForm1.BitBtn2Click(Sender: TObject);//保存
begin
if self.OpenPictureDialog1.Execute then
begin
self.ADOTable1.Edit;
(self.ADOTable1.FieldByName('photo') as Tblobfield).loadfromfile(self.OpenPictureDialog1.FileName);
self.ADOTable1.Post;
end;
end;

procedure TForm1.saveClick(Sender: TObject);//保存
var jpg:tmemorystream;
begin
if self.OpenPictureDialog1.Execute then
begin
jpg:=Tmemorystream.Create;
self.Image1.Picture.LoadFromFile(self.OpenPictureDialog1.FileName);
TJPEGImage(self.Image1.Picture.Graphic).SaveToStream(jpg);
self.ADOTable1.Edit;
(self.ADOTable1.FieldByName('photo') as Tblobfield).LoadFromStream(jpg);
self.ADOTable1.Post;
jpg.Free;
end;

end;

procedure TForm1.openClick(Sender: TObject);//打开
var
bm:tadoblobstream;
jp:tjpegimage;
begin
bm:=tadoblobstream.create(ADOTable1photo,bmread);
if bm.size>0 then
begin
jp:=tjpegimage.create;
jp.loadfromstream(bm);
image1.picture.graphic:=jp;
jp.free;
end else
image1.picture.graphic:=nil;
bm.free;
end;
 
各位大虾:
可是这样一来,dbimage就无法用了,显示不太方便。不好意思,呵呵~~~
 
数据库感知控件不安全,用TQuery+SQl写代码。一样好用。
 
zhoufujin:
用TQuery+SQl怎么写,说明白点好吗?
一个form ,一条记录,六幅图像,既录入又查询,究竟怎样才能做的最好?
谁来帮我啊,谢谢了?(我不希望一条记录占用2M空间)
 
难道真的没有我想要的答案了吗?
高手都去哪了?
呜呼!
 
真的无人问津了吗?
 
多人接受答案了。
 
可以找到支持jpeg的dbimage控件的,自己搜一下,如果找不到,我这儿有
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部