Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 3
Регистрация: 17.11.2015
Сообщений: 395

обработчик исключения

29.05.2017, 06:52. Показов 1128. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу два обработчика на одну кнопу, с одним работает все хорошо, а вот с двумя всегда выдает ошибку. Может как-то не правильно записал.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if DM.tblOtvet.Modified then
  begin
     {Установка исключения на запись данных, сработает если нарушится уникальность добавляемых данных}
     try
       DM.tblOtvet.Post;
     except
       MessageBoxA(Handle, 'ФИО ответственного должен быть уникальными!', 'Ошибка записи', 0 + 64);
       DM.tblOtvetName_Responsible.AsString := '';
       DBEdit1.SetFocus;
       end;
  end
  else
     DM.tblOtvet.Cancel;
  close;
И

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 if DM.tblOtvet.Modified then
  begin
     {Установка исключения на запись данных, сработает если нарушится уникальность добавляемых данных}
     try
       DM.tblOtvet.Post;
     except
       MessageBoxA(Handle, 'Номер телефона должен быть уникальными!', 'Ошибка записи', 0 + 64);
       DM.tblOtvetPhone_Number.AsString := '';
       DBEdit2.SetFocus;
       Exit;
     end;
 end
  else
     DM.tblOtvet.Cancel;
  close;
Добавлено через 26 минут
Или как-то в одно все написать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2017, 06:52
Ответы с готовыми решениями:

Не работает обработчик исключения EConvertError ?
На форме есть Edit1, Edit2 и Button. Необходимо ввести в поля Edit данные и нажать на Button. Если хотя бы одно или оба поля Edit не...

Обработчик исключений обрабатывает не все исключения
здравствуйте Необходимо создать три массива a, b и с размерами соответственно n1, n2 и n3. В массив а занести значения функции f(x)=...

Как поставить один обработчик на все исключения
Внутри приложения множество методов, которые используют подключение к веб-серверу. Создал обработку ошибки подключения в Programm.cs. ...

6
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
29.05.2017, 07:23
Лучший ответ Сообщение было отмечено Александр9797 как решение

Решение

Цитата Сообщение от Александр9797 Посмотреть сообщение
Пишу два обработчика на одну кнопу
и как это делаете? Один на нажатие кнопки, а другой на отжатие?
Пишите заголовок процедур, хоть какая-то информация будет.

независимо от причины нарушения уникальности (ФИО или телефона) вызов Post её вызовет и будет срабатывать всегда один и тот же обработчик и сообщение будет одно и то же, независимо из-за ФИО или телефона произошла ошибка.

Если вы хотите на ошибках Post выдавать разные сообщения, то в except секции должны определиться какая именно ошибка вас сюда выкинула и обеспечить разную реакцию на разные ошибки.
1
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,151
Записей в блоге: 3
29.05.2017, 07:29
а может уникальность задавать уникальным столбцом в БД?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
29.05.2017, 07:36
qwertehok, она там и задана. Но таких полей в таблице два. И ТС хочет по-русски ругаться по разному, в зависимости от того, где уникальность нарушена.

Добавлено через 2 минуты
Александр9797, а если полные тезки? А если телефона нет?
0
 Аватар для Cold
87 / 87 / 65
Регистрация: 22.05.2014
Сообщений: 485
29.05.2017, 12:17
Цитата Сообщение от Александр9797 Посмотреть сообщение
DBEdit2.SetFocus;
* * * *Exit;
*Exit убери...
0
2 / 2 / 3
Регистрация: 17.11.2015
Сообщений: 395
29.05.2017, 12:29  [ТС]
Что здесь не так?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
procedure TForm_Otvet_dob.Button1Click(Sender: TObject);
begin
if length(DBEdit1.Text) = 0 then
  begin
    MessageBoxA(Handle, 'Необходимо ввести ФИО ответственного', 'Сообщение', 0 + 64);
     DBEdit1.SetFocus;
    Exit;
  end;
 
 
if length(DBEdit2.Text) = 0 then
  begin
    MessageBoxA(Handle, 'Необходимо ввести номер телефона:', 'Сообщение', 0 + 64);
     DBEdit2.SetFocus;
    Exit;
  end;
 
 
  if DM.tblOtvet.Modified then
  begin
     {Установка исключения на запись данных, сработает если нарушится уникальность добавляемых данных}
     try
       DM.tblOtvet.Post;
     except
       MessageBoxA(Handle, 'ФИО ответственного должен быть уникальными!', 'Ошибка записи', 0 + 64);
       DM.tblOtvetName_Responsible.AsString := '';
       DBEdit1.SetFocus;
      Exit;
        end
  else
     DM.tblOtvet.Cancel;
  close;
     end;
 
 
     if DM.tblOtvet.Modified then
  begin
     {Установка исключения на запись данных, сработает если нарушится уникальность добавляемых данных}
     try
       DM.tblOtvet.Post;
     except
       MessageBoxA(Handle, 'Номер телефона должен быть уникальными!', 'Ошибка записи', 0 + 64);
       DM.tblOtvetPhone_Number.AsString := '';
       DBEdit2.SetFocus;
       Exit;
     end;
    end
  else
     DM.tblOtvet.Cancel;
  close;
  end;
 
end;
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
29.05.2017, 15:09
Лучший ответ Сообщение было отмечено Александр9797 как решение

Решение

код, начиная с 36 строки никогда не выполнится, ибо предыдущий кусок кода выполнит либо close либо Exit. Я об этом предупреждал ещё в #2.

else
DM.tblOtvet.Cancel;
тоже ни к чему, т.к. и так в этом случае DM.tblOtvet.Modified = false
Цитата Сообщение от Александр9797 Посмотреть сообщение
Что здесь не так?
вам лучше знать, у вас есть весь проект и вы можете пройти по коду отладчиком, если по-вашему он ведет себя не так
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2017, 15:09
Помогаю со студенческими работами здесь

Организация собственного исключения и передача в него исходного исключения
Для обработки исключений при работе с БД я создал собственное исключение: public class SQLEntityException : ApplicationException ...

Отцепить обработчик, выполнить свой код, вернуть обработчик
Подскажите, возможно ли такое в JS? Практическая ситуация такая: хочу написать свой скрипт для Оперы и установить его, как...

Почему когда я вешаю обработчик события на ячейку и этот обработчик срабатывает, то оказывается, он сработал совершенно для ДРУГОЙ ячейки?
Да, почему? Скропаем DataGridView; кинем на форму listBox2 и listBox1 и напишем такой обработчик для события EditingControlShowing...

Глобальный обработчик ошибок. Если отключить обработчик ошибок в одной из процедур, будет ли он работать в других?
Есть какой то код Sub main On error goto ErrorLine 'тут какой-то код call fng_1 'тут вызывается новая процедура 'тут какой-то...

Обработчик нажатия на обработчик наведения
Всем привет! В приложении файл с кодом для хитрого выпадающего меню. Подскажите как мне сделать, чтобы это меню открывалось при наведении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru