:怎样把大图形文件(BMP,JPG)保存到SQL表中?我试过很多次,大些的文件根本没办法保存,请各位大虾指点!很急!sculsy@163.com (100分)

  • 主题发起人 主题发起人 sculsy
  • 开始时间 开始时间
S

sculsy

Unregistered / Unconfirmed
GUEST, unregistred user!
:怎样把大图形文件(BMP,JPG)保存到SQL表中?我试过很多次,大些的文件根本没办法保存,请各位大虾指点!很急!sculsy@163.com
“无疯无禄”[red][/red]大虾已经告诉我用ADO来实现,但是我试了还是不行,能否给出代码来参考一下?我的图象文件估计是5M左右。
另外,可以用BDE来实现吗?
 
TBlobField(FieldByName('ImagField')).LoadFromFile('c:/myphoto.jpg');
 
if OpenPictureDialog1.Execute then
with query1 do
begin
close;
sql.Clear;
sql.Add('insert into picture (imagedata,filepath) values(:image,:filename)');
parambyname('image').LoadFromFile(OpenPictureDialog1.FileName,ftblob);
parambyname('filename').AsString:=OpenPictureDialog1.FileName;
execsql;

end;
 
用 adobolbstream 方法:

procedure TForm1.Button3Click(Sender: TObject);
var
bs: tadoblobstream;
myimage: tjpegimage;
begin // 不能有 adoquery.post,否则会有异常。
myimage:= tjpegimage.Create;
memo1.Visible:=false;
try
opendialog1.Filter:='jpeg file (*.jpg)|*.jpg';
if opendialog1.Execute then
begin
adoquery1.Insert;
bs:=tadoblobstream.Create(tblobfield(adoquery1.FieldByName('a2')),bmwrite);

try
myimage.LoadFromFile(opendialog1.FileName);
image1.Picture.Assign(myimage);
myimage.SaveToStream(bs);
adoquery1.FieldByName('a3').AsInteger:=2;
finally
bs.Free;
end;

end;
finally
myimage.Free;
adoquery1.Refresh;
end;
end;
 
谢谢各位大侠的指教!!!
我现在已经能够把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;
 
多人接受答案了。
 
后退
顶部