为什么不能正确读取数据表的照片字段?(50分)

  • 主题发起人 主题发起人 yun.li
  • 开始时间 开始时间
Y

yun.li

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个dbf数据表[Vfp5.0格式],有一个通用型字段保存照片[用VFP的命令导入BMP图片格式]
我现在要用Delphi 升级系统,但却不能正确显示照片信息,我将数据库导入到Access中之后,
在Access环境中可以正确显示,但是仍然不能用Delphi显示出这个字段的信息。难道是BDE或者
ADO不支持VFP5.0数据库的通用型字段么?请问有什么解决办法么?
 
我倒!有这样提问的吗?即然你不能显示,最关键是当然是你如何显示的啦?
 
这个数据库中的照片字段是用VFP的命令导入的BMP文件,在VFP中可以显示,转换导Access数据库以后能显示和编辑,
问题就在于Delphi的Dbimage控件总是提示Bitmap image is not valid;
我试了其他的从BLOB字段中抽取位图存放到Image组件的方法也不行。
Delphi的Dbimage控件到底能支持哪几种数据库的BLOB字段,作为图片[BMP,Jpeg]
保存的BLOB字段在不同的数据库系统之间转换时会出现什么问题?有什么解决办法么?
 
这个问题我一直没有搞清楚.
这是VFP下的一个人事工资管理系统数据库,xggz.dbf[/xggz.fpt]6000条记录
其中包含zphoto-----照片,通用类型[bmp格式,其中一部分记录的bmp文件格式无效]
jl---------奖励 memo
cf---------处分 memo
一、由于在VFP环境下我没有找到将通用类型[bmp格式图片]字段导出到外部文件的方法.
因此不能用程序实现导出图片文件的目的.
二、同时由于zphoto字段存储的均为bmp格式图片,于是我用Delphi的ADO以及BDE连接此VisualFoxpro数据库[xggz.dbf]
<1.BDE>
tblobfield(Table1.FieldByName('zphoto')).SaveToFile('d:/abc.bmp');
shellExecute(handle,'open','d:/abc.bmp','','',SW_SHOWNORMAL);
<2.ADO>
tblobfield(ADOTable1.FieldByName('zphoto')).SaveToFile('d:/abc.bmp');
shellExecute(handle,'open','d:/abc.bmp','','',SW_SHOWNORMAL);
均以失败告终.[编译通过,但执行时提示"无效的位图文件,或者当前不支持这种文件格式"]
当我把这个数据库导入到Access文件后虽然可以手工打开zphoto列的图片[该列显示为BMP 图像],但是仍不能用
tblobfield(ADOTable1.FieldByName('zphoto')).SaveToFile('d:/abc.bmp');读取图像
我按照几个提出过类似问题的帖子的方法实现了图片文件[jpg格式]存入以及取出,显示[Access环境成功,还没有在其他数据库中试验]
但当打开Access数据库后我发现zphoto{即照片字段}显示为长二进制数据,不同于从VFP导入后的 BMP 图像 .
而我原来的DBF数据库近6000人的记录已经输入了照片.
我准备把数据库转换到SQL Server 2000下,并且把原来的bmp格式换为jpeg格式,但在这个环节卡壳了.
请问
1.能不能用一种程序的方法实现VFP数据库图片字段的显示及取出.
2.怎样才能用代码实现在此Access数据库中进行zphoto 列的图片转换,即 BMP图像===>长二进制数据(jpg格式) [Access数据库]


 
别想了..就存路径最安全可靠..其他的不现实..
 
你可以转化为字符流与标准的位图信息头做一下比较看看到底发生了什么错误
 
VF中的内容可能要用 OLE显示。
 
to brown0432 :
虽然只存路径简单灵活,但是我想如果数据库记录不太多[少于10000],jpg文件不超过50k
那么用blob存储会更好.
to whtsuperant、jsxjd:
我不知道VFP的通用类型字段存储结构,也不明白bmp文件格式.要不然从.FPT中提取是一个可行的办法.
 
to brown0432
如果存取路径的话,当你的数据库为SQL Server时,对于局域网C/S和B/S等不同的MIS系统
你是怎样设置路径的呢?能否详细一些?
to whtsuperant
谢谢你的提醒,我仔细比较了ACCESS数据库[从含有图片字段的VFP数据库导入]中 “长二进制数据”、“ BMP 图像 ”的区别
tblobfield(ADOTable1.FieldByName('zphoto')).SaveToFile('d:/abc.bmp');
我用UlTraEdit查看abc.bmp[导出文件],通过与正常bmp文件比较发现abc.bmp的前4e字节有一段与VFP有关的信息.
我删去这部分以后就可以正常显示了.
 
再一次感谢各位光临指导,在大家的帮助下我终于找到解决办法了.谢谢!
 
后退
顶部