Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Внизtry except Найти похожие ветки
← →
Алексей Петухов (2003-08-12 13:46) [0]Уважаемые матсера.
не поможете с такой ситуацией:
есть процедура Sort, которая вызывается из другой процедуры:
....
Sort;
line1;
line2;
...
В процедуре Sort используется try..except:
procedure Sort
begin
...
try
Query.Open;
except
Query.SQL:=sql;
Query.Open;
end;
...
end;
По идее, после неудачной попытке открытия набора данных, текст запроса должен быть восстановлен, и набор должен быть открыт.
Но после возникновения исключительной ситуации управление не нередается на строкуQuery.SQL:=sql;
, и не остается в процедуреSort
, а сразу валетает из процдуры и выполняется строкаline1;
.
Чё за ерунда?
Помогите пожалуйста.
← →
Palladin (2003-08-12 13:50) [1]а сразу нельзя восстановить и потом открыть?
Query.SQL:=sql;
Query.Open;
← →
Алексей Петухов (2003-08-12 13:51) [2]Нет конечно.
← →
Verg (2003-08-12 13:56) [3]
> Но после возникновения исключительной ситуации управление
> не нередается на строку Query.SQL:=sql;, и не остается в
> процедуре Sort, а сразу валетает из процдуры и выполняется
> строка line1;.
Откуда ж тогда ты знаешь, что произошла эта исключительной ситуация?
Поставь точку останова на Query.SQL:=sql;
и сделай погон - если не "брякнется", значит и не было никакого исключения. Копай в другом месте, например, откуда берется содержимое переменной SQL?
Однажды видел такое
procedure SetQSql(cosnt Sql : string);
begin
...
with Query1 do begin
...
Query1.Sql:=Sql; // Что будет записано в Query1.Sql?
...
← →
Юрий Федоров (2003-08-12 13:58) [4]Возможно метод Query.Open асинхронный, то есть ошибка возникает в другом потоке. Тогда нужно поискать событие типа Query.OnError
← →
Алексей Петухов (2003-08-12 14:10) [5]To Verg
>Откуда ж тогда ты знаешь, что произошла эта исключительной >ситуация?
Я поставил точку останова наQuery.Open;
, а потом нажимал "F8", так и узнал.
← →
Palladin (2003-08-12 14:12) [6]
> Нет конечно.
это почему это нет конечно?
← →
Verg (2003-08-12 14:17) [7]
> Я поставил точку останова на Query.Open;
F8 - (по крайней мере на D4) при выполнении процедуры вызвашей исключения НЕ ПОПАДАЕТ на первую строку за except - и это понятно - выполнение "шага без захода" сводится к замене байта непосредственно ЗА инструкцией call на код инструкции прерывания отладчика . В силу возникновения исключения программа не попадет на эту инструкцию-прерывание и выполнение продолжится так, будьто ты нажал F9.
← →
Алексей Петухов (2003-08-12 14:24) [8]To Verg
Я кое-что поправил в коде и теперь при нажатии "F8" отладчик попадает на первую строку Except, но правда от этого нет толку почемуто.
← →
Verg (2003-08-12 14:27) [9]
> Но после возникновения исключительной ситуации управление
> не нередается на строку Query.SQL:=sql;
???
Че-то ты путаешь: то попадает, то не попадает....
Извини, я не телепат, чтобы осмысливать код не видя его перед глазами.
← →
Юрий Федоров (2003-08-12 14:28) [10]>>Алексей Петухов (12.08.03 14:24) [8]
Отладчик в этом случае иногда склонен привирать, чтобы убедиться точно насчет последовательности выполнения операторов, поставь beep или ShowMessage
← →
Алексей Петухов (2003-08-12 14:45) [11]Ладно, хорошо. Вроде разобрался с Божьей и вашей помощью.
Во внешних процедурах были другие try..except, видимо в них была проблема. Да еще кое-что. Вообщем заработало!
А на счет
>Отладчик в этом случае иногда склонен привирать,
Было у меня такое смутное подоздение. Мечется он че-то где не попадя, но в итоге вроде все правильно исполняется.
Спасибо.
← →
Verg (2003-08-12 14:47) [12]Главное - в чудеса не верить :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c