我现在需要将多种格式的图像文件(*.bmp,*.Jpg,*.TIFF)直接插入到SQL SERVER的数据库当中,test表的数据库字段是这样的:
id char
pic image我做了一个简单的Query1,主要代码是:
Query1.sql.add('insert into test(id,pic) value(:id,:pic)');
Query1.ParamByname('id').Asstring:='1';
Query1.ParamByname('pic').LoadFromFile('d:\1.bmp',ftBlob);
Query1.ExecSql;这样我的数据的确更新上去了,图片也上去,但有个问题:
我较小的图片,20k以下的基本正常 ,大于20k后就会出问题.
我用的TDBImage来显示,大于20k的图下显示出来上部会出现一片黑色的块,若是上传的JPG就根本显示不出来了。请问各位高手,有没有其它方法来上传和显示呢?我的图片不会超过1M。
是不是需要转换成什么位流方式呢?
我试过Tbitmap和Tgraphic都不怎么行得通,不知Timage可以否?又该如何用呢》?问题解决马上结贴.
id char
pic image我做了一个简单的Query1,主要代码是:
Query1.sql.add('insert into test(id,pic) value(:id,:pic)');
Query1.ParamByname('id').Asstring:='1';
Query1.ParamByname('pic').LoadFromFile('d:\1.bmp',ftBlob);
Query1.ExecSql;这样我的数据的确更新上去了,图片也上去,但有个问题:
我较小的图片,20k以下的基本正常 ,大于20k后就会出问题.
我用的TDBImage来显示,大于20k的图下显示出来上部会出现一片黑色的块,若是上传的JPG就根本显示不出来了。请问各位高手,有没有其它方法来上传和显示呢?我的图片不会超过1M。
是不是需要转换成什么位流方式呢?
我试过Tbitmap和Tgraphic都不怎么行得通,不知Timage可以否?又该如何用呢》?问题解决马上结贴.
在Delphi 开发环境->Database->explore->你的ODBC->修改BLOB SIZE,BLOBS TO CACHE两个参数.
祝你好运.
http://expert.csdn.net/Expert/topic/1204/1204374.xml?temp=.9548761
还有没有其它高招。
我现在的问题是写进去的内容读出来时,小的BMP没问题,大的不行。
这图形应转换成什么流方式来表达呢?
img.savetostream(stringstream1);
Query1.sql.add('insert into test(id,pic) value(:id,:pic)');
Query1.ParamByname('id').Asstring:='1';
query1.paramByName('pic').asblob := stringstream1.datastring;
query1.executesql;
stringstream1.free;
img是一个支持显示图像的image控件
以下是我觉得在所有图片存取方法中最简单的方法
use jpeg,Clipbrd、、、、、、、、、、、、、
//Save to database
Image1.Picture.LoadFromFile('FileName');
if not (Image1.Picture.Graphic Is TBitmap) then
begin
ClipBoard.Assign(Image1.Picture);
Image1.Picture.Bitmap.Assign(ClipBroad);
ClipBoard.Clear;
end;//Change the picture that's not belonged to .bmp to .bmp
// picture
Table1.Edit;
Table1.FieldByName('Image').Assign(Image1.Picture);
Table1.Post;
//get from database
Image1.Picture.Bitmap.Assign(TPicture(Table1.FieldByName('Image')));
adoquery1.Edit ;
Tblobfield(adoquery1.FieldByName('zp')).Assign(image1.Picture );
adoquery1.Post ;
dbImage1.Picture.Bitmap.Assign(TBLOBField(adoquery1.Fields[0]));
begin
ADOQuery1.Edit;
TBlobField(ADOQuery1.FieldByName('Pic')).LoadFromFile(OpenDialog1.FileName);
ADOQuery1.Post;
end;
star_of_light(星星之光) 的用ADO不会有错,(同样的方法若用ODBC或者BDE都不行),但此方法只能用于保存BMP格式的图片,而没办法解决通用的其它格式,如JPG,GIF等,这样一来,造成数据库增大,影响网络传输。
有没有更好的办法来上传JPG等图形格式呢?
Var
Fs:TFileStream;
begin
If OpenDialog1.Execute then
begin
Fs:=TFileStream.Create(OpenDialog1.FileName);
ADOQuery1.Edit;
TBlobField(ADOQuery1.FieldByName('Image')).LoadFromStream(Fs);
ADOQuery1.Post;
end;
end;
Stream:TStream;
begin
If OpenDialog1.Execute then
begin
try
Stream:=Query1.CreateBlobStream(Query1.FieldByName('Image'),bmRead);
ADOQuery1.Edit;
TBlobField(Query1.FieldByName('Image')).LoadFromStream(Stream);
ADOQuery1.Post;
finally
Stream.Free;
end;
end;
end;