首先来看一下BLOB这个数据类型的介绍:
大二进制对象(Blob)数据类型,若要存储一个任何种类的二进制数据,如 ASCII 码文本、一个可执行文件(.exe) 或一个带有不确定长度的字节字符串,可使用大二进制对象数据类型。对于从 SQL Server 中存储图像数据,大二进制对象数据类型显得特别有用。
你可以使用二进制的原文将值赋予一个大二进制对象字段。二进制原文以 0h 前缀开始,并跟随一个不用引号("")括起的十六进制的数字串(不同于字符串)。下面的列表包含了二进制原文的示例:
0h202020
0h6ABCDEF
0h (空二进制原文)
二进制原文被限定为 255 个编码字节。
也就是说二进制原文是直接可以保存表BLOB字段里面的。
大二进制对象类型被数据库容器(.dbc)、自由表、临时表和视图所支持。例如,可以在“表设计器”的“字段”选项卡中为字段选择该类型。表可以包含多个大二进制对象字段。可以为大二进制对象字段指定默认值和 Null 值。大二进制对象字段支持字段有效性。
可以使用 EditBox 控件、Grid 控件中的 TextBox 控件,或通过发出带有大二进制对象字段名的 MODIFY MEMO 命令来查看带有大二进制对象类型字段的内容,然而,该内容只读。编辑框将大二进制对象类型数据显示为不带 0h 前缀的十六进制值。在表格中,如果大二进制对象类型字段为空,就显示“blob”字符串,而如果包含数据,就显示“Blob”字符串。可以双击表格中的大二进制对象字段,而“编辑”窗口以只读方式显示该数据。
不支持基于大二进制对象字段的索引关键字。在带有大二进制对象类型的数据上,不执行代码页转换。(这个对于unicode的应用非常有用。)
现在我们再来看一下SQL查询数据类型转换,在默认的时候,后台Image字段会被转换为通用字段,这不是我们想要的,而是直接能转换为BLOB字段。
CURSORSETPROP命令有个参数“MapBinary”:
CURSORSETPROP("MapBinary",.t.,0) &&通过此命令将SQL2000的IMAGE字段 转换为BLOB
来看一下查询代码:
CURSORSETPROP("MapBinary",.t.,0) &&通过此命令将IMAGE 转换为BLOB
TEXT TO lcSQLCmd NOSHOW TEXTMERGE
SELECT * FROM test
ENDTEXT
oDBSQLHelper= NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
IF oDBSQLHelper.SQLQuery(lcSQLCmd,"test")<0
?oDBSQLHelper.errmsg
RETURN
ENDIF
If !Pemstatus(_Screen,"myimg",5)
oImage=_Screen.AddObject("myimg","image")
ENDIF
_Screen.myIMG.Left=400
_Screen.myIMG.width=400
_Screen.myIMG.height=400
_screen.myimg.Stretch=1
_Screen.myimg.PictureVal=image1
_Screen.myIMG.top=1
_Screen.myIMG.Visible=.T.
保存图片到SQL2000image字段也简单
*--将文件保存到BLOB字段
xxx=GETFILE()
yyy=0h+FILETOSTR(xxx)
TEXT TO lcSQLCmd NOSHOW TEXTMERGE
INSERT into test (image1) values(?yyy)
ENDTEXT
oDBSQLHelper= NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
IF oDBSQLHelper.ExeCuteSQL(lcSQLCmd)<0
?oDBSQLHelper.errmsg
RETURN
ENDIF
也有某位狐友说CA类做不到?
来生成一个DAL_CA类
少少的写一点代码看看:
一样的可以显示。
保存代码也看看
*--将文件保存到BLOB字段
xxx=GETFILE()
yyy=FILETOSTR(xxx)
odal_ca=NEWOBJECT("dal_test","dal_test.prg")
IF !odal_ca.cursorfill(.t.)
RETURN
ENDIF
APPEND BLANK
replace image1 WITH yyy IN odal_ca.alias
IF !odal_ca.save()
?odal_ca.msg
RETURN
ENDIF
猫框的数据处理真是用起来太爽了。
猫猫的心里话
加菲猫的VFP|狐友会社群接收投稿啦
加菲猫的VFP,用VFP不局限VFP,用VFP混合一切。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。
商业模式,销售技巧、需求规划、产品设计的知识通通可以发表。
暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。
如何帮助使用VFP的人?
用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。
我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。
加菲猫的vfp倡导用"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"。
我已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。
2023年狐友会社群会员继续招募中
社群会员获取的权益有:
祺佑三层开发框架商业版(猫框),终身免费升级,终身技术支持。
开放的录播课程有:
微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。
源码类资源有:
支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。
会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务