怎样实现存取SQL表image类型数据,请大虾指点!

kanzheni0003 2010-07-17 08:50:39
各位大虾:
我在SqlServer2000的一个数据库表sysuser定义了一个[tp]字段,是image类型的,但我用如下程序保存和读出图片信息都没有成功,都是空文件,请各位大虾指点问题出在什么地方?改怎样修改才行?

*/存入图片到表中////////*
LOCAL cSQL1,nResule,ax,bx
nResule=0
ax=FILETOSTR('d:\123.jpg') &&要保存d:\123.jpg图片
bx='0x'-STRCONV(ax,13)
cSQL1="UPDATE sysuser WITH (ROWLOCK) set tp = ?bx where id = 1" &&在id号为1的记录中存入图片信息
nResule=SQLEXEC(Handle,cSQL1) &&更新库存
IF nResule # 1
MESSAGEbox('插入图片失败!',64,'提示信息')
ENDIF

*/从表中读出图片存储到D盘下更名为111.jpg/////////*
LOCAL cSQL1,nResule,file_mc,cfile,bx
nResule=0
file_mc='d:\111.jpg'
CURSORSETPROP("MapBinary",.T.,0) &&
cSQL1="select tp from sysuser where id = 1"
nResule=SQLEXEC(Handle,cSQL1,'temp1') &&读取图片
SELECT temp1
IF RECCOUNT()=1
IF !EMPTY(temp1.tp) and !ISNULL(temp1.tp)
bx=temp1.tp
cfile=SUBSTR(bx,3,LEN(bx)-2) &&去除0x
cfile=STRCONV(cfile,14)&&将读出的base64 编码数据转换为原始的未编码数据
STRTOFILE(cfile,file_mc,.F.)&&将数据内容写入文件'd:\111.jpg'
ELSE
MESSAGEbox('获取图片失败!',64,'提示信息')
ENDIF
ENDIF
USE
...全文
338 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 apple_8180 的回复:]
用 Image 类型,不用编码,即不用 bx='0x'-STRCONV(ax,13)
[/Quote]

用 Image 类型不用编码,而你编码了。
NTM2008 2010-07-19
  • 打赏
  • 举报
回复
建议网络上共享目录,存放图片文件
十豆三 2010-07-19
  • 打赏
  • 举报
回复
个人经验,要存储的文件在 8KB 以上,100KB 以内,用 Image 类型。

不知道你要存储的文件一般多大?

如果要存储的文件比较大,如:80KB以上,建议用 TEXT类型,TEXT类型存储时要编码,还原时要解码。
(如果记录多的话,也不建议存储100以上的文件,因为这样太影响性能)
十豆三 2010-07-19
  • 打赏
  • 举报
回复
用 Image 类型,不用编码,即不用 bx='0x'-STRCONV(ax,13)
yjrryyx 2010-07-19
  • 打赏
  • 举报
回复
自从有了BLOB类型后,谁还愿意用什么编码还源之类的,烦死人了,BLOB类型可以轻松将16M字节以内的图片存放到SQL Image 类型中,存取放便,还可以前台直接显示,报表打印输出。
kanzheni0003 2010-07-19
  • 打赏
  • 举报
回复
谢谢大家赐教。
我也觉得奇怪,我用上面的代码,把字段定义为text类型后,用上面的代码存储和读取都能正常完成,可为什么对image类型的就不行了呢(改成了bx=STRCONV(ax,13))?,存储的图片也只有60K左右。不知道大虾们可否指点问题出在哪里?

2,747

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧