从数据库中读写图片(100分)

  • 主题发起人 主题发起人 blinking1313
  • 开始时间 开始时间
B

blinking1313

Unregistered / Unconfirmed
GUEST, unregistred user!
c/s中,用ClientDataSet连Tquery,数据库用sql server,怎样将图片从数据库的image
字段中读出和写入
 
用Stream来做
 
//*************** READ *******************
var
myjpej:Tjpegimage;
mystm:TBlobStream;
begin
query1.sql.add('select pic from tabel1');
query1.open;
MyJpeg:=Tjpegimage.Create;
mystm:=TBlobStream.Create(Tblobfield(query1.FieldByName
('Pic')),Bmread);
myjpeg.LoadFromStream(mystm);
...
free;
end;

//******************* write *********
省略Mystm,myjpeg的create;
query1.sql.add('insert tabel1 (id,pic) values (1,:pic)')
myjpeg.savetoStream(mystm);
Query1.Parameters.items[0].LoadFromStream (MyStm,Ftblob);
query1.ExecSQL;
Mystm.free;
myjpeg.free;
 
怎样读出,李维的那本书中有例子的,使用STREAM就行了.
 
Sql server可以输入输出Jpeg流吗,
mlzhou的方法值得怀疑,我以前试过
好像不行,所以我把Sql server<---> BMP <---> Jpeg
很费事的
 
:)
我来听课
 
正在做这方面的事情,已成功
下面为例子:(oracle数据库,sql server应该是一样的)

存:
iFlower:TImage;
imBack: TImage;
var
JPeg: TJPegImage;
begin
JPeg := TJPegImage.Create;
if odFile.Execute then
begin
JPeg.LoadFromFile(odFile.FileName);
iFlower.Picture:=nil;
iFlower.Picture.Assign(JPeg);
TBlobField(tFlowerPhoto.FieldbyName('photo')).LoadFromFile(odFile.FileName);
end;
// tFlowerPhoto.Post;
JPeg.Free;
end;

取:
var
SQLstr:String;
JPeg: TJPegImage;
MS: TMemoryStream;
begin
JPeg := TJPegImage.Create;
MS:=TMemoryStream.create;
with qSql do
begin
close;
sql.Clear;
SQLstr:='select photo from table_jpg where ...';
sql.Add(SQLstr);
open;
first;
TBlobField(qSql.FieldbyName('photo')).SaveToStream(MS);
close;
end;
imBack.Picture:=nil;
MS.Position := 0;
jpeg.LoadFromStream(MS);
imBack.Picture.Assign(jpeg);
Jpeg.free;
Ms.free;
end;
 
多人接受答案了。
 
后退
顶部