我用的是sql server数据库,我在数据库中有一个表为Earthstandard,表中有一个drawing字段是image类型的,我想把drawing字段里的存的图片信息取出来,下面是我的代码:
var
oStream : TADOBlobStream;
oStream :=nil;
oStream := TADOBlobStream.Create(adoqry.fieldbyname('drawing') as TBlobField, bmReadWrite);
dbiEarthStandard.Picture.Bitmap.LoadFromStream(oStream);
oStream.Free;但是程序运行到oStream := TADOBlobStream.Create(adoqry.fieldbyname('drawing') as TBlobField, bmReadWrite);就报错,错误为:Invalid Class typecast
请问这是什么原因,谢谢
var
oStream : TADOBlobStream;
oStream :=nil;
oStream := TADOBlobStream.Create(adoqry.fieldbyname('drawing') as TBlobField, bmReadWrite);
dbiEarthStandard.Picture.Bitmap.LoadFromStream(oStream);
oStream.Free;但是程序运行到oStream := TADOBlobStream.Create(adoqry.fieldbyname('drawing') as TBlobField, bmReadWrite);就报错,错误为:Invalid Class typecast
请问这是什么原因,谢谢
oStream : TADOBlobStream;
oStream :=nil;
oStream := TADOBlobStream.Create(TBlobField(adoqry.fieldbyname('drawing')), bmReadWrite);
dbiEarthStandard.Picture.Bitmap.LoadFromStream(oStream);
oStream.Free;
TBlobField(adoquery.FieldByName('Contain')).SaveToStream(oStream);
dbiEarthStandard.Picture.Bitmap.LoadFromStream(oStream);
哦,这样写都会出错,奇怪了,你的adoqry ,Open了没有,以bmReadWrite的方式创建TADOBlobStream,
要先
adoqry.edit;
但是不能显示图片,请问这是什么问题啊
其中image:tfield
然后我的语句是这样的:
function loadESFromDB(AName:String):TEarthStandard;
var adoqry:TADOQuery;
esi:TEarthStandard;
begin
adoqry:=Tadoquery.create(application);
adoqry.connection:=dmgis.adocon;
adoqry.sql.add('select * from earthstandard where name='''+AName+'''');
adoqry.open;
if not adoqry.eof then
begin
esi.name:=adoqry.fieldbyname('name').value;
esi.description:=adoqry.fieldbyname('property').value;
esi.image:=adoqry.fieldbyname('drawing');
end;end;
然后在formEarthstandard的界面里调用
var
oStream : TADOBlobStream;
esi:TEarthstandard;
oStream :=nil;
oStream := TADOBlobStream.Create(esi.image as TBlobField, bmReadWrite);
dbiEarthStandard.Picture.Bitmap.LoadFromStream(oStream);
oStream.Free;
你看这样有错吗?错误在哪儿?
//假设我的数据库里已经有了一条记录,其中的Pic字段是Image类型uses Jpeg; var
AdoBlobStream:TAdoBlobStream;
begin
AdoBlobStream:=TAdoBlobStream.Create(TBlobField(AdoDataSet.FieldByName('Pic')),bmRead);
try
if Image1.Picture.Graphic=nil then Image1.Picture.Graphic:=TJpegImage.Create; //有这句应该不会访问出错了。
Image1.Picture.Graphic.LoadFromStream(AdoBlobStream);
finally
AdoBlobStream.Free;
end;
end;我是在我机上试的,楼主把变量什么的换成自己的试试看