请教高手:大于32K的jpg文件保存到数据库后显示会有问题,该如何解决?(100分)

S

sculsy

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢各位大侠的指教!!!
我现在已经能够把JPG文件保存到数据库中,但是当JPG文件大于32K的时候显示就有问题,
只能看到一点图象,其他都是黑色的,请问有什么办法解决?我已经看过以前同类问题的
解答,但是还是不行!我的程序代码如下:请各位大虾帮看看有什么问题!很急,谢谢!
保存图象:
procedure TForm1.Button1Click(Sender: TObject);
var
jpegs:TJpegImage;
mstream: tstringstream;
begin
Query1.Close ; //进行存储
Query1.SQL.Clear ;
jpegs:=TJpegImage.Create;
jpegs.Assign(FootImage.Picture.Graphic);
mstream:=Tstringstream.create('');
jpegs.SaveToStream(mStream);
//在query1的SQL属性里写上:tx_temp2
Query1.SQl.ADD('Insert Into image1 (id,image) values (10,:myimage)') ;
Query1.Params[0].AsBlob:=mstream.DataString;
Query1.ExecSQL;
jpegs.Free;
mstream.Free;
end;

显示图象:
procedure TForm1.Button2Click(Sender: TObject);
var
MyJpeg:TJpegImage;
MyStm:TMemoryStream;
begin
with Query1 do
begin
sql.Clear;
sql.Add('select * from image1 where id=10');
open;
end;
if not Query1.FieldByName('image').IsNull then
begin
try
MyJpeg:=TJpegImage.Create;
MyStm:=TMemoryStream.Create;
MyStm.Clear;
TBlobField(Query1.FieldByName('image')).SaveToStream(MyStm);
MyStm.Position:=0;
MyJpeg.LoadFromStream(MyStm);
FootImage.Picture.BitMap.Assign(MyJpeg);
finally
MyJpeg.Free;
MyStm.Free;
end;
end
else
begin
if FootImage.Picture<>Nil then
begin
FootImage.Picture.Assign(Nil);
end;
end;
end;
 
你储存时把图片转化为字符串本身就是一个错误!
就用你显示图片用的办法进行保存不是很好吗:
把 Query1 的 RequestLive 设为 True
然后这样:

var
jpegs:TJpegImage;
mstream: TMemoryStream; // 使用内存流
begin
Query1.Close ; //进行存储
Query1.SQL.Clear ;
jpegs:=TJpegImage.Create;
jpegs.Assign(FootImage.Picture.Graphic);
mstream:=TMemoryStream.Create;
jpegs.SaveToStream(mStream);

Query1.Append;
Query1.Edit;
Query1.FieldByName('id') := 10;
TBlobField(Query1.FieldByName('image')).LoadFromStream(mstream);
Query1.Post;
jpegs.Free;
mstream.Free;
end;
 
接受答案了.
 
顶部