dephi操纵Sql server数据库中的图像字段(200分)

  • 主题发起人 anzhiping
  • 开始时间
A

anzhiping

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中如何操作Sql server数据库中的image(图像)字段.
我在程序中给字段加入图象后(dbimage1.picture.loadformfile),
出现错误:gerneral sql error。当把数据库中的关键字属性取掉后,
可以把小图(22K)放入。不知image字段跟关键字有什么关系,
但大图(其实也只有屏幕大小,256色,44K)放入后,
出现错误:invalid BLOB length.sql server总不会只支持微型图片
吧。急需解决,请各位大虾帮忙,超值奉送200块大洋。
 
hi,anzhiping:
1.DBImage加入图象不是picrure.loadfromfile,DBImage 有LoadPicture
Procedure.
DBImage是DataControl,当记录改变时,他会自动获取当前的Bolb Field.
2.我用的是SQL7,在SQL7中,可以设置Bolb 字段的Large Data,自己查Book
Online吧!
 
试着把BDE SQL接口的BLOB SIZE值调大一些, 应该就没有问题了.
 
loadpicture过程只是把存在数据库中的图像取出显示在数据控件中。
 
TRY 了以下,blob size 改成10000也不行。
 
你这样试一下:

1. 请将Sql Server的打补丁,至少是Pack4;
2. Sql Server端的table一定要有关键字,或对某一字段建立唯一的聚集索引;
3.将你的Delphi程序中的TDatabase的Params参数中的Blob Size的大小设大,至
少应该比你的图象文件大一些;

这样应该没有问题,我以前也出过这样的问题.
 
把它当做一般的字符串操作,Delphi的字符串可以容纳2G的内容,只不过在调试的
时候,只能看到几个字节而已,但能正常工作,我试过的。
 
我所建立的表都有关键字的。
 
操作SQL SERVER中的IMAGE 字段最好使用TBLOBFIELD
你说的问题我以前也遇到过,给你一个例子参考:

var
myfilestream:Tfilestream;
myblob:Tblobfield;
imagename:string;
begin
myfilestream:=Tfilestream.Create(imagename,fmOpenRead);
table1.Edit;
myblob:=Tblobfield(table1.fieldbyname('p_image'));
myblob.LoadFromStream(myfilestream);
table.post;
end;
 
这样就行:

(Table1.FieldByName('ImgField') as TBlobField).LoadFormFile('ImgFileName');
 
就是BLOB(大二进制字段)
用TDBIMAGE控件来读取。
 
不知插入的是否bmp?我在开发时发现利用dbimage只能操作bmp图.可以借助标准的image,利用query组件直接写sql语句(先获得地址)进行插入.当然必须是Tblobfield
字段.对于jpg图的操作可以察看正版delphi光盘下的extras目录下的jpeg单元
 
在Ttable的tablename属性中
使用数据库所有人.数据库名.表名,
如dbo.database1.table1.

 
使用<a href="http://cytown.yeah.net" target="new">ODBC98</a>吧,绝对没有问题(用过的说)。
 
在BDE中
把Blob Size 改成1000000,肯定可以

读写的时候,可以使用TMemoryStream和TBlobField来实现
如:
var a : TMemoryStream;
a:=TMemoryStream.Create;
image1.Picture.Bitmap.SaveToStream(a);
TBlobField(query1.FieldByName('字段名')).LoadFromStream(a);
query1.Post;
写的过程正好相反
 
多人接受答案了。
 
顶部