这段代码出错在哪里?(50分)

  • 主题发起人 主题发起人 xknife
  • 开始时间 开始时间
X

xknife

Unregistered / Unconfirmed
GUEST, unregistred user!
以前在D6下还运行正常,这次结果就出错了! :(
数据库环境: sql2000
将一副图形以jpg的格式存入数据库中了,我想显示出来,只能用image了,
DBimage似乎不支持JPG,当然了,已经use jpg了!
var
FStream:TStream;
FJpeg:TJPEGImage;

//如果相片标志为'有',则显示相片
if Dm_da.Q_cldaBDEDesigner49.Value='有' then
begin
FJpeg:=TJPEGImage.Create;
FStream:=TBlobStream.Create(TBlobField(Dm_da.T_pic.FieldByName('相片')),bmRead);
try
FJpeg.LoadFromStream(FStream);
image1.Picture.Assign(FJpeg);
finally
FStream.Free;
FJpeg.Free;
end
出错代码是:
[Error] F_PIC.PAS(73): Undeclared identifier: 'TBlobStream'
[Error] F_PIC.PAS(73): Missing operator or semicolon
[Error] F_PIC.PAS(73): Too many actual parameters
 
你的变量声明 和你下面的用法比较一下
FStream:TStream;
FStream:=TBlobStream.Create(TBlobField(Dm_da.T_pic.FieldByName('相片')),bmRead);
存放图形的字段类型要设成image类型的
blob类型的字段容量小
我存放图片的代码
procedure Tfrm_sfxm.popmnuitm_imageClick(Sender: TObject);
var
jpg:tjpegimage;
extname,fname:string;
begin
tblxmxgwj.Insert;
if OpenPictureDialog1.Execute then
begin
ext:=extractfileext(fname);
fname:=OpenPictureDialog1.FileName;
extname:=uppercase(extractfileext(fname));
if extname='.BMP' then
DBImage1.Picture.LoadFromFile(fname);
if (extname='.JPG') or (extname='.JPEG') then
begin
jpg:=Tjpegimage.Create;
try
jpg.LoadFromfile(fname);
DBImage1.Picture.Graphic.Assign(jpg);
finally
jpg.Free;
end;
end;
end;
end;
 
use ..., dbtables;
TBlobStream 在dbtables中定义
 
你在用三层或者ADO是吗?在USES中加入DBTables,如果用MIDAS则将TBlobStream换成TClientBlobStream
 
用这个试试
var FStream: TMemoryStream;
FStream := TStream.Create;
FStream.Position := 0;
Tblobfield(ADODS.FieldByName('相片')).SaveToStream(FStream);
 
还要加个use DB, 多亏大家的帮忙,我才想起我以前做的程序中是用了tabel控件,
于是拖了一个控件往窗口上一放,于是就一切OK了! 我看了代码,照样加了use DB和dbtables,
再删除了这控件,这下就没问题了!
还有一点要请教大家,怎样将image中的图片清空后再使用?(与以上程序关联的!)
我把数据库中的图片删除了,但是image中显示的上一副图,要关闭程序重新打开才行!
 
image.picture.graphic:=nil就可以了
 
后退
顶部