2012-01-30 55 views
4

正在使用開發應用的Delphi 7的SQL Server Express 2008 R2,我用BDE通過ODBC連接SQL Server和SQL Native Client的被用於驅動程序。記錄已被更改由其他用戶時嘗試發佈或編輯

在某些特定形式的表組件加薪EDBEngineError「記錄已被其他用戶更改」,我只是嘗試添加數據,同樣的問題發生時table.canceltable.posttable.edit .....

幾天前我更改驅動程序從SQL ServerSql本機客戶端因爲SQL服務器有問題,「連接有另一個hstmt結果集」,所以我改變它爲SQL本機客戶端,形式這我遇到這個'記錄已被antoher用戶更改'錯誤。

請任何一個可以幫助

+2

您使用的是交易嗎? – ComputerSaysNo 2012-01-30 13:00:23

+0

您需要找到一種方法來查看生成的SQL以查找根本原因,我建議您使用「使用調試DCU」進行編譯並進入BDE源代碼,直到您可以看到生成的SQL字符串。最近我用dbExpress解決了類似的問題。 – mjn 2012-01-30 15:23:03

回答

5
  1. BDE不更新很長一段時間。並且SQL Native Client正在定期更新。可能你遇到了BDE和SQLNC 10.5版的不兼容問題。
  2. 「記錄已被其他用戶更改」表示該API返回了更新記錄的1個<,例如0條記錄。在大多數情況下,某些用戶更改記錄並不是真的。已更新的記錄數作爲單獨的消息返回,因此如果連接忙於其他消息,則它可能會返回0.如果您的表具有觸發器,則嘗試在觸發器頂部添加SET NOCOUNT ON
  3. 「連接忙於另一個hstmt的結果集」表示您沒有從活動結果集中提取所有記錄。您可以嘗試獲取所有記錄。
  4. 要避免所有這些錯誤,請考慮遷移到dbExpress或3d聚會庫,如AnyDAC

除第(2): 等經典理由 「記錄已被其他用戶更改」。 WHERE短語包含一個字段和一個相應的參數,它們與精度不匹配(例如,在客戶端丟失精度),具有不同的格式(例如,不兼容的字符集)等。您必須檢查SQL命令和參數使用SQL Profiler發送到SQL Server的值。

+0

的dbExpress仍然有它的問題,這可能會導致同樣的錯誤 - 例如缺乏支持毫秒(與IB的) – mjn 2012-01-30 15:23:49

+0

感謝您的回覆,, befor,我想說一件事,, – bejarun 2012-01-31 06:45:23

+0

感謝您的回覆,,首先我開發了使用「悖論」 DB這個應用程序,之後是遷移到SQL Server,等我有數據模塊100個表格組件,因此它是不容易把所有它換到其它3部分補償,創建OBDC數據源,並通過連接BDE ,,並且這個記錄被另一個用戶鎖定的錯誤只會在temperary表中出現(表名以'#'開頭),我也嘗試過使用sqlserver驅動程序,我無法找到哪個查詢是部分提取的數據,所以我轉換到sqlnative客戶端後,我改變了這一切「的hstmt錯誤水漲船高」,但記錄鎖定錯誤來,, – bejarun 2012-01-31 06:52:14

0

我的朋友,你應該考慮更新你的開發工具。 對於這個問題,你應該真的與德爾福的ZEOS組件包一起工作。 它可以連接到多種數據庫,包括Firebird,MySQL,Access和SQL Server。 所有你需要做的就是把你正在使用的數據庫的dll放在你的項目目錄和delphi的bin direcoty中(如果目標計算機沒有數據庫管理器)。然後你讓數據庫服務器負責處理事務。 如果你需要更多的細節,只需給我一個信號。

相關問題