sql-server - MS Access 与 SQL Server (2016) 的连接突然失败
问题描述
我很迷茫,所以我向你寻求帮助。
我正在开发 MS Access 2016 数据库前端。此 FE 使用MS SQL Server (2016)
后端,使用 ODBC 连接到表。
情况如下:
我打开一个表格“ myform_A
”,显示表格中的数据。
我单击一个在后台启动某个进程的按钮。此过程还需要(第二个)表中的一些数据:tblMitarbeiter
. 此表如果不是表格的来源。
突然间 - 但不幸的是,在 95% 的情况下,Access 告诉我发生了错误 3146(ODBC 超时)。
使用 Access 导航栏可以访问所有表,以及我在流程中需要一些数据的表(第二个表)。这些表的 ODBC 有效。...但使用 VBA 的连接不起作用(但会引发错误 3146)。
问题发生在不同的机器上,通过 LAN 和 VPN 并在线路上失败:
Set rstMitarbeiter = dbsMitarbeiter.OpenRecordset(strSQL, dbOpenSnapshot)
ID_Mitarbeiter在运行时可用。
ODBC 连接字符串:
ODBC;DRIVER={ODBC Driver 13 for SQL Server};SERVER=192.168.100.19;DATABASE=MYDBNAME;Max Pool Size=100;UID=myusername;PWD=secretPW
请注意:
- 我试图只获得 1 条记录!
- 当我将其放入公共子程序并使用 VBA 中的直接窗口启动它时,代码WORKS,没有打开“myform_A”表单,而是在打开 Access 文件后直接打开。
- 如果我从连接字符串中删除 MAX POOL SIZE 没有区别(我实际上添加了它以避免这个错误 - 没有结果)
我有
- 尝试通过查询 - 没有运气,同样糟糕的结果
- 为此数据库检查了 SQL Server 上的自动关闭。它被关闭。
- 尝试 SQL Native 客户端连接到服务器 - 没有区别
- 设置查询超时 - 没有区别
- SQL 服务器上的最大池大小设置为 32767
所以——我能做什么?
错误可能隐藏在哪里?
有什么想法/建议吗?
非常感谢你。
我在第二张桌子上运行的代码(在按下按钮后的进程中)是
Dim dbsMitarbeiter As DAO.Database
Dim rstMitarbeiter As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT TOP 1 * FROM tblMitarbeiter WHERE ID_Mitarbeiter=" & ID_Antragsteller & ";"
Set dbsMitarbeiter = CurrentDb()
dbsMitarbeiter.QueryTimeout = 60
Set rstMitarbeiter = dbsMitarbeiter.OpenRecordset(strSQL, dbOpenSnapshot)
Do While Not rstMitarbeiter.EOF
somevar = Nz(rstMitarbeiter.Fields("myfield"), 0)
someothervar = Nz(rstMitarbeiter.Fields("someotherfield"), 0)
rstMitarbeiter.MoveNext
Loop
rstMitarbeiter.Close
If Not rstMitarbeiter Is Nothing Then Set rstMitarbeiter = Nothing
dbsMitarbeiter.Close
If Not dbsMitarbeiter Is Nothing Then Set dbsMitarbeiter = Nothing
解决方案
推荐阅读
- python - keyerror:从 xlsx 导入后的“日期”
- oracle - 在 oracle 中使用 SELECT FOR UPDATE 进行并发编辑是否有替代方法
- python - Python列表索引整数或切片
- javascript - 在 JavaScript 对象(例如“__proto__”)上分配哪些键是不安全的?
- windows - 如何将文本插入预先存在的应用程序?
- r - 根据前一列的值替换多列中的值
- ansible - 使用多个嵌套主机变量时匹配单个自定义主机库存变量
- powershell - 用于将逗号分隔值转换为行并输出为新 CSV 文件的 Powershell 脚本
- ruby - 用于打印类中所有方法调用和返回的 Ruby 模块
- vb.net - VB.NET Linq 查询左外连接左为空