我用了 Button Image DataSource ADOQuery ADOConnection 控件 。
我想先简单的试验一下向数据库存储图片,用下面的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
ms:tmemorystream;
begin
ms:=TmemoryStream.Create;
ms.Loadfromfile('D:\Images\info3[1].gif');
if ms.size>0 then
begin
ms.position:=0;
(adoquery1.fieldbyname('pic') as Tblobfield).loadfromstream(ms);
end ;
end;
可当我按下按钮,报错提示ADOQuery1 :Field ‘pic’ not found!
我当怎样才能让它存到 picture 表的 ‘pic’ 字段中呢?或者我少了什么控件?
我想先简单的试验一下向数据库存储图片,用下面的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
ms:tmemorystream;
begin
ms:=TmemoryStream.Create;
ms.Loadfromfile('D:\Images\info3[1].gif');
if ms.size>0 then
begin
ms.position:=0;
(adoquery1.fieldbyname('pic') as Tblobfield).loadfromstream(ms);
end ;
end;
可当我按下按钮,报错提示ADOQuery1 :Field ‘pic’ not found!
我当怎样才能让它存到 picture 表的 ‘pic’ 字段中呢?或者我少了什么控件?
begin
SQL.Text:=sSql;
Open;
if Not Eof then
begin
stmPic:=TMemoryStream.Create;
try
// 取得图片
Edit;
if not bPicture then
begin
// 假设该字段为照片(ZP)
TBlobField(FieldByName('ZP')).Clear;
end
else
begin
jpg:=TJpegImage.Create;
try
jpg.Assign(imgPicture.Picture.Bitmap);
jpg.SaveToStream(stmPic);
TBlobField(FieldByName('ZP')).LoadFromStream(stmPic);
finally
jpg.Free;
end;
end;
Post;
finally
stmPic.Free;
end;
end;
Close;
end;
end;注:变量声明如下:
var
sSql :string;
stmPic :TStream;
jpg :TJpegImage;
ms:tmemorystream;
begin
ms:=TmemoryStream.Create;
ms.Loadfromfile('D:\Images\info3[1].gif');
if ms.size>0 then
begin
ms.position:=0;
with adoquery1 do
begin
if active then close;
sql.clear;
sql.add('select * from yourtablename where yourcordinal');
open;
append;
(adoquery1.fieldbyname('pic') as Tblobfield).loadfromstream(ms);
post;
end ;
TBlobField(adoquery1.FieldByName('ZP')).LoadFromStream(ms);
adoquery1.post;
try
Image1.Picture.Assign(FieldByName('photo'));
except
Image1.Picture.Assign(nil);
end;
var
pjpg:tjpegimage;
pic:TMemoryStream;
begin
pjpg:=tjpegimage.Create;
pjpg.LoadFromFile(F:\JPG.jpg);
pic:=TMemoryStream.Create;
pjpg.SaveToStream(pic);
pic.Position:=0;
TBlobField(dataset.FieldByName('Img')).LoadFromStream(pic);
dataset.post;
pic.Free;
pjpg.free;
end;
从数据库取出
var
pjpg:tjpegimage;
pic:TMemoryStream;
begin
pjpg:=tjpegimage.Create;
pic:=TMemoryStream.Create;
TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
pic.positon:=0;
pjpeg.LoadFromStream(pic);
image.graphi.bmp.assign(pjpeg);
end;end;
图片可以定义成binary类型
http://www.kaer.com.cn/default.aspx
下,其它凭你的 悟性了。