VFP9 对 SqlServer Image字段的图片存取处理
VFP9 的 Cast函数 和 Blob类型 对 VFP爱好者来说,真是个好消息。对于存储在 SqlServer 的数据表的 Image 字段内的图片数据,在 VFP9 之前的处理来说,真的是有些麻烦,现在好了,有了 Cast 和 Blob 来处理就简单多了。
先来介绍一下吧:
Cast()函数:
把一个表达式从一种数据类型到另一种数据类型。
CAST(eExpression AS cDataType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL])
参数
eExpression
指定一个数据表达式, 通常是在一条 SQL 语句中的你想转换到另一种数据类型的。eExpression 可以是一个字段, 计算字段或其它表达式类型。
cDataType
指定合法的名字或表示目标数据类型名子的字母。cDataType 也可以是一个等价于合法数据类型或代表合法数据类型的字母的表达式。
注意:如果为 cDataType 指定一个表达式, 必须用圆括号把 cDataType 指定的表达式括起来。
一些字段数据类型要求为 nFieldWidth、nPrecision 或两者指定值。
nFieldWidth
为特定数据类型指定字段宽度。Visual FoxPro 忽略以下数据类型的 nFieldWidth: D, T, I, Y, L, M, G 和 W。如果未指定 nFieldWidth, 就使用默认值, 例如, 被 CREATE TABLE 命令定义的值。
nPrecision
为特定的数据类型指定小数位。Visual FoxPro 忽略以下数据类型的 nPrecision: C, D, T, I, Y, L, M, G, V, Q 和 W。如果没有为 数值型 或 Float 数据类型指定 nPrecision, 默认为零 (0), 没有小数。如果 nPrecision 没有 Double 型未包含 nPrecision, 默认的小数位是由 SET DECIMALS 命令设置的值。如果其它类型数据未指定 nPrecision, 就使用默认值, 例如, 由 CREATE TABLE 命令定义的值。
NULL | NOT NULL
指定是否在字段中允许 null 值。
注意:如果一个或多个字段可以包含 null 值, 表中可包含的最大字段数从 255 减少至 254。
如果没有指定 NULL 或 NOT NULL, 它从表达式继承。
大二进制对象(Blob)数据类型
若要存储一个任何种类的二进制数据,如 ASCII 码文本、一个可执行文件(.exe) 或一个带有不确定长度的字节字符串,可使用大二进制对象数据类型。对于从 SQL Server 中存储图像数据,大二进制对象数据类型显得特别有用。
需要注意的是:每个字符串的字符或内存变量的最大数目为16,777,184字节,所以,在程序中处理时通常允许的最大图片文件约16M。
示例代码:
Local lcImageName
lcImageName = AddBs(JustPath(Sys(16,1))) + Sys(2015)+'.jpg' && 设置本地文件名.
nCon=SqlStringConnect("Driver=SQL Server;Server=SERVER;Uid=sa;pwd=;database=DBSMarket")
cSqlStr="Select Photo From T_BaseInfo Where ProID=1"
=SqlExec(nCon,cSqlStr,"CurTemp")
=SQLDisconnect(nCon)
=StrToFile(Cast(CurTemp.Photo As W), lcImageName, 0)
Use In ("CurTemp")
If File(lcImageName)
ThisForm.Image1.Visible = .T.
ThisForm.Image1.Picture = lcImageName
Else
ThisForm.Image1.Picture = lcImageName
ThisForm.Image1.Visible = .F.
EndIf
Erase [&lcImageName]
*!********* 结束
相关知识的文档链接
获取图片的VFP示例见:VFP调用API来控制USB摄像头,实现拍照或录像
图片的编辑处理可参见:
VFP9.0的GDI+类的使用 和 VFP9利用_GdiPlus类处理图片分辨率及缩放 两文介绍。
图片处理涉及到剪辑版可参见:VFP 图形文件与剪切板互换的API解决方法