我想利用SQL SERVER傳遞檔案,目前自己折騰了好幾天,還是有各種問題,且百度真的沒有解決方案,特來求教。
煩請各位大大們幫忙看一下,不慎感激。
由于代碼是寫在Form里面的,不好貼出來,所以截圖下來了。
資料庫欄位型別以及VFP遠程視圖欄位型別如下圖
資料庫

遠程視圖

檔案上傳下載部分,分別如下圖
上傳

下載

現在遇到個問題,就是如果在傳送大于400K(大概的值)的檔案就會報如下圖的錯誤。小檔案測驗均OK,且不會發生檔案損壞。
報錯截圖如下圖

我試過將SQLSERVER中filecontent這個欄位的型別從varbinary(MAX)改成text,發現檔案大小限制消失,不會報上面的錯誤。但是又發現,有些檔案在傳遞程序中發生了損壞,檔案大小變得比原來的小,有些又不會,非常奇特。
實在是不理解,到底要怎么做才能完美的傳檔案,特來請教各位大大,還請賜教,非常感謝各位。
uj5u.com熱心網友回復:
能上傳最大180M多的檔案到SQL2000[分享]*來自梅子論壇
*clear
= sqlsetprop(0,[DISPWARNINGS],(.f.)) &&不提示錯誤資訊
= sqlsetprop(0,[DISPLOGIN],3) &&不顯示ODBC登錄框
= sqlsetprop(0,[CONNECTTIMEOUT],10) &&連接等待時間
= sqlsetprop(0,[QUERYTIMEOUT],600) &&錯誤等待時間
= sqlsetprop(0,[WaitTime],600) &&執行前延遲時間
* QUERYTIMEOUT 引數,開始是10,最大才40M,最后設定到600,最大能280M,但查看SQL2000資料發現,當超過185M以后,資料就無效,測驗條件 SQL2000+VFP9.0+WIN7 32
*現在下載時,發現1個問題,當此程式第1次下載時,在紅色處會報錯誤,說要備注欄位才可以。但點取消后,第2次下載時,就不會報錯誤,能正常下載資料。
con=sqlstringconnect("driver=sql server;server=atm8505;uid=sa;pwd=zjh123456;database=master")
if con>0
xfiles=GETFILE()
IF !EMPTY(xfiles) &&
M1=LEN(CREATEBINARY(Filetostr('&xfiles')))
SET COMPATIBLE ON
?M1
xx=SQLEXEC(con,"insert into test(id,img) values(?INT(M1/1000000),?CREATEBINARY(Filetostr('&xfiles')) )")
SET COMPATIBLE OFF
?con,xx
ELSE
*下載
xfiles=[g:\a1.rar]
CURSORSETPROP("MapBinary",.T.,0) && 這句一定要在下面這句前面
xx=SQLEXEC(con,"SELECT ID,img FROM test WHERE id=184","temp")
COPY MEMO TEMP.img TO &xfiles
?con,xx
USE IN TEMP
ENDIF
SQLDISCONNECT(con)
ENDIF
uj5u.com熱心網友回復:
我自己解決了,你的這個方法不適用我的情況uj5u.com熱心網友回復:
統一回復一下,就在我發這個帖子后不就,我就自己解決了,現分享出來,以期幫助將來的Foxer。正確的配置是sqlserver端的欄位型別采用text型別,遠程視圖(Remote View)中的欄位型別采用M型別
上傳的轉碼部分采用lcfilecontent = STRCONV(FILETOSTR(lcfilepath),13)
從服務器取回資料采用STRTOFILE(STRCONV(lcfilecontent,14),lcfilepath)
經測驗VFP9+SQLSERVER2008完美使用,不會發生檔案損壞大小不一致,或者發生上面圖中的報錯。
任何疑問請聯系我qq:965153532
此貼終結。
uj5u.com熱心網友回復:
建議用SPT訪問sql server 用遠程視圖各種坑。。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81795.html
標籤:VFP
