S:String; begin try JpgPic:=TJpegImage.Create; tempStream:=TMemoryStream.Create; tempStream.Clear; Table.Edit; JpgPic.LoadFromFile(OpenDialog.FileName); FootImage.Picture.bitmap.assign(JpgPic); JpgPic.SaveToStream(tempStream); TBlobField(Table.FieldByName('图象')).LoadFromStream(tempStream) ; Table.Post; finally JpgPic.Free; tempStream.Free; end; end;// 显示数据库中的 JPG 图象 ,FootImage : TImage var MyJpeg:TJpegImage; MyStm:TMemoryStream; begin
if not Table.FieldByName('图象').IsNull then begin try MyJpeg:=TJpegImage.Create; MyStm:=TMemoryStream.Create; MyStm.Clear; TBlobField(Table.FieldByName('图象')).SaveToStream(MyStm); MyStm.Position:=0; MyJpeg.LoadFromStream(MyStm); FootImage.Picture.BitMap.Assign(MyJpeg); finally MyJpeg.Free; MyStm.Free; end;
end;
DELPHI存取JPEG文件到SQL Server数据库 用ADO控件存取SQL Server数据库图片,查看资料发现基本都是针对BMP文件进行操作(巨增数据库大小),源码公开如下: unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, Db, ADODB,jpeg, StdCtrls,dbtables; {一定要USES JPEG单元,使能存储JPG文件格式} type TForm1 = class(TForm) DataSource1: TDataSource; ADOQuery1: TADOQuery; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; Image1: TImage; savebutton: TButton; showbutton: TButton; OpenDialog1: TOpenDialog; ADOQuery1id: TIntegerField; ADOQuery1pic: TBlobField; procedure savebuttonClick(Sender: TObject); procedure showbuttonClick(Sender: TObject); procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}function JpegStartsInBlob(PicField:TBlobField):integer; var ghy: TADOBlobstream; buffer:Word; hx: string; begin Result := -1; ghy := TADOBlobstream.Create(PicField, bmRead); try while (Result = -1) and (ghy.Position + 1 < ghy.Size) do begin ghy.ReadBuffer(buffer, 1); hx:=IntToHex(buffer, 2); if hx = ’FF’ then begin ghy.ReadBuffer(buffer, 1); hx:=IntToHex(buffer, 2); if hx = ’D8’ then Result := ghy.Position - 2 else if hx = ’FF’ then ghy.Position := ghy.Position-1; end; //if end; //while finally ghy.Free end; //try end; procedure TForm1.savebuttonClick(Sender: TObject); var picstream:tadoblobstream; begin adoquery1.edit; picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite); if form1.opendialog1.execute then begin picstream.LoadFromFile(opendialog1.filename); picstream.Position:=0; adoquery1.edit; tblobfield(adoquery1.Fields[1]).loadfromstream(picstream); adoquery1.post; end; end;procedure TForm1.showbuttonClick(Sender: TObject); var ghy:TADOBlobstream; pic:tjpegimage; begin ghy := TADOBlobstream.Create(Adoquery1pic, bmRead); try ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning); Pic:=TJpegImage.Create; try Pic.LoadFromStream(ghy); Image1.Picture.Graphic:=Pic; finally Pic.Free; end; finally ghy.Free end; end;procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin if button in [nbFirst, nbPrior, nbNext, nbLast] then showbutton.Click; end;end.
->下载基地->例程-数据库/报表->数据库图片存储
是用accsee做的,和sql server的非常相似,上次介绍个一个伙计,人家看不懂,不知你怎样?
今天用sql server又写了一个,如果你实在看不懂的话,给我发消息,我把今天做sql server的发给你。
var
JPGImage:TJpegImage;
bitmap:tbitmap;
bitmap:=tbitmap.create;
JPGImage:=Tjpegimage.Create;
JPGImage.LoadFromfile(openpicturedialog1.FileName);
bitmap.assign(jpgimage);
DBImage1.picture.bitmap.assign(bitmap);
var
tempStream:TMemoryStream;
JpgPic:TJpegImage;
S:String;
begin
try
JpgPic:=TJpegImage.Create;
tempStream:=TMemoryStream.Create;
tempStream.Clear;
Table.Edit;
JpgPic.LoadFromFile(OpenDialog.FileName);
FootImage.Picture.bitmap.assign(JpgPic);
JpgPic.SaveToStream(tempStream);
TBlobField(Table.FieldByName('图象')).LoadFromStream(tempStream) ;
Table.Post;
finally
JpgPic.Free;
tempStream.Free;
end;
end;// 显示数据库中的 JPG 图象 ,FootImage : TImage
var
MyJpeg:TJpegImage;
MyStm:TMemoryStream;
begin
if not Table.FieldByName('图象').IsNull then
begin
try
MyJpeg:=TJpegImage.Create;
MyStm:=TMemoryStream.Create;
MyStm.Clear;
TBlobField(Table.FieldByName('图象')).SaveToStream(MyStm);
MyStm.Position:=0;
MyJpeg.LoadFromStream(MyStm);
FootImage.Picture.BitMap.Assign(MyJpeg);
finally
MyJpeg.Free;
MyStm.Free;
end;
end;
用ADO控件存取SQL Server数据库图片,查看资料发现基本都是针对BMP文件进行操作(巨增数据库大小),源码公开如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, Db, ADODB,jpeg, StdCtrls,dbtables;
{一定要USES JPEG单元,使能存储JPG文件格式}
type
TForm1 = class(TForm)
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Image1: TImage;
savebutton: TButton;
showbutton: TButton;
OpenDialog1: TOpenDialog;
ADOQuery1id: TIntegerField;
ADOQuery1pic: TBlobField;
procedure savebuttonClick(Sender: TObject);
procedure showbuttonClick(Sender: TObject);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}function JpegStartsInBlob(PicField:TBlobField):integer;
var
ghy: TADOBlobstream;
buffer:Word;
hx: string;
begin
Result := -1;
ghy := TADOBlobstream.Create(PicField, bmRead);
try
while (Result = -1) and (ghy.Position + 1 < ghy.Size) do
begin
ghy.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = ’FF’ then begin
ghy.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = ’D8’ then Result := ghy.Position - 2
else if hx = ’FF’ then
ghy.Position := ghy.Position-1;
end; //if
end; //while
finally
ghy.Free
end; //try
end;
procedure TForm1.savebuttonClick(Sender: TObject);
var
picstream:tadoblobstream;
begin
adoquery1.edit;
picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);
if form1.opendialog1.execute then
begin
picstream.LoadFromFile(opendialog1.filename);
picstream.Position:=0;
adoquery1.edit;
tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
adoquery1.post;
end;
end;procedure TForm1.showbuttonClick(Sender: TObject);
var
ghy:TADOBlobstream;
pic:tjpegimage;
begin
ghy := TADOBlobstream.Create(Adoquery1pic, bmRead);
try
ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning);
Pic:=TJpegImage.Create;
try
Pic.LoadFromStream(ghy);
Image1.Picture.Graphic:=Pic;
finally
Pic.Free;
end;
finally
ghy.Free
end;
end;procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
if button in [nbFirst, nbPrior, nbNext, nbLast] then showbutton.Click;
end;end.