Всегда одинаковый текст Exception

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Zoran
Сообщения: 37
Зарегистрирован: 27 авг 2008, 12:08

Всегда одинаковый текст Exception

Сообщение Zoran » 27 окт 2010, 14:59

Добрый день.

Использую Firebird 2.1
Программа на Delphi7 взаимодействует с сервером БД через компоненты FIBPlus.

Для обработки данных используются процедуры. В процессе обработки при не выполнении условий в тексте процедур может вызываться
EXCEPTION My_Exception 'Описание ошибки'.

Работает несколько пользователей. В процессе работы при попытки изменить 2-мя пользователями одни и теже данные выдается ошибка "... Lock conflict on no wait transaction". После этого события, вместо внятных текстов ошибок из процедур Всегда выдается это сообщение. После перезахода в программу все опять работает правильно.

В чем может быть проблема?
Спасибо.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Всегда одинаковый текст Exception

Сообщение kdv » 27 окт 2010, 18:47

проблема в том, что в приложении не обрабатываются конфликты обновления одних и тех же данных разными людьми.

То есть, если попытаться сделать update одной и той же записи из двух IBExpert, Вы получите именно это сообщение. Разные сообщения тут, как бы, не предусмотрены.

Zoran
Сообщения: 37
Зарегистрирован: 27 авг 2008, 12:08

Re: Всегда одинаковый текст Exception

Сообщение Zoran » 28 окт 2010, 14:22

Попытаюсь объяснить на примере:

Операторы вводят или изменяют данные. В процедуре на сервере выполняется проверка правильности введенных ими данных.Если данные не соответствуют, то в процедуре вызывается EXCEPTION My_Exception 'Вы не можете вносить данные по данной тематике' (и т.п. несколько проверок -несколько исключений). Текст данного исключения отображается у пользователя.
Два оператора пытаются одновременно изменить данные по одной строке, а результате 1 одного изменения проходят у второго выдается ошибка "... Lock conflict ...". Данная ошибка отображается у оператора на экране.
Далее операторы вводят данные дальше. У первого оператора все хорошо, и если проверка в процедуре не проходит, то тексты ошибок выдаются как и должны (Например 'Вы не можете вносить данные по данной тематике' ). У второго же оператора если он ввел данные без ошибок, то данные нормально сохраняются, если же он ввел с ошибками, то вместо нужного текста ошибки (Например 'Вы не можете вносить данные по данной тематике' ) всегда выдается текст "... Lock conflict ...". Причем уже зная об этой проблеме оператор может визуально перепроверить данные, внести исправления и тогда данные нормально сохранятся. если оператор перезапустит систему (вероятно реконнектится к базе) тогда ошибки начнут отображаться опять корректно.

Складывается впечатление, что ошибки пишутся в какую-то очередь и потом при считывании они оттуда не удаляются. Т.о. генерируется ошибка, а текст берется всегда от первой "... Lock conflict ...".

Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть, или в чем может быть проблема, если такой очереди нет. Ситуация повторяется стабильно. Ее легко повторить. Если есть дополнительные вопросы что и где посмотреть - напишите. Постараюсь ответить.

Спасибо.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Всегда одинаковый текст Exception

Сообщение hvlad » 28 окт 2010, 14:47

Zoran писал(а):Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть
Нет.
Zoran писал(а):в чем может быть проблема, если такой очереди нет.
В приложении.
Zoran писал(а):Ситуация повторяется стабильно. Ее легко повторить.
Повтори её с isql - будем смотреть

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Всегда одинаковый текст Exception

Сообщение kdv » 29 окт 2010, 03:07

Два оператора пытаются одновременно изменить данные по одной строке, а результате 1 одного изменения проходят у второго выдается ошибка "... Lock conflict ...". Данная ошибка отображается у оператора на экране.
ДА. где проблема, скажите мне. Или Вы считаете,что одну запись надо разрешать обновлять одновременно хоть 100 пользователям?
Вы меня извините, но это смешно - не обрабатываемая программистом ошибка приводит к дальнейшим ошибкам в программе. Кто виноват? Firebird? Ну да, конечно...

Zoran
Сообщения: 37
Зарегистрирован: 27 авг 2008, 12:08

Re: Всегда одинаковый текст Exception

Сообщение Zoran » 01 ноя 2010, 14:56

kdv писал(а):
Два оператора пытаются одновременно изменить данные по одной строке, а результате 1 одного изменения проходят у второго выдается ошибка "... Lock conflict ...". Данная ошибка отображается у оператора на экране.
ДА. где проблема, скажите мне. Или Вы считаете,что одну запись надо разрешать обновлять одновременно хоть 100 пользователям?
Вы меня извините, но это смешно - не обрабатываемая программистом ошибка приводит к дальнейшим ошибкам в программе. Кто виноват? Firebird? Ну да, конечно...
Извините, но у вас не хватает терпения дочитать пост до конца или желание ответить преобладает над желанием дочитать? В данном случае я описывал логику работы и не говорил, что у меня есть к ней претензии.

Вопрос был в другой:
Zoran писал(а): ...
Складывается впечатление, что ошибки пишутся в какую-то очередь и потом при считывании они оттуда не удаляются. Т.о. генерируется ошибка, а текст берется всегда от первой "... Lock conflict ...".

Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть, или в чем может быть проблема, если такой очереди нет. Ситуация повторяется стабильно. Ее легко повторить. Если есть дополнительные вопросы что и где посмотреть - напишите. Постараюсь ответить.

Спасибо.
hvlad писал(а):
Zoran писал(а):Вот и вопрос, нет ли такого очереди на FB, и как ее очищать если есть
Нет.
Zoran писал(а):в чем может быть проблема, если такой очереди нет.
В приложении.
Zoran писал(а):Ситуация повторяется стабильно. Ее легко повторить.
Повтори её с isql - будем смотреть
Спасибо за ответ. Попробую повторить с isql.

Ответить