我是用ADOQUERY,image控件的,图片的字段是PIC,类型是IMAGE型,里面BMP,JPG的图片都有。想把图片取出来,我想把它显示在IMAGE,请问如何实现
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from table where s_no='''+edit1.text+'''');
open;
end;
????接下来该如何写,请各位指教指教,希望是用文件流的方法。
谢谢!
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from table where s_no='''+edit1.text+'''');
open;
end;
????接下来该如何写,请各位指教指教,希望是用文件流的方法。
谢谢!
ms:=ty.ADOQuery1.CreateBlobStream(ty.ADOQuery1.FieldByName('ty'),bmread);
(ty.FindComponent('image'+inttostr(flag)) as TImage).Picture.Bitmap.LoadFromStream(ms);
ms.Free;
var
mStream: TMemoryStream;
JpgFile: TjpegImage;
begin
Query1.close;
Query1.Sql.text := '.......';
Query1.Open;
if not Query1.FieldByName('Pic').IsNull then
begin
mStream := TMemoryStream.Create ;
JpgFile := TjpegImage.Create ;
TBlobField(Query1.FieldByName('Pic')).SaveToStream(mStream);
mStream.Position :=0;
jpgfile.LoadFromStream(MStream);
image2.Picture.Assign(JpgFile);
end
else
image2.Picture :=nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mstream:tmemorystream;
fileexit:string;
begin
adoquery1.Edit;
adoquery1.FieldByName('s_no').AsString:=edit1.Text;
adoquery1.FieldByName('s_name').AsString:=edit2.Text; if image1.Picture.Graphic<>nil then
begin
mstream:=TMemoryStream.Create;
fileexit:=extractfileext(opendialog1.FileName) ;
image1.Picture.Graphic.SaveToStream(mstream);
mstream.Position:=0;
TBlobField(adoquery1.FieldByName('pic')).LoadFromStream(mstream);
end;
adoquery1.Append;
showmessage('oks');end;
var
mstream:tmemorystream;
fileexit:string;
begin
adoquery1.Edit; // 这是编辑状态
adoquery1.FieldByName('s_no').AsString:=edit1.Text;
adoquery1.FieldByName('s_name').AsString:=edit2.Text; if image1.Picture.Graphic <>nil then // 这个判断好像一直会成立
begin
mstream := TMemoryStream.Create;
fileexit := extractfileext(opendialog1.FileName) ;
image1.Picture.Graphic.SaveToStream(mstream);
mstream.Position:=0;
TBlobField(adoquery1.FieldByName('pic')).LoadFromStream(mstream);
end;
if AdoQuery1.state in [dsInsert,dsEdit] then AdoQuery1.post; adoquery1.Append; // 这里又置于新增状态
showmessage('oks'); end;
如果我上面的注释你都觉得合理的话,那代码是没有问题的。
我现在改成了:
procedure TForm1.Button1Click(Sender: TObject);
var
mstream:tmemorystream;
fileexit:string;
begin
adoquery1.insert;
。
。
。 AdoQuery1.post;
showmessage('oks');
end;这个不知道还有问题吗,
还有,sanguomi 的写法,我只能查询到JPG的图片,BMP的查不出来,请问有没有办法解决!
你这个问题的难点在判断图片类型而不是载入或存储图片。
var
mStream: TMemoryStream;
JpgFile: TjpegImage;
bmpfile: Tbitmap;
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from stu_info where s_no='''+edit1.Text+''' ') ;
open;
end;try
if not adoquery1.FieldByName('pic').IsNull then
begin
mstream:=tmemorystream.Create;
jpgfile:=tjpegimage.Create;
bmpfile:=tbitmap.Create;
Tblobfield(adoquery1.FieldByName('pic')).SaveToStream(mstream);
mstream.Position:=0;
if uppercase(checkpicformat(mstream))='JPEG' then
begin
jpgfile.LoadFromStream(mstream);
image1.Picture.Assign(jpgfile);
end
else
if uppercase(checkpicformat(mstream))='BMP' then
begin
bmpfile.LoadFromStream(mstream);
image1.Picture.Assign(bmpfile);
end;
end
else
image1.Picture:=nil;
finally
jpgfile.Free;
bmpfile.Free;
end;我这样写代码,出错,麻烦看看是什么原因!
mStream: TMemoryStream;
JpgFile: TjpegImage;
bmpfile: Tbitmap;
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from stu_info where s_no='''+edit1.Text+''' ') ;
open;
end; try
if not adoquery1.FieldByName('pic').IsNull then
begin
mstream:=tmemorystream.Create;
jpgfile:=tjpegimage.Create;
bmpfile:=tbitmap.Create;
Tblobfield(adoquery1.FieldByName('pic')).SaveToStream(mstream);
mstream.Position:=0;
if uppercase(checkpicformat(mstream))='JPEG' then
begin
mstream.Position:=0; //注意,下面也是
jpgfile.LoadFromStream(mstream);
image1.Picture.Assign(jpgfile);
end
else
if uppercase(checkpicformat(mstream))='BMP' then
begin
mstream.Position:=0;
bmpfile.LoadFromStream(mstream);
image1.Picture.Assign(bmpfile);
end;
end
else
image1.Picture:=nil;
finally
jpgfile.Free;
bmpfile.Free;
end; 我这样写代码,出错,麻烦看看是什么原因!
现在能把JPEG的文件查出来了。
但是BMP的文件,还是查不出来!能给我说一下,
mstream.Position:=0;
这个的用法吗?
uppercase(checkpicformat(mstream))='BMP' then
才能查询出来BMP的图片,
不知道是哪里的问题。