Добрый день.
Использую Firebird 2.1
Программа на Delphi7 взаимодействует с сервером БД через компоненты FIBPlus.
Для обработки данных используются процедуры. В процессе обработки при не выполнении условий в тексте процедур может вызываться
EXCEPTION My_Exception 'Описание ошибки'.
Работает несколько пользователей. В процессе работы при попытки изменить 2-мя пользователями одни и теже данные выдается ошибка "... Lock conflict on no wait transaction". После этого события, вместо внятных текстов ошибок из процедур Всегда выдается это сообщение. После перезахода в программу все опять работает правильно.
В чем может быть проблема?
Спасибо.
Всегда одинаковый текст Exception
Re: Всегда одинаковый текст Exception
проблема в том, что в приложении не обрабатываются конфликты обновления одних и тех же данных разными людьми.
То есть, если попытаться сделать update одной и той же записи из двух IBExpert, Вы получите именно это сообщение. Разные сообщения тут, как бы, не предусмотрены.
То есть, если попытаться сделать update одной и той же записи из двух IBExpert, Вы получите именно это сообщение. Разные сообщения тут, как бы, не предусмотрены.
Re: Всегда одинаковый текст Exception
Попытаюсь объяснить на примере:
Операторы вводят или изменяют данные. В процедуре на сервере выполняется проверка правильности введенных ими данных.Если данные не соответствуют, то в процедуре вызывается EXCEPTION My_Exception 'Вы не можете вносить данные по данной тематике' (и т.п. несколько проверок -несколько исключений). Текст данного исключения отображается у пользователя.
Два оператора пытаются одновременно изменить данные по одной строке, а результате 1 одного изменения проходят у второго выдается ошибка "... Lock conflict ...". Данная ошибка отображается у оператора на экране.
Далее операторы вводят данные дальше. У первого оператора все хорошо, и если проверка в процедуре не проходит, то тексты ошибок выдаются как и должны (Например 'Вы не можете вносить данные по данной тематике' ). У второго же оператора если он ввел данные без ошибок, то данные нормально сохраняются, если же он ввел с ошибками, то вместо нужного текста ошибки (Например 'Вы не можете вносить данные по данной тематике' ) всегда выдается текст "... Lock conflict ...". Причем уже зная об этой проблеме оператор может визуально перепроверить данные, внести исправления и тогда данные нормально сохранятся. если оператор перезапустит систему (вероятно реконнектится к базе) тогда ошибки начнут отображаться опять корректно.
Складывается впечатление, что ошибки пишутся в какую-то очередь и потом при считывании они оттуда не удаляются. Т.о. генерируется ошибка, а текст берется всегда от первой "... Lock conflict ...".
Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть, или в чем может быть проблема, если такой очереди нет. Ситуация повторяется стабильно. Ее легко повторить. Если есть дополнительные вопросы что и где посмотреть - напишите. Постараюсь ответить.
Спасибо.
Операторы вводят или изменяют данные. В процедуре на сервере выполняется проверка правильности введенных ими данных.Если данные не соответствуют, то в процедуре вызывается EXCEPTION My_Exception 'Вы не можете вносить данные по данной тематике' (и т.п. несколько проверок -несколько исключений). Текст данного исключения отображается у пользователя.
Два оператора пытаются одновременно изменить данные по одной строке, а результате 1 одного изменения проходят у второго выдается ошибка "... Lock conflict ...". Данная ошибка отображается у оператора на экране.
Далее операторы вводят данные дальше. У первого оператора все хорошо, и если проверка в процедуре не проходит, то тексты ошибок выдаются как и должны (Например 'Вы не можете вносить данные по данной тематике' ). У второго же оператора если он ввел данные без ошибок, то данные нормально сохраняются, если же он ввел с ошибками, то вместо нужного текста ошибки (Например 'Вы не можете вносить данные по данной тематике' ) всегда выдается текст "... Lock conflict ...". Причем уже зная об этой проблеме оператор может визуально перепроверить данные, внести исправления и тогда данные нормально сохранятся. если оператор перезапустит систему (вероятно реконнектится к базе) тогда ошибки начнут отображаться опять корректно.
Складывается впечатление, что ошибки пишутся в какую-то очередь и потом при считывании они оттуда не удаляются. Т.о. генерируется ошибка, а текст берется всегда от первой "... Lock conflict ...".
Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть, или в чем может быть проблема, если такой очереди нет. Ситуация повторяется стабильно. Ее легко повторить. Если есть дополнительные вопросы что и где посмотреть - напишите. Постараюсь ответить.
Спасибо.
Re: Всегда одинаковый текст Exception
Нет.Zoran писал(а):Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть
В приложении.Zoran писал(а):в чем может быть проблема, если такой очереди нет.
Повтори её с isql - будем смотретьZoran писал(а):Ситуация повторяется стабильно. Ее легко повторить.
Re: Всегда одинаковый текст Exception
ДА. где проблема, скажите мне. Или Вы считаете,что одну запись надо разрешать обновлять одновременно хоть 100 пользователям?Два оператора пытаются одновременно изменить данные по одной строке, а результате 1 одного изменения проходят у второго выдается ошибка "... Lock conflict ...". Данная ошибка отображается у оператора на экране.
Вы меня извините, но это смешно - не обрабатываемая программистом ошибка приводит к дальнейшим ошибкам в программе. Кто виноват? Firebird? Ну да, конечно...
Re: Всегда одинаковый текст Exception
Извините, но у вас не хватает терпения дочитать пост до конца или желание ответить преобладает над желанием дочитать? В данном случае я описывал логику работы и не говорил, что у меня есть к ней претензии.kdv писал(а):ДА. где проблема, скажите мне. Или Вы считаете,что одну запись надо разрешать обновлять одновременно хоть 100 пользователям?Два оператора пытаются одновременно изменить данные по одной строке, а результате 1 одного изменения проходят у второго выдается ошибка "... Lock conflict ...". Данная ошибка отображается у оператора на экране.
Вы меня извините, но это смешно - не обрабатываемая программистом ошибка приводит к дальнейшим ошибкам в программе. Кто виноват? Firebird? Ну да, конечно...
Вопрос был в другой:
Zoran писал(а): ...
Складывается впечатление, что ошибки пишутся в какую-то очередь и потом при считывании они оттуда не удаляются. Т.о. генерируется ошибка, а текст берется всегда от первой "... Lock conflict ...".
Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть, или в чем может быть проблема, если такой очереди нет. Ситуация повторяется стабильно. Ее легко повторить. Если есть дополнительные вопросы что и где посмотреть - напишите. Постараюсь ответить.
Спасибо.
Спасибо за ответ. Попробую повторить с isql.hvlad писал(а):Нет.Zoran писал(а):Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если естьВ приложении.Zoran писал(а):в чем может быть проблема, если такой очереди нет.Повтори её с isql - будем смотретьZoran писал(а):Ситуация повторяется стабильно. Ее легко повторить.