【发布时间】:2016-07-27 01:51:09
【问题描述】:
我有一个在本地使用 SQL Server 2012 Express 的应用程序,它带有 Microsoft Access 2016 前端,带有表单、宏和模块。它用于现场收集检查数据,包括许多照片。问题是插入到主远程 SQL Server 2012 时出现错误:
Microsoft ODBC SQL Server 驱动程序错误:查询超时已过期
如果用户附加了 3 张以上的照片。
到目前为止,我已尝试提高远程 SQL Server(属性\连接)上的远程查询超时,我已将服务器刷新间隔提高到 240 秒(工具\选项)。我已经在 Access 的 SQL 函数中向 VBA 添加了代码:
Dim Conn As ADODB.Connection
Set Conn = New ADODB.Connection
Conn.ConnectionTimeout = 120
并且我在应用启动时运行的 AutoExec 宏中添加了以下函数:
Function SetTimeout()
Dim Mydb As Database
Set Mydb = CurrentDb
Mydb.QueryTimeout = 640
End Function
最后我在 VBA 的连接字符串末尾添加了“Connection Timeout=90”:
Server=localhost\SQLEXPRESS2012;Database=DamInspector;
测试更新脚本只需要 67 秒即可运行,但我尝试了从“0”(无限)到 1024 的各种时间长度。具体的运行时错误是 '-2147217871 (80040e31)' [Microsoft][ ODBC SQL Server Driver]查询超时已过期
可能是其他方法?
我有 14 个表必须由 11 个检查员同步。其中7张桌子用于照片。在每个本地 SQL Express 实例上运行存储过程,而不是通过链接表使用 VBA 编写脚本会更好吗?
【问题讨论】:
-
我认为您需要一种不同的方法。 ODBC 查询并不真正适合在可能不稳定的网络上传输如此多的数据(相对于网络速度)。某种后台传输(FTP?)。
-
上传的不是图片文件,而是表格内的BLOB数据。
-
是的,我明白了,这就是恕我直言的问题。我的意思是一种非常不同的方法,要么根本不将照片存储在数据库中,要么在通过不同渠道上传照片后由服务器进程插入它们。
-
查看照片上传代码将非常有帮助,而不仅仅是尝试解决问题的代码。
标签: sql-server ms-access query-timeout