Показать сообщение отдельно
  #6  
Старый 20.08.2011, 00:09
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

проблема известная.
Действительно при неверном вводе номер, выделенный триггером, пропадает и в нумерации появляются пропуски (после накладной № 100 следующая накладная имеет №102.) Это происходит потому что генератор работает вне транзакции и поэтому назад не откатывается.
Объясни своим юзерам что так работает абсолютно любая БД. Это вопрос безопасности. Первичный ключ никогда не должен повторяться.

Но проблему можно решить.
1 способ. Анализируешь введенные данные и записываешь в БД только если они корректны. Поскольку здесь нельзя переводить БД в состояние INSERT то нельзя использовать компоненты связанные с БД (Вместо DBEdit надо использовать Edit и тд)
2 способ. Делаешь в БД процедуру которая возвращает максимальный номер, например SELECT MAX(Num_Nakladn) FROM Table_Nakladn
далее программно его инкрементируешь и записываешь всю строку в БД
Но при многопользовательской работе могут быть проблемы
3. Можно еще заняться извращениями и программно изменять значение генератора, но проблем будет еще больше.
Ответить с цитированием