Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизПосле отлавливания ошибки в запросе ADO глючит Найти похожие ветки
← →
Alex_x (2003-09-04 11:29) [0]UPDATE XXX SET A=B/C С помощю TRY EXCEPT я ловлю ошибку деления на ноль, но после того в програме при обращених к базе и всем контролам с нею связаными вылетает куча ошибок, большенство с именем файла msado15.dll тоесть програма уже не работает и завершить её можна только убив процес
← →
Sandman25 (2003-09-04 11:34) [1]update xxx set a = b/c where c <> 0
← →
Sandman25 (2003-09-04 11:37) [2]Если с - константа, не зависящая от значений полей, то
if c <> 0 then
with Query do
begin
SQl.Clear;
SQL.Add("UPDATE XXX SET A=B/" + IntToStr(C));
ExecSQL;
end;
← →
Alex_x (2003-09-04 11:48) [3]полей много и формулы разные, всё не провериш, меня интересуеит вариант стабилизирования работи програми после такогй ошибки
← →
bushmen (2003-09-04 11:57) [4]Приведи кусок кода от TRY до END
← →
Sandman25 (2003-09-04 12:01) [5][3] Alex_x © (04.09.03 11:48)
Я просто помню, что пару месяцев назад кто-то писал на форум точно о такой же проблеме. На одной машине работало нормально, на другой зависало и требовалась перезагрузка. Тогда решения не нашли.
← →
Alex_x (2003-09-04 12:02) [6]TRY
Formula:="MG=MG1-MG2";
Comm.CommandText:="UPDATE WORK1 SET "+Formula+" WHERE ID="+ID[i];
Comm.Execute;
.........................
Formula:="HLD=(HLD1*HLD2*HLD3*1000)/HLD4";
Comm.CommandText:="UPDATE WORK1 SET "+Formula+" WHERE ID="+ID[i];
Comm.Execute;
except
Showmessage("dividing by zeroo");
//здесь пробовал разние варианти:
//типа Halt,Abort.. но всёравно потом прога глючит
end;
← →
bushmen (2003-09-04 12:27) [7]А почему не хочешь воспользоваться компонентом TADOQuery?
← →
Hooch (2003-09-04 12:30) [8]Delphi какие ? Стоят ли апдейты ? Можно поробовать ADO переставить посвежее
← →
sniknik (2003-09-04 12:42) [9]может лутше отсечь в условии HLD4=0 или запрос на апдейт сделать вариантным? база какая?
← →
Hooch (2003-09-04 12:48) [10]это не дело, если при ошибке выполнения команды программа умирает, надо искать причини а не бороться со следствиями :-)
← →
Nikky (2003-09-04 12:51) [11]проверяй в запросе @@Error ?
update table set a = b/c
if @ERROR <> 0 raiseerror ("zero divide", 15, 1)
← →
Nikky (2003-09-04 13:14) [12]
> if @ERROR
if @@ERROR т.е.
← →
Nikolay M. (2003-09-04 13:27) [13]
> может лутше отсечь в условии HLD4=0 или запрос на апдейт
> сделать вариантным
Имхо, если при вычислении значения некоторого поля некоторой записи предполагается деление на другое число (поле), то либо оно никогда не должно быть равным нулем по определению, либо то, вычисляемое, поле должно предусматривать значение вроде "не определено" (конечно, если нет работы с +- бесконечностями).
Поэтому зрить нужно в корень: либо ошибка вводимых данных и такие данные нельзя разрешать вводить, либо ошибка проектирования хранения данных.
← →
MOA (2003-09-04 13:29) [14]База - MSSQL? Если да, есть вариант с CASE.
Удачи!
← →
Alex_x (2003-09-04 13:51) [15]а ADOQuery чем лучше ADOcommand?
>>>update table set a = b/c
>>>if @ERROR <> 0 raiseerror ("zero divide", 15, 1)
это не разве то самое в результате получится что с TRY EXCEPT
можна детальнее про єту конструкцию
Delphi6 с updatom база аксесовская, виндовс ХР. Чтоб обновить АДО надо MDAC ставить????
← →
jocko (2003-09-04 14:09) [16]а если сделать ту же команду но через хран. процедуру та же картина ?
и еще а если вообще вызвать команду
RAISERROR("Ошибка!", 16, 1) WITH NOWAIT тоже повиснет ?
если да то явно проблема или ado или провайдера ...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c