訪問前端,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.
直接編輯表格有效。
打開查詢并提供引數有效。
從應用程式仍然沒有。
UPDATE
洗掉了視圖,沒有影響。
舊版本現在出現同樣的故障,所以看起來不是代碼問題。
唯一的共同點是桌子,所以這可能是我在那里做的一個小改動。
我會檢查它是只是那個表還是整個資料庫。
但是我可以通過直接運行查詢來進行更改,但從代碼運行它會得到不同的結果,這似乎很奇怪。
更新 2 我認為這可能與整個資料庫以某種方式處于只讀狀態有關,而這只是它受到打擊的第一個地方。但不是。其他表格可以毫無問題地更新他們的表格。
所以它看起來與特定的表有關。但是我可以通過運行更新查詢來完美地更新,這似乎仍然很奇怪。
更新 3 為了使測驗更容易,我從主選單表單運行查詢,而不是遍歷所有表單以到達失敗的地方。
針對原始資料庫模式運行有效。再次進行相同的更改,用 VARCHAR(MAX) 替換 NTEXT,它仍然有效。
回到原來的表,仍然有效。
回傳所有表格,失敗。
所以問題似乎與打開的表單之一有關。
我會再次回到那個序列。
此外,這解釋了為什么它從查詢而不是從表單作業。
遺憾的是,我無法在表單打開時運行查詢。
uj5u.com熱心網友回復:
好的,第一個問題是為什么/如何為引數使用“Short”資料型別?
它應該是:
PARAMETERS ParamTransactionID Long, ParamVoidFlag Bit;
UPDATE tblTransaction
SET tblTransaction.VoidInProgressFlag = [ParamVoidFlag]
WHERE (tblTransaction.TransactionID=[ParamTransactionID]);
您還宣告此查詢在您從 UI 運行時有效。
所以,在代碼中,你有這個:
確保所有代碼模塊在開始時都具有顯式選項,如下所示:
Option Compare Database
Option Explicit
所以,你的代碼現在應該是:
Dim qdef as DAO.QueryDef
Set qdef = CurrentDb.QueryDefs("qUPD-tblTransaction_VoidInProgress")
qdef.Parameters![ParamVoidFlag] = VoidFlag
qdef.Parameters![ParamTransactionID] = TransactionID
qdef.Execute dbFailOnError dbSeeChanges
因此,請更正 ParmaVoidFlag 的資料型別。
另外,檢查左中殿窗格中的表名 - 是嗎
dbo_tblTransaction
或者
tblTransaction.
此外,在設計視圖中打開鏈接表 - (忽略只讀訊息)。查看資料型別。您必須定義一個 PK - 所以檢查一個 PK。
接下來,在 sql server 端,true/false 欄位不得具有默認值 null。如果他們這樣做,那么更新將失敗。因此,在 sql server 中,請確保有問題的表的默認設定為 0。
最后但并非最不重要的?如果查詢仍然出錯,則需要向 sql server 表添加時間戳(不是日期時間)并重新鏈接。如果任何列是浮點數,這將/是必需的。
在將選項顯式添加到代碼模塊的開頭后,然后也從選單中進行除錯-> 編譯 - 確保代碼編譯。
uj5u.com熱心網友回復:
事實證明,如果打開了一個特定的表單,查詢就會失敗。該表單查詢同一個表,但使用 Snapshot 而不是 Dynaset。我不知道為什么會鎖定桌子。它有一個合適的鍵和索引。但是Dynaset修復了它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374997.html
下一篇:hive日期函式
