【发布时间】:2021-11-19 00:17:34
【问题描述】:
访问前端,SQL Server 后端。
简单的更新查询
PARAMETERS ParamTransactionID Long, ParamVoidFlag Short;
UPDATE tblTransaction
SET tblTransaction.VoidInProgressFlag = [ParamVoidFlag]
WHERE (tblTransaction.TransactionID=[ParamTransactionID]);
在此处使用查询
Set qdef = CurrentDb.QueryDefs("qUPD-tblTransaction_VoidInProgress")
qdef.Parameters![ParamVoidFlag] = VoidFlag
qdef.Parameters![ParamTransactionID] = TransactionID
qdef.Execute dbFailOnError + dbSeeChanges
qdef.Close
给予
[Microsoft][ODBC SQL Server Driver]Query timeout expired
ODBC--update on a linked table 'tblTransaction' failed.
直接编辑表格即可。
打开查询并提供参数有效。
从应用程序仍然没有。
更新
删除了视图,没有影响。
旧版本现在出现同样的故障,所以看起来这不是代码问题。
唯一的共同点是桌子,所以这可能是我在那里做的一个小改动。
我会检查一下它是只是那个表还是整个数据库。
但是我可以通过直接运行查询来进行更改,但从代码运行它会得到不同的结果,这似乎很奇怪。
更新 2
我认为这可能与整个数据库以某种方式处于只读状态有关,而这只是它受到打击的第一个地方。但不是。其他表单可以毫无问题地更新其表。
所以它看起来与特定的表有关。但是我仍然可以通过运行更新查询来完美地更新,这似乎仍然很奇怪。
更新 3
为了使测试更容易,我从主菜单表单运行查询,而不是遍历所有表单以到达失败点。
针对原始数据库模式运行有效。再次进行相同的更改,将 NTEXT 替换为 VARCHAR(MAX),它仍然有效。
回到原来的表,仍然有效。
返回所有表格,失败。
所以问题似乎与打开的一种形式有关。
我将再次回到那个序列。
此外,这也解释了为什么它可以通过查询而不是表单起作用。
遗憾的是,当表单打开时,我无法运行查询。
【问题讨论】:
-
我对 SQLServer 没有太多经验。我有 SQLServer Express 只是为了看看我是否可以让它工作。确实如此。我不使用 QueryDefs 来更新表。只是一个查询对象或在 VBA CurrentDb.Execute 中。
-
它正在使用 SELECT 并更新结果。当我添加视图时,它停止工作。我将其切换到当前的 UPDATE 语句。还是不行。今晚我会尝试删除视图,看看是否有任何改变。
-
有没有可能
VoidInProgressFlag可能有检查约束,而你通过VoidFlag传入的值不符合要求? -
不应将参数命名为字段名称 (TransactionID)。
-
@Gustav 已修复。
标签: sql-server ms-access odbc