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]