怎么才能解决 delphi 三层数据库mysql中存图片的问题,读能解决

haynes 2012-01-26 10:19:16
数据库用MYSQL,图片字段为longblob ,数据库联接用的是UNIDAC控件
数据表 db_zp
bm char(19) //编号,唯一值
zp longblob //图片


var
bh,filename:string;
fimage:TMemoryStream;
begin
//打开图片对话框
if openpicturedialog1.Execute =false then exit;
filename:=openpicturedialog1.FileName;
//将图片转换大小并存入stream
fimage:=TMemoryStream.Create;
.......
.......
.SaveToStreamJpeg(fimage);

//将内存中的图片放入数据库中
sqlquery_zp.SQL.Text:='insert into db_zp(bm,zp) values(:a,:b)';
bh:='ZP'+formatdatetime('YYYYMMDDHHMMSSZZZ',NOW);
sqlquery_zp.Params.ParamByName('a').Text:=bh;
sqlquery_zp.Params.ParamByName('b').LoadFromstream(fimage,ftBlob);
try
sqlquery_zp.ExecSQL;
except
application.MessageBox(' 错误: 照片数据库添加资料失败 ','信息',MB_OK);
exit;
end;


以前2层是这么作的,但是到三层就不行了, 用clientdataset_zp代替sqlquery_zp,执行没问题,但是mysql数据库中图片字段的数据不正常,很小很小。以前2层执行完后,可以用navicat for mysql 直接看到longblob字段中的图片.现在3层同样执行后,大小:只有2位元组

看了坛子上好些人遇到这问题,各位大神也贴了些解决办法,有用OLEVariant ,TBlobStream什么的,
我是新人,能否把这个解决办法弄得详细些,谢谢各位,所有分都送上
...全文
127 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看见佛 2012-02-16
我的思路是这样的:用TBlobField(FieldByName('Exe_Bin')).LoadFromFile()加载进本地数据集-->
把本地数据库更新到服务器-->服务器再上传到数据库
回复
我看见佛 2012-02-16
我使用的是这个
TBlobField(FieldByName('Exe_Bin')).LoadFromFile()来上传图片,

个人理解是其实三层数据更新到了服务器后也类似于两层应用了-->只不过再在服务器端进行实际操作数据

不知道我理解对否……
回复
Henry.6 2012-02-16
UNIDAC 版本,mysql版本,delphi版本?
回复
lyhoo163 2012-02-16
要将图像数据转化为字符数据,再传输。
回复
发动态
发帖子
数据库相关
创建于2007-08-02

2440

社区成员

Delphi 数据库相关
申请成为版主
社区公告
暂无公告