这是一个完整的例子 用adoquery,读写数据库的图片 unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,jpeg, ExtDlgs, Db, DBTables, StdCtrls, ExtCtrls, ADODB;type TForm1 = class(TForm) Button1: TButton; OpenPictureDialog1: TOpenPictureDialog; Button2: TButton; Image1: TImage; ADOQuery1: TADOQuery; ADOQuery2: TADOQuery; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } filename:string; procedure SetPicture(pos:string;TempQuery:TADOQuery); /////往数据库中插入图片 procedure GetPicture(pos:string;TempQuery:TADOQuery); ////得到图片 end;var Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.GetPicture(pos:string;TempQuery: TADOQuery); var MS_JpegStream:TMemoryStream; begin try MS_JpegStream:=TMemoryStream.Create; with tempQuery do begin close; sql.clear; //修改这个语句 sql.Add('select picture from table where no=:pos'); Parameters.ParamByName('pos').value:=pos; Open; end; if tempquery.FieldByName('image').isnull then begin image1.Picture.Graphic:=nil; end else begin (tempQuery.FieldByName('image') as tblobfield).savetostream(MS_JpegStream); image1.Picture.Graphic:=nil; image1.Picture.Graphic:=TJpegImage.Create; MS_JpegStream.Position:=0; image1.Picture.Graphic.LoadFromStream(MS_JpegStream); end; finally MS_JpegStream.Free; end;end;procedure TForm1.SetPicture(pos:string; TempQuery: TADOQuery); var MS_JpegStream:TMemoryStream; M_BitMap:TBitMap; M_Jpeg:TJpegImage; begin try MS_JpegStream:=TMemoryStream.Create; M_BitMap:=TBitMap.Create; M_Jpeg:=TJpegImage.Create; if extractfileext(filename)='.bmp' then begin M_BitMap.LoadFromFile(filename); M_Jpeg.Compress; M_Jpeg.Assign(M_BitMap); end else if extractfileext(filename)='.jpg' then begin M_Jpeg.LoadFromFile(filename); end; M_Jpeg.SaveToStream(MS_JpegStream); with tempQuery do begin close; sql.clear; //修改这个语句 sql.Add('insert into table (no,IMage) values (:pos,:image)'); Parameters.ParamByName('pos').Value:=pos; Parameters.ParamByName('image').LoadFromStream(MS_JpegStream,ftblob); ExecSQL; end; finally MS_JpegStream.Free; M_BitMap.Free; M_Jpeg.Free; end; end;procedure TForm1.Button1Click(Sender: TObject);//打开图片并写入数据库 begin if openpicturedialog1.Execute then begin filename:=openpicturedialog1.FileName; SetPicture(edit1.text,ADOQuery1); end end;procedure TForm1.Button2Click(Sender: TObject);//显示图片 begin getpicture(edit1.text,ADOQuery2); end;end.
//查看图片可以显示BMP和JPEG procedure TDM.ViewPhoto(ImagX:TImage;FiledX:TBlobField); var B:Tbitmap; JpegImage:TJpegImage; BS:TBlobStream; begin ImagX.Picture.Assign(nil); if not FiledX.IsNull then begin try//如果是Jpeg格式 BS := TBlobStream.Create(TBlobField(FiledX), bmRead); JpegImage := TJpegImage.Create; JpegImage.JPEGNeeded; JpegImage.LoadFromStream(BS); ImagX.Picture.Assign(JpegImage); JpegImage.Free; BS.Free; except//如果是BMP格式 BS := TBlobStream.Create(TBlobField(FiledX), bmRead); B:=Tbitmap.Create; b.LoadFromStream(BS); ImagX.Picture.Assign(b); B.Free; BS.Free; end; end; end;
用adoquery,读写数据库的图片
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,jpeg,
ExtDlgs, Db, DBTables, StdCtrls, ExtCtrls, ADODB;type
TForm1 = class(TForm)
Button1: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Button2: TButton;
Image1: TImage;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
filename:string;
procedure SetPicture(pos:string;TempQuery:TADOQuery); /////往数据库中插入图片
procedure GetPicture(pos:string;TempQuery:TADOQuery); ////得到图片
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.GetPicture(pos:string;TempQuery: TADOQuery);
var
MS_JpegStream:TMemoryStream;
begin
try
MS_JpegStream:=TMemoryStream.Create;
with tempQuery do
begin
close;
sql.clear;
//修改这个语句
sql.Add('select picture from table where no=:pos');
Parameters.ParamByName('pos').value:=pos;
Open;
end;
if tempquery.FieldByName('image').isnull then
begin
image1.Picture.Graphic:=nil;
end
else
begin
(tempQuery.FieldByName('image') as tblobfield).savetostream(MS_JpegStream);
image1.Picture.Graphic:=nil;
image1.Picture.Graphic:=TJpegImage.Create;
MS_JpegStream.Position:=0;
image1.Picture.Graphic.LoadFromStream(MS_JpegStream);
end; finally
MS_JpegStream.Free;
end;end;procedure TForm1.SetPicture(pos:string; TempQuery: TADOQuery);
var
MS_JpegStream:TMemoryStream;
M_BitMap:TBitMap;
M_Jpeg:TJpegImage;
begin
try
MS_JpegStream:=TMemoryStream.Create;
M_BitMap:=TBitMap.Create;
M_Jpeg:=TJpegImage.Create;
if extractfileext(filename)='.bmp' then
begin
M_BitMap.LoadFromFile(filename);
M_Jpeg.Compress;
M_Jpeg.Assign(M_BitMap);
end
else if extractfileext(filename)='.jpg' then
begin
M_Jpeg.LoadFromFile(filename);
end;
M_Jpeg.SaveToStream(MS_JpegStream);
with tempQuery do
begin
close;
sql.clear;
//修改这个语句
sql.Add('insert into table (no,IMage) values (:pos,:image)');
Parameters.ParamByName('pos').Value:=pos;
Parameters.ParamByName('image').LoadFromStream(MS_JpegStream,ftblob); ExecSQL;
end;
finally
MS_JpegStream.Free;
M_BitMap.Free;
M_Jpeg.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);//打开图片并写入数据库
begin
if openpicturedialog1.Execute then
begin
filename:=openpicturedialog1.FileName;
SetPicture(edit1.text,ADOQuery1);
end
end;procedure TForm1.Button2Click(Sender: TObject);//显示图片
begin
getpicture(edit1.text,ADOQuery2);
end;end.
//查看图片可以显示BMP和JPEG
procedure TDM.ViewPhoto(ImagX:TImage;FiledX:TBlobField);
var
B:Tbitmap;
JpegImage:TJpegImage;
BS:TBlobStream;
begin
ImagX.Picture.Assign(nil);
if not FiledX.IsNull then begin
try//如果是Jpeg格式
BS := TBlobStream.Create(TBlobField(FiledX), bmRead);
JpegImage := TJpegImage.Create;
JpegImage.JPEGNeeded;
JpegImage.LoadFromStream(BS);
ImagX.Picture.Assign(JpegImage);
JpegImage.Free;
BS.Free;
except//如果是BMP格式
BS := TBlobStream.Create(TBlobField(FiledX), bmRead);
B:=Tbitmap.Create;
b.LoadFromStream(BS);
ImagX.Picture.Assign(b);
B.Free;
BS.Free;
end;
end;
end;
是不能按上述的DBImage的格式显示的,两者格式不兼容