Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
14-81878
McSimm
2003-08-08 10:39
2003.08.25
Объявление! Новый почтовый адрес.


1-81716
Алексей Петухов
2003-08-11 06:34
2003.08.25
TRadioGroup и OnKeyPress


1-81698
Dimon
2003-08-11 12:22
2003.08.25
PrintDialog


14-81890
Viktor Kushnir
2003-08-08 09:16
2003.08.25
Internet via e-mail


1-81751
R
2003-08-06 07:03
2003.08.25
Сколько строк вмещает ListBox