求助各位Foxer,关于VFP9利用SQL SERVER传文件的问题。

fojiao8745 2018-05-07 03:18:28
我想利用SQL SERVER传递文件,目前自己折腾了好几天,还是有各种问题,且百度真的没有解决方案,特来求教。
烦请各位大大们帮忙看一下,不慎感激。
由于代码是写在Form里面的,不好贴出来,所以截图下来了。

数据库字段类型以及VFP远程视图字段类型如下图
数据库

远程视图

文件上传下载部分,分别如下图
上传

下载

现在遇到个问题,就是如果在传送大于400K(大概的值)的文件就会报如下图的错误。小文件测试均OK,且不会发生文件损坏。

报错截图如下图


我试过将SQLSERVER中filecontent这个字段的类型从varbinary(MAX)改成text,发现文件大小限制消失,不会报上面的错误。但是又发现,有些文件在传递过程中发生了损坏,文件大小变得比原来的小,有些又不会,非常奇特。

实在是不理解,到底要怎么做才能完美的传文件,特来请教各位大大,还请赐教,非常感谢各位。
...全文
910 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
無法替代 2018-09-11
  • 打赏
  • 举报
回复
建议用SPT访问sql server 用远程视图各种坑。。
fojiao8745 2018-05-08
  • 打赏
  • 举报
回复
统一回复一下,就在我发这个帖子后不就,我就自己解决了,现分享出来,以期帮助将来的Foxer。 正确的配置是sqlserver端的字段类型采用text类型,远程视图(Remote View)中的字段类型采用M类型 上传的转码部分采用lcfilecontent = STRCONV(FILETOSTR(lcfilepath),13) 从服务器取回数据采用STRTOFILE(STRCONV(lcfilecontent,14),lcfilepath) 经测试VFP9+SQLSERVER2008完美使用,不会发生文件损坏大小不一致,或者发生上面图中的报错。 任何疑问请联系我qq:965153532 此贴终结。
fojiao8745 2018-05-08
  • 打赏
  • 举报
回复
引用 1 楼 mywisdom88 的回复:
能上传最大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
我自己解决了,你的这个方法不适用我的情况
mywisdom88 2018-05-07
  • 打赏
  • 举报
回复
能上传最大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

2,723

社区成员

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

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