前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VFP使用BLOB字段存取图片到SQL2000,显示出来也EASY

VFP使用BLOB字段存取图片到SQL2000,显示出来也EASY

作者头像
加菲猫的VFP
发布2023-08-21 17:15:04
2180
发布2023-08-21 17:15:04
举报
文章被收录于专栏:加菲猫的VFP加菲猫的VFP
首先来看一下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

来看一下查询代码:

代码语言:javascript
复制
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字段也简单

代码语言:javascript
复制
*--将文件保存到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类

少少的写一点代码看看:

一样的可以显示。

保存代码也看看

代码语言:javascript
复制
*--将文件保存到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 
    

猫框的数据处理真是用起来太爽了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档