Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2010, 14:13   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию обработка исключений sql

в моей базе данных есть уникальный ключ, который не позволяет добавлять в бд повотряющиеся значения. на форме есть грид, при добавлении значения (если оно повторяется) появляется sql ошибка о том, что добавить в бд нельзя, потому что поле уникально и тд. как обработать такую ошибку?
kate158 вне форума Ответить с цитированием
Старый 06.07.2010, 14:27   #2
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Вы можете в ХП сделать проверку на существование записи и из бд вывести ошибку о не допустимости записи из-за ее дубля.
Обработать ошибку можно по разному, главное что именно хочешь получить в конечном итоге.
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 06.07.2010, 14:28   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как добавляешь?
Методами компонентов или SQL командой?

Или имеется ввиду что в ДБГриде просто переходишь на новую запись и оно падает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.07.2010, 14:40   #4
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

добавляю с использованием дбнавигатора!

вот код
Код:
procedure TMainForm.gLegacyEnter(Sender: TObject);
begin
  try
  CheckLegInfTable;
  except on e:exception do
  begin
    if  e.HelpContext = 5003022 then
      ShowMessage('Вы пытаетесь добавить дублирующую запись!');
  end;
 end;
end;

--

procedure TMainForm.CheckLegInfTable;
begin
    if DataMod.qLegacy.State in [dsEdit, dsInsert] then
    begin
      if Application.MessageBox('Сохранить изменения в таблице?', PNAME, MB_YESNO +
        MB_ICONQUESTION) = IDYES
        then
        DataMod.qLegacy.Post
      else
        DataMod.qLegacy.Cancel;
    end;

Последний раз редактировалось kate158; 06.07.2010 в 14:42.
kate158 вне форума Ответить с цитированием
Старый 06.07.2010, 14:47   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
kate158
Хм... Я бы тебе не советовал пользовать этими компонентами.
Самое надежное написать SQL-INSERT и им вносить записи естесственно без ключевого поля (я так понимаю оно же автоинкрементно?)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.07.2010, 14:55   #6
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

я хочу сделать с навигатором.
поле не автоинкрементно.
это ключ, который наследуется из родительской таблицы.

пользователь выбирает устройство (ключ наследуется в Legacy) и добавляет в таблицу Legacy количество устройств. в таблице Legacy не должно быть повторяющихся устройств.

Последний раз редактировалось kate158; 06.07.2010 в 14:59.
kate158 вне форума Ответить с цитированием
Старый 06.07.2010, 15:39   #7
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Тогда исключайте возможность выбора устройства, если его уже ввели
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключений _-Re@l-_ Общие вопросы Delphi 3 17.06.2010 08:53
обработка исключений scray PHP 3 15.05.2010 15:02
Обработка исключений try... except Kati Помощь студентам 5 07.03.2010 10:18
mysql_connect - обработка исключений crazy horse PHP 15 10.02.2009 13:52
Обработка исключений ввода в TMaskedEdit joker Общие вопросы Delphi 8 11.06.2008 15:02