Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.012 c
14-82451
Владимир Мунякин
2003-09-08 04:39
2003.09.25
О скоростном модеме разработанными Белорусами


3-82135
BillyJeans
2003-09-04 12:03
2003.09.25
Удаление записей после фильтрации...


3-82073
Centurion
2003-09-05 14:29
2003.09.25
Ошибка БД


8-82343
KoNDoR
2003-05-29 21:22
2003.09.25
Триангулированая поверхность


4-82548
anonym
2003-07-23 00:34
2003.09.25
Получение хэндла запускаемого приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский