图象录入,修改。。(200分)

  • 主题发起人 主题发起人 zzjmail
  • 开始时间 开始时间
Z

zzjmail

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]使用sqlanywhere作为后台数据库,可是在处理图象,修改图象的时候,使用
最简单的语,却出现出错:
try
if openpicturedialog1.Execute then
dbimage1.Picture.LoadFromFile(openpicturedialog1.FileName);
except
application.messagebox('图片装载出错!','信息',mb_iconinformation+mb_ok);
end;
录入图象只有一半,而修改的时候,当提交的后台数据库后,要
再次打开数据集,却提示说:流读错(stream read error!),
急,急,急,使用了很多方法想解决,可是还是无法解决。,,,
迫切需要高手指点一下。。。
 
如果是bde的话把
bde的blob size 和 blob to cache设大一点!
默认是32 64
 
思路:是不是SqlAnywhere数据库的Bolb类的字段有大小的限制?
 
没有限制呀。
 
blob size大点.你可以录入一个小图片试试.10K以内的.

 
[:(]没有人会吗。。。。。
 
dbimage1.Picture.LoadFromFile(openpicturedialog1.FileName);
//读的时候可以石BMP,JPG
但读出必须使BMP,所以必须读如BMP才可以,否则读出必然出错
//dbimage1读出至认识BMP
 
1)存取图片
procedure TMainForm.btnYesClick(Sender: TObject);
var
MyJPEG: TJPEGImage;
MS: TMemoryStream;
begin
MyJpeg := TJpegImage.Create;
try
MyJpeg.Assign(image1.Picture.Graphic)
Ms := TMeMoryStream.Create;
MyJpeg.SaveToStream(Ms);
Ms.Position := 0;

adoqrytest.Edit;
adoqrytest['id'] := '1';
TBlobField(adoqrytest.FieldByName('picture')).LoadFromStream(MS);
adoqrytest.Post;
finally
MyJpeg.Free;
Ms.Free;
end;
end;
2)读取图片
procedure TMainForm.FormShow(Sender: TObject);
var
tempStream: TStringStream;
tempJpeg: TJpegImage;
begin
try
tempStream := TStringStream.Create('');
TBlobField(adoqrytest.FieldByName('picture')).SaveToStream(tempStream);
tempJpeg := TJpegImage.Create;
tempJpeg.LoadFromStream(tempStream);
tempstream.position:=0
DBImage1.Picture.Bitmap.Assign(tempJpeg);
finally
tempStream.Free;
tempJpeg.Free;
end;
end;
 
[:(]早就试过了呀,可是还是提示相同的呀。。。
 
兄弟,試一下這個。這種方法也行呀

var
m:tstringstream;
begin
m:=tstringstream.Create('');
Image1.Picture.Graphic.savetostream(m); //image1控件中为要入库的图片
query.Close;
query.sql.clear;
query.sql.add('insert into img_table(htbh,img) values(:htbh,:img)');
query.ParamByName('htbh').asstring:=mhtbh;
query.ParamByName('img').asblob:=m.DataString;
query.ExecSQL;
query.close;
m.Free;
end;
 
后退
顶部