if SaveDialog1.Execute then begin Savedir := SaveDialog1.FileName ; TblobField(TmpAdo.FieldByName('Content')).SaveToFile(Savedir); 以上为我之前写的一段代码,数据库中字段设为Image即可
用文件流我是这么作的,呵呵: var picstream:tadoblobstream; bmppic:tbitmap; jpgpic:tjpegimage; bmpstream:TMemoryStream; OpenPicDialog:TOpenPictureDialog; //以上是定义部分 adoquery1.SQL.Text:='select goodscode,picture from gds_goodscode with(nolock) where goodscode='+sgoodscode; adoquery1.open; //先查出来需要加图片的记录,然后edit adoquery1.Edit; if OpenPicDialog.Execute then begin jpgpic:=tjpegimage.Create; bmppic:=tbitmap.Create; bmpstream:=tmemorystream.Create; jpgpic.LoadFromFile(OpenPicDialog.filename); //加载文件 bmppic.Assign(jpgpic); bmppic.SaveToStream(bmpstream); picstream:=tadoblobstream.Create(tblobfield(adoquery1.Fields[1]),bmWrite); picstream.LoadFromStream(bmpstream); picstream.Position:=0; tblobfield(adoquery1.Fields[1]).loadfromstream(picstream); end;
谢谢各位的帮助!我又有一个小小的问题,还请大家帮忙。我用如下代码将图片存入了数据库,但用DBimage 控件显示出现了“Bitmap image is not valid”错误! ADOTable1.open; ADOTable1.append; if OpenDialog1.Execute then begin TblobField(ADOTable1.FieldByName('picture')).LoadFromFile(OpenDialog1.filename); ADOTable1.Post; end; //DBimage 控件显示图片 DataSource1.DataSet:= ADOTable1; DBImage1.DataSource:=DataSource1; DBImage1.DataField:='picture';
按照zxf_feng介绍流的方法,我没有试成功,对于流我有些胆怯,觉得深奥。所以采用文件的形式。我用如下的形式显示图片是成功的,但我觉得对大量图片的显示是比较慢的; if SaveDialog1.Execute then begin Savedir := SaveDialog1.FileName ; TblobField(ADOTable1.FieldByName('picture')).SaveToFile(Savedir); Image1.picture.loadfromfile(Savedir); end;
if SaveDialog1.Execute then
begin
Savedir := SaveDialog1.FileName ;
TblobField(TmpAdo.FieldByName('Content')).SaveToFile(Savedir);
以上为我之前写的一段代码,数据库中字段设为Image即可
TmpAdo.FieldByName('FileName').Value := EdtFileName.Text+FileKind;
TmpAdo.FieldByName('KindId').Value := (CmbKind.Items.Objects[CmbKind.ItemIndex] as TCombKind).AKindId;
TmpAdo.FieldByName('SaveTime').Value := FormatDateTime('yyyy-mm-dd',DateTimePicker1.Date);
TblobField(TmpAdo.FieldByName('Content')).LoadFromFile(EdtFileDir.Text);
TmpAdo.Post;
晕,刚才想高亮显示,怎么不行
然后
保存:
ParamByName('image字段').LoadFromFile(accessorySList.Names[nloop],ftGraphic);
读取:
一个是存为流一个是存为文件
TBlobField(cdstmp.FieldByName('image字段')).SaveToStream();
TBlobField(cdstmp.FieldByName('image字段')).SaveToFile();
--------
大概是这样的
var
picstream:tadoblobstream;
bmppic:tbitmap;
jpgpic:tjpegimage;
bmpstream:TMemoryStream;
OpenPicDialog:TOpenPictureDialog;
//以上是定义部分 adoquery1.SQL.Text:='select goodscode,picture from gds_goodscode with(nolock) where goodscode='+sgoodscode;
adoquery1.open;
//先查出来需要加图片的记录,然后edit
adoquery1.Edit;
if OpenPicDialog.Execute then
begin
jpgpic:=tjpegimage.Create;
bmppic:=tbitmap.Create;
bmpstream:=tmemorystream.Create;
jpgpic.LoadFromFile(OpenPicDialog.filename); //加载文件
bmppic.Assign(jpgpic);
bmppic.SaveToStream(bmpstream);
picstream:=tadoblobstream.Create(tblobfield(adoquery1.Fields[1]),bmWrite);
picstream.LoadFromStream(bmpstream);
picstream.Position:=0;
tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
end;
ADOTable1.open;
ADOTable1.append;
if OpenDialog1.Execute then
begin
TblobField(ADOTable1.FieldByName('picture')).LoadFromFile(OpenDialog1.filename);
ADOTable1.Post;
end;
//DBimage 控件显示图片
DataSource1.DataSet:= ADOTable1;
DBImage1.DataSource:=DataSource1;
DBImage1.DataField:='picture';
if SaveDialog1.Execute then
begin
Savedir := SaveDialog1.FileName ;
TblobField(ADOTable1.FieldByName('picture')).SaveToFile(Savedir);
Image1.picture.loadfromfile(Savedir);
end;