急救,关于图片存入数据库的问题!!!!!!(100分)

  • 主题发起人 主题发起人 honey_001
  • 开始时间 开始时间
H

honey_001

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数据库是sql server2000,我的表建立为
create table myfrieds
  (name varchar(15) notnull,
     telephone varchar(12),
     address varchar(30),
     zipvarchar(8),
     picture varchar(15),
     image image);
其中,picture字段用于保存图像的名称(包括路径),image(Graphic字符)则用于存储图像,其数据类型为“image”。
图像保存的处理程序如下(我在其他地方见到的):
  procedureTform1.Savebtnclick(sender:TObject);
  var
      graphic1:TGraphic;
  begin
      graphic1:=TGraphic.Create;
   graphic1.loadfromfile(opendialog1.filename);
   table1.insert;
   table1.fieldbyname('name').asstring:=edit1.text;
   table1.fieldbyname('telephon').asstring:=edit2.text;
   table1.fieldbyname('address').asfloat:=edit3.text;
   table1.fieldbyname('zip').asfloat:=edit4.text;
   table1.fields[4].assign(graphic1);
   table1.post;
   graphic1.free;
  end;
可却运行不了,提示
[Warning] Unit3.pas(61): Constructing instance of 'TGraphic' containing abstract methods.
abstract error!!!!!
请高手帮忙!!!!!!!!
为何table1.fields[4].assign(graphic1)而不是fields[5],image字段放什么数据呢?
 
fields从0开始
你打开的头像是什么格式?
好像是graphiic.picture
我用image没问题table1.fields[4].assign(image1.picture);
   
 
1. TGraphic是TBitmap, TIcon等类的抽象类,不能用TGraphic来创建,
至少应该这样写
graphic1 := TBitmap.Create;

2.书上应该写错了,是fields[5],不过应该使用更可读的写法
TBlobField(Table1.FieldByName('Image')).Assign(graphic1);   
 
我把table1.fields[4].assign(graphic1);换成了
TBlobField(Table1.FieldByName('Image')).Assign(graphic1);其他不变,
可还是运行不了,提示同样的错误。
请问我是哪儿弄错了?  
   
 
不是说了用TBitmap来创建TGraphic吗???!!!
同样的道理比如使用TStrings,创建时
TStrings := TStringList.Create;
关键TGraphic是抽象类,很多方法没有实现的,必须用继承类来创建,
要是一个类是纯抽象的话,就和接口差不多了.
 
我改后程序到是没什么问题了,但我的sql server数据库是空的,且图片显示不了,
数据库中的image字段显示为<binary>
请问是什么原因?其他字段都提交进了数据库.
谢谢!!!!!!!!
 
那就对了
图片转化成二进制数据存储到了数据库中
显示<binary>就说明已经存进去了。
 
是啊,难不成你想在数据库里直接看到图片[:)]
 
在一个窗体上放上两个按钮一个存储一个导出图片试试看不就成了?!
显示数据库记录的图片
Image1.Picture.bitmap.assign(tblobfield(table.fieldbyname('Photo')));
存储图片
var myfilestream:tfilestream;
myblob:tblobfield;
picturepath:string;//图片文件路径
myfilestream:=tfilestream.Create(picturepath,fmopenread);
myblob:=tblobfield(table1.FieldByName('Photo'));
myblob.LoadFromStream(myfilestream);
myfilestream.Free;
 
多人接受答案了。
 
后退
顶部