Запись была изменена другим пользователем при попытке опубликовать или изменить - PullRequest
4 голосов
/ 30 января 2012

Разрабатываю приложение, используя Delphi 7 и Sql Server Express 2008 R2 , использую BDE для подключения Sql Server через ODBC, и используется Собственный клиент SQL для водителя.

В некоторых конкретных формах повышение компонента таблицы EDBEngineError 'Запись была изменена другим пользователем', я просто пытаюсь добавить данные, такая же проблема возникает, когда table.cancel, table.post, table.edit .. ...

За несколько дней до того, как я сменил драйвер с SQL Server на Sql Native Client из-за того, что у сервера sql возникла проблема с «у соединения есть набор результатов для другого hstmt», так что я изменил это для собственного клиента SQL, из этого я встретил эту ошибку «Запись была изменена другим пользователем».

Пожалуйста, помогите

Ответы [ 2 ]

5 голосов
/ 30 января 2012
  1. BDE долгое время не обновлялся.И SQL Native Client регулярно обновляется.Возможно, вы столкнулись с несовместимостью BDE и SQLNC v 10.5.
  2. «Запись была изменена другим пользователем» означает, что API вернул <> 1 обновленных записей, например 0 записей.В большинстве случаев это не совсем так, что какой-то пользователь изменил запись.Количество обновленных записей возвращается в виде отдельного сообщения, поэтому, если соединение занято другими сообщениями, оно может вернуть 0. Если в ваших таблицах есть триггеры, попробуйте добавить SET NOCOUNT ON поверх триггера.
  3. «Соединение занято с набором результатов для другого hstmt» означает, что вы не выбрали все записи из активного набора результатов.Вы можете попробовать извлечь все записи.
  4. Чтобы избежать всех этих ошибок, рассмотрите возможность перехода на dbExpress или стороннюю библиотеку, такую ​​как AnyDAC .

Дополнение к (2): Другая классическая причина «Запись была изменена другим пользователем».Фраза WHERE включает поле и соответствующий параметр, которые не совпадают по точности (например, точность теряется на стороне клиента), имеют разные форматы (например, несовместимые наборы символов) и т. Д. Необходимо проверить команду SQLи значения параметров, отправленные на SQL Server с использованием SQL Profiler.

0 голосов
/ 16 июля 2012

Мой друг, тебе стоит подумать об обновлении инструментов разработки.Для этой проблемы вы должны по-настоящему работать с ZEOS Component Pack для Delphi.Он может подключаться ко многим видам баз данных, включая Firebird, MySQL, Access и SQL Server.Все, что вам нужно сделать, это поместить dll базы данных, которую вы используете, в каталог вашего проекта и bin директорию delphi (если на целевом компьютере нет менеджера баз данных).Затем вы позволяете серверу базы данных позаботиться о транзакциях.Если вам нужно больше деталей, просто дайте мне сигнал.

...