首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >放弃General存放图像,VFP的BLOB存图存文件也是非常香

放弃General存放图像,VFP的BLOB存图存文件也是非常香

作者头像
加菲猫的VFP
发布2022-04-07 19:30:42
发布2022-04-07 19:30:42
1.1K0
举报
文章被收录于专栏:加菲猫的VFP加菲猫的VFP
Blob 字段类型,它在一个 FPT 文件中存储二进制数据。跟其它数据类型一样,Microsoft 给 VFP 9 增加 Blob 就是为了给其它数据库提供更好的支持。

其实它在 VFP 本地表中它也有很大的用处。Blob 的单字符缩写是“W”。

这里是关于 Blob 的一些细节:

  1. Blob 的功能与 Memo 类似:你不能在其上建立索引,它接收 Null 值,在一个表或者游标中的 Blob 字段有一个 2GB 数据的限制(当然了,FPT 文件的总大小也只能有2GB)。在一个 BROWSE 窗口或者 Grid 中,一个 Blob 字段中如果是空的,则显示为 "blob",否则则显示为“Blob”。
  2. 你可以使用一个 editbox 或者 MODIFY MEMO 来显示一个 Blob 字段的内容。它的二进制数据以不带前导 0h 的十六进制值的形式显示。然而,它的内容是只读的。在 Blob 字段中的值必须编程的修改,例如REPLACE 或者 GATHER。
  3. 跟 Varbinary 一样,在 Blob 字段上是不会进行代码页转换的。不转换的好处就是内容不会发生变化。
  4. 对于 Blob 字段和存储在内存变量中的 Blob 值,TYPE() 和 VARTYPE() 函数返回的是“Q”而不是你准备看到的“W”。DISPLAY/LIST STRUCTURE 和 AFIELDS() 则会正常的为 Blob 字段显示 “Blob”和“W”。
  5. TRIM()、RTRIM()、LTRIM()、ALLTRIM()、ALINES()、TRANSFORM()、ISBLANK()、以及 Empty() 对 Blob 的处理跟它们对待 Varbinary 字段是一样的。
  6. SQL LIKE 操作符、LIKE()、LIKEC()、BINTOC()、CTOBIN()、以及 APPEND FROM 不支持 Blob 字段。
  7. Blob 字段可以被用作包含图像的 General 字段的替代品。General 字段有许多毛病:很难使用、很难更新、体积太大,等等。在一个 General 字段中存储图像需要有一个关联到一个 ActiveX Server 的文件,而存储在一个 Blob 字段中就简单了,它们很容易去更新,跟使用 APPEND GENERAL 不同,你可以使用象下面这样的东西来把一幅图片放入到一个 Blob 字段中去:

存储图像到blob字段

代码语言:javascript
复制
replace Picture with filetostr('BobJones.gif') in Employees

字段还原当然用

代码语言:javascript
复制
strtofile(picture,"1.gif")

显示Blob 字段中的图像

要在一个表单上显示存储在一个 Blob 字段中的图像,只要简单的把一个 Image 控件的 PictureVal 属性设置为这个 Blob 字段的内容就行了:

代码语言:javascript
复制
Thisform.imgEmployee.PictureVal = Employees.Picture

实战测试

建立一个表单,放入一个图像控件和两个按钮(向左,向右)

表单init方法建立一个用来放图像的游标:

代码语言:javascript
复制
create cursor TEST (FIELD1 Blob)
insert into TEST values (filetostr(home() + 'FOX.BMP'))
insert into TEST values (filetostr(home() + 'WIZARDS\BANDRPT.BMP'))
insert into TEST values (filetostr(home() + 'WIZARDS\WIZFLAX.BMP'))
insert into TEST values (filetostr(home() + 'WIZARDS\WIZSTONE.BMP'))
insert into TEST values (filetostr(home() + 'WIZARDS\FOXQSTRT.BMP'))
go top

左边的command按钮的click事件

代码语言:javascript
复制
Select TEST
If !Bof()
    Skip -1
    Thisform.image1.PictureVal = test.FIELD1
Endif

右边的command按钮的click事件

代码语言:javascript
复制
Select TEST
If !Eof()
    Skip +1
Endif

If !Eof()
    Thisform.image1.PictureVal = test.FIELD1
Endif

表单上的 NEXT 和 Previous 按钮将 Image 控件的 PictureVal 属性设置为游标中的 FIELD1。

猫猫的下一篇来讲blob字段的打印

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 存储图像到blob字段
  • 显示Blob 字段中的图像
  • 实战测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档