请教高手:
通过代码存入jpg到access ,by adoquery
procedure TForm1.Button1Click(Sender: TObject);
var
pic:TMemoryStream;
begin
pic:=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(pic);
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('insert into 题目(题图) values(:_pic)');
adoquery1.Parameters.ParamByName('_pic').LoadFromStream(pic,ftBlob);
adoquery1.ExecSQL;
end;
通过代码读取图片
procedure TForm1.BitBtn1Click(Sender: TObject);
var
p:Tstream;
jpgorbmp:Tjpegimage;begin
adoquery1.Close;
adoquery1.SQL.Clear;;
adoquery1.SQL.Add('select 题图 from 题目 );
AdoQuery1.Open;
adoquery1.Last;
p:=Tstream.Create;
p:=adoquery1.CreateBlobStream(adoquery1.FieldByName('题图'),bmread);
jpgorbmp:=Tjpegimage.create;
jpgorbmp.LoadFromStream(p);
image2.Picture.Assign(jpgorbmp);
end;
读出正确。
但是通过代码存入jpg到access ,by clientdataset
procedure TForm1.Button1Click(Sender: TObject);
var
pic:TMemoryStream;
begin
pic:=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(pic);
ClientDataSet1.Close;
ClientDataSet1.commandtext:='insert into 题目(题图) values(:_pic)';
ClientDataSet1.Params.ParamByName('_pic').LoadFromStream(pic,ftblob);
ClientDataSet1.Execute;
end;
同样用上边的读取的代码(bitbtnclick),却提示 jpeg error #52。
百思不得其解,为何。谢谢。
数据集数据库连接没有问题,access题目表为空。
通过代码存入jpg到access ,by adoquery
procedure TForm1.Button1Click(Sender: TObject);
var
pic:TMemoryStream;
begin
pic:=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(pic);
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('insert into 题目(题图) values(:_pic)');
adoquery1.Parameters.ParamByName('_pic').LoadFromStream(pic,ftBlob);
adoquery1.ExecSQL;
end;
通过代码读取图片
procedure TForm1.BitBtn1Click(Sender: TObject);
var
p:Tstream;
jpgorbmp:Tjpegimage;begin
adoquery1.Close;
adoquery1.SQL.Clear;;
adoquery1.SQL.Add('select 题图 from 题目 );
AdoQuery1.Open;
adoquery1.Last;
p:=Tstream.Create;
p:=adoquery1.CreateBlobStream(adoquery1.FieldByName('题图'),bmread);
jpgorbmp:=Tjpegimage.create;
jpgorbmp.LoadFromStream(p);
image2.Picture.Assign(jpgorbmp);
end;
读出正确。
但是通过代码存入jpg到access ,by clientdataset
procedure TForm1.Button1Click(Sender: TObject);
var
pic:TMemoryStream;
begin
pic:=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(pic);
ClientDataSet1.Close;
ClientDataSet1.commandtext:='insert into 题目(题图) values(:_pic)';
ClientDataSet1.Params.ParamByName('_pic').LoadFromStream(pic,ftblob);
ClientDataSet1.Execute;
end;
同样用上边的读取的代码(bitbtnclick),却提示 jpeg error #52。
百思不得其解,为何。谢谢。
数据集数据库连接没有问题,access题目表为空。
解决方案 »
- window API GetPrinter 问题求解。
- DelPhi2010的CxGrid控件包
- 比较初级的问题,这个SQL如何写?
- Delphi6写的调用C#的WebService的Dll,在XP下可以,Win2003下为什么不行呢?
- 请问如何知道一个目录下所有文件的文件大小?最好有代码,谢谢.
- 用Delphi程序实现SQL Server 的数据库备份????????
- 如何动态添加控件?
- 有广州兄弟吗?我想到广州走走!!!!
- 我用KeyBD_Event函数模拟小键盘,为什么不能输入逗号?--高手进来。
- DBGrid
- 才鸟的问题,请大家帮忙解释,什么是stdcall它有什么作用,谢谢
- 急,寻VirtualTrees 4.2.18或4.2.20
就是用clientdataset存有问题。
要不麻烦地主自己测一下先。很急,感谢!
00000000h: F5 F8 3F 00 00 00 10 00 4A 00 46 00 49 00 46 00 ; 貘?.....J.F.I.F.
00000010h: 00 00 01 00 00 00 01 00 00 00 60 00 00 00 60 00 ; ..........`...`.
00000020h: 00 00 00 00 F5 F8 00 00 1F 00 4C 00 45 00 41 00 ; ....貘....L.E.A.
00000030h: 44 00 20 00 54 00 65 00 63 00 68 00 6E 00 6F 00 ; D. .T.e.c.h.n.o.
00000040h: 6C 00 6F 00 67 00 69 00 65 00 73 00 20 00 49 00 ; l.o.g.i.e.s. .I.
00000050h: 6E 00 63 00 2E 00 20 00 56 00 31 00 2E 00 30 00 ; n.c... .V.1...0.
00000060h: 31 00 00 00 F5 F8 00 00 00 00 02 00 02 00 02 00 ; 1...貘..........
错误的数据,文件扩展名为.jpg时不显示。
而用adoquery存入,0x00-0x60为
00000000h: FF D8 FF E0 00 10 4A 46 49 46 00 01 00 01 00 60 ; ??.JFIF.....`
00000010h: 00 60 00 00 FF FE 00 1F 4C 45 41 44 20 54 65 63 ; .`..?.LEAD Tec
00000020h: 68 6E 6F 6C 6F 67 69 65 73 20 49 6E 63 2E 20 56 ; hnologies Inc. V
00000030h: 31 2E 30 31 00 FF DB 00 84 00 02 02 02 02 02 02 ; 1.01.??......
00000040h: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ; ................
00000050h: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 03 03 ; ................
00000060h: 02 02 03 02 02 02 03 04 03 03 03 03 04 04 04 02 ; ................
数据正确。
不知道能不能给各位什么启发。
有什么好的意见继续发表,交流。近日揭贴。
不过我感觉这有问题
<Image1.Picture.Graphic.SaveToStream(pic);>
Image1中的图片格式已经是BMP了,不管你设计时选择什么格式,或者用Ctrl+C、Ctrl+V粘贴到Image上都会自动转换为Bmp格式。所以你存入的图片肯定是BMP。<jpgorbmp:Tjpegimage;>
读取的时候改为TBitMap。就能读出来。还有参数的类型要设置一下。
两段内容差不多,只是原数据间被插入了00, (jiff->j.i.f.j......)
这个搞搞清楚,就好玩了。
存JPEG图最好用
TADOTable.Fields[X].Assign()的方法。1M以下不会出问题。
更大的就只好用
TADOTable.Fields[X].LoadFromStream了。
去年俺做过的。