Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 301
1

Как правильно обработать ошибку?

23.12.2017, 16:00. Показов 816. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здравствуйте, есть такая проблема.
есть три таблицы и одним кликам делается запрос, проблема в том что не знаю как обработать ошибку
если один из трёх таблиц выдает ошибку при выполнение кода.
вопрос в том что как обработать ошибку, если хотя бы один запрос не выпальница не должна выполняться не адна.
вот допустим пример:


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
with Query1 do                          
    begin
 
 Active:=false;
    SQL.Clear;
    SQL.Add('');
     ExecSQL;
 
  Active:=false;
    SQL.Clear;
    SQL.Add('');
     ExecSQL;
 
  Active:=false;
    SQL.Clear;
    SQL.Add('');
     ExecSQL;
 
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2017, 16:00
Ответы с готовыми решениями:

Как обработать ошибку ввода в маску
Создал у ADOQuery: tblCabinet, полю: Room_Cabinet маску т.е. EditMask:=000l;1;_ Когда ввожу в...

обработать ошибку
Всем привет!!!!!!!!! скажите пожалуйста,предположим я пишу программу для вычесления...

Как правильно обработать ошибку urlib2 (urlopen)
При парсинге постоянно возникают ошибки urlib2, вот такие например 'urllib2.HTTPError: HTTP Error...

Как правильно обработать ошибку соединения _ConnectionPtr Open
hr = pConnection->Open("Server=strconn, "", "", adConnectUnspecified); Знаю, что ошибка здесь,...

13
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
23.12.2017, 17:45 2
вообще обработка ошибок это целая глава в любом учебнике, так что рекомендую прочитать

и второе - о каких ошибках идет речь?
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 301
23.12.2017, 18:27  [ТС] 3
Цитата Сообщение от qwertehok Посмотреть сообщение
и второе - о каких ошибках идет речь?
ну вдруг мало ли что
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
23.12.2017, 18:32 4
ну тогда

читай и пробуй
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 301
23.12.2017, 18:33  [ТС] 5
ато если первый второй запрос исполнится а третьи нет то это очень плохо отразится на программу

Добавлено через 34 секунды
Цитата Сообщение от qwertehok Посмотреть сообщение
читай и пробуй
ok
спасиба
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
24.12.2017, 07:09 6
мало того, если произойдет ошибка и возникнет Exception, программа и так не выполнит нижние строки, а сразу пойдет на выход из текущей процедуры
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 301
26.12.2017, 23:15  [ТС] 7
Цитата Сообщение от krapotkin Посмотреть сообщение
и так не выполнит нижние строки
эта знаю это не проблема,
проблема в том что если верхние выполнится а послед нет эта очень плохо отразится на результат на всё

Добавлено через 5 минут
я ищу думаю не знаю как с такой проблемы боротся
или все или не одна

Добавлено через 5 минут
а подождите ка а если вот так сделать
SQL
1
2
3
4
5
6
7
8
9
WITH Query1 do                          
    BEGIN
 Active:=FALSE;
    SQL.Clear;
    SQL.Add('');
    SQL.Add('');
    SQL.Add('');
 ExecSQL;
END;
щас пришла эта мысль
вот так или все выполняется или не одна и прав ?

Добавлено через 3 минуты
толка там и insert и update
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
27.12.2017, 01:45 8
Цитата Сообщение от kobakoba7 Посмотреть сообщение
вот так или все выполняется или не одна и прав ?
нет, не прав

если будет ошибка в запросе, один запрос выдаст ошибку, но не остановится - пойдет выполнять дальше
0
222 / 66 / 33
Регистрация: 23.05.2014
Сообщений: 715
27.12.2017, 08:37 9
Интересно, конечно. А если попробовать блок try.. except?
Delphi
1
2
3
4
try
ExecSQL;
except
raise exception.create('выполнение с ошибкой');
Тогда может следующий запрос выполняться и не будет?

Добавлено через 1 час 20 минут
А еще лучше будет совместить конструкции BeginTrans (BeforeStartTransaction для FireDAC) и RollbackTrans (Rollback для FireDAC) Например:
Delphi
1
2
3
4
5
6
7
8
adoconnection1.BeginTrans;
try
Query.execSql;
except
ShowMessage('Ай-ай-ай');
Adoconnection1.RollbackTrans;
query.cancelUpdates;
end;
Но тут еще надо не забыть:
1.Разделить запросы. Т.е. для каждого запроса свой ExecSQL.
2. Отловить момент, на каком этапе у вас вылетает исключение и создать условия для отката/останова выполнения процедуры. Для первого запроса - просто выход из процедуры. Для второго - откат изменений для выполненного первого запроса + выход, для третьего - соответственно откат выполненных предыдущих запросов. Ну как-то так.
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
27.12.2017, 13:28 10
Цитата Сообщение от drvolodko Посмотреть сообщение
Интересно, конечно. А если попробовать блок try.. except?
а мне кажется (ИМХО) что лучше ошибки SQL обрабатывать в SQL
написать весь код в SQL, обрабатывать ошибки, извне только принимать параметры, наружу выдавать результат
0
222 / 66 / 33
Регистрация: 23.05.2014
Сообщений: 715
27.12.2017, 15:00 11
Цитата Сообщение от qwertehok Посмотреть сообщение
а мне кажется (ИМХО) что лучше ошибки SQL обрабатывать в SQL
А еще лучше писать запросы без ошибок и не ловить ошибки и исключения
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
27.12.2017, 15:26 12
А можно просто собрать все три запроса в один.
Если это MSSQL то и обработку исключений можно сделать непосредственно внутри запроса.
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 301
27.12.2017, 18:19  [ТС] 13
drvolodko, такой вариант умения паследни, если ничего не получится по другому.
всекции except напишу запрос на откат
но только без этих (BeginTrans, RollbackTrans,cancelUpdates) потому что их смысл не понимаю,
как простым запросам делаю insert и update и аткат тоже так сделаю.но это тогда когда другого выхода не будет.
qwertehok,
Цитата Сообщение от qwertehok Посмотреть сообщение
а мне кажется (ИМХО) что лучше ошибки SQL обрабатывать в SQL
пожалуйста я не против но хотя бы маленький пример
Цитата Сообщение от qwertehok Посмотреть сообщение
написать весь код в SQL, обрабатывать ошибки, извне только принимать параметры, наружу выдавать результат
вот так что была буду благодарен.
по моему вы про хранимые процедуры говорите.
и ошибку phpmyadmin лучше меня абработает канешна.
MyEternity,
Цитата Сообщение от MyEternity Посмотреть сообщение
Если это MSSQL то и обработку исключений можно сделать непосредственно внутри запроса.
нет это mySQL
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
27.12.2017, 18:58 14
Цитата Сообщение от kobakoba7 Посмотреть сообщение
и ошибку phpmyadmin лучше меня абработает канешна.
при чем тут phpMyadmin?
это внешняя смотрелка, она ошибки не обрабатывает

Цитата Сообщение от kobakoba7 Посмотреть сообщение
пожалуйста я не против но хотя бы маленький пример
вам пример лучше подсмотреть в ветке по MySQL
0
27.12.2017, 18:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2017, 18:58
Помогаю со студенческими работами здесь

Как обработать ошибку
В общем если пользователь вводит не верный ник, Api возвращает. { "error": "Player Not...

Как правильно обработать исключение ?
В событии FormCreate читаем путь к директории из ini-файла , и когда там путь к дисководу , а...

Как правильно обработать столкновения?
Во время каждой итерации игрового цикла у меня происходит проверка всех пар объектов на коллизию....

Как правильно обработать сообщение?
не получается получить и обработать сообщение о считывании штрихкода сканером: в InitInstance()...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru