Blob 字段类型,它在一个 FPT 文件中存储二进制数据。跟其它数据类型一样,Microsoft 给 VFP 9 增加 Blob 就是为了给其它数据库提供更好的支持。 其实它在 VFP 本地表中

加菲猫的VFP 2022-02-24 08:35:16


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字段
```
replace Picture with filetostr('BobJones.gif') in Employees
```
字段还原当然用
```
strtofile(picture,"1.gif")
```

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

## 实战测试
建立一个表单,放入一个图像控件和两个按钮(向左,向右)
![](https://img-blog.csdnimg.cn/img_convert/19d4ec1b2cd1609ed431e8434065c14a.png)

表单init方法建立一个用来放图像的游标:
```
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事件
```
Select TEST
If !Bof()
    Skip -1
    Thisform.image1.PictureVal = test.FIELD1
Endif
```

右边的command按钮的click事件
```
Select TEST
If !Eof()
    Skip +1
Endif

If !Eof()
    Thisform.image1.PictureVal = test.FIELD1
Endif
```
表单上的 NEXT 和 Previous 按钮将 Image 控件的 PictureVal 属性设置为游标中的 FIELD1。

本文源代码已经上传到微云,关注加菲猫的VFP公众号,发送“BLOB”既可获取

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

更多资料[www.sn58.cn](http://www.sn58.cn)

...全文
191 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,749

社区成员

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

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