Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Вниз

try ... except   Найти похожие ветки 

 
Ольга   (2003-05-27 13:54) [0]

Здравствуйте!
У меня творится какая-то мистика! Не работает следующая ловушка ошибок:

try
Form1.OracleScript.Execute ;
InsertedCount := InsertedCount + 1 ;
except
on E : Exception do showmessage ("Error") ;
end ;

При выполнении Form1.OracleScript.Execute ; должна возникать ошибка и выдаваться сообщение. Этот оператор добавляет строки в БД Oracle (делает INSERT). На самом деле Оракл ругается, и запись в базу не попадает, а Дельфи во время выполнения никаких сообщений не выдает, как-будто все прошло успешно. Если включить галочку в Debuger Options Stop on Delphi Exceptions, то Дельфи ругается (выдает Оракловское сообщение об ошибке при вставке), а если отключить ее, ошибок как бы не происходит. Причем, другие ловушки, как до, так и после данного кода работают нормально.

В чем тут дело?


 
Skier   (2003-05-27 13:57) [1]

>Ольга (27.05.03 13:54)
А запускать приложение не из-под Delphi не пыталась ?


 
Ольга   (2003-05-27 14:02) [2]

Запускала. Тоже не ругается, но и записи не добавляет.


 
Zelius   (2003-05-27 14:04) [3]

А оракловые исключения от Exception наследуются? Может они от EAbort ведут свои корни? :)


 
Skier   (2003-05-27 14:06) [4]

>Ольга (27.05.03 14:02)
1) Скорее всего OracleScript.Execute не генерит никакого
исключения
2) И, видимо, тебе нужно просто использовать результат
ф-ции Execute (это ведь наверняка функция...), т.е.

if Form1.OracleScript.Execute then begin
Inc(InsertedCount);
end //if
else begin
showmessage ("Error") ;
end; //else


 
Ольга   (2003-05-27 14:07) [5]

Наследуются, наверное. Потому что в других местах Оракловые ошибки таким же образом отлавливаются.


 
Ольга   (2003-05-27 14:12) [6]

Form1.OracleScript.Execute - это процедура
Но OracleScript я использую первый раз, не знаю его особенностей. Может, действительно, в нем дело?


 
Skier   (2003-05-27 14:13) [7]

>Ольга (27.05.03 14:12)
Странно...
1)Процедура без параметров ?
2) Исходники OracleScript.Execute есть ?


 
Skier   (2003-05-27 14:17) [8]

>Ольга (27.05.03 14:12)
И ещё :
Посмотри может быть при возникновении ошибок в скрипте, в классе
OracleScript устаналиваются какие-то флаги...Вполне может быть...


 
Ольга   (2003-05-27 14:19) [9]

Я почитала, и, похоже, действительно, он особенный:

Error handling

Individual SQL statements can lead to an error. You can control if such an error should stop further execution of the script through the ExitOnError property.

An SQL error will also lead to an OnError event, which you can specifically handle. After execution you can also check the ErrorCode and ErrorMessage property of each command.

Кажется, на try ... except он не ловится, ошибки в его событии onError отлавливаются. Проверила - выдается мессадж.


 
Skier   (2003-05-27 14:21) [10]

>Ольга (27.05.03 14:19)

> Кажется, на try ... except он не ловится, ошибки в его событии
> onError отлавливаются. Проверила - выдается мессадж.

onError - это и есть решение проблемы. Поставь на это
событие свой обработчик и усё...:)


 
Digitman   (2003-05-27 14:22) [11]


> Ольга


Не исключено, что метод Execute - асинхронный.
И, возможно, асинхронный по-умолчанию.

Я не в курсе, но наверняка у объекта OracleScript есть некие события наподобие OnError и/или OnSuccess/OnComplete. Там (в обработчиках этих событий), вероятно, и следует фиксировать факт успешного/неуспешного выполнения скрипта.

И, возможно, существует некое св-во объекта OracleScript, позволяющее выполнить запрос в синхронном режиме, при котором исключения как раз и можно перехватывать желаемым тобой способом.


 
Ольга   (2003-05-27 14:23) [12]

Уже поставила. Спасибо!
Просто странно, почему так сделано?


 
Skier   (2003-05-27 14:25) [13]

>Ольга (27.05.03 14:23)
Наверняка в этом классе (OracleScript) много всяких
настроек (Oracle ведь штука сложная :) ). Почитай про этот
класс по-внимательней..."дверь и откроется" :)


 
Digitman   (2003-05-27 14:38) [14]


> Ольга


нормально сделано) ... по-умному)

представь себе, что исполнение скрипта сервером займет значительное время (десяток минут)

при этом кодовый поток, в котором в синхронном режиме был вызван метод Execute, будет блокирован до тех пор, пока запрос не выполнится полностью либо не возникнет исключение

а ведь все эти 10 минут, что сервер "пыхтит" над исполнением запроса, кодовый поток клиентского приложения вполне мог бы заняться другими "полезными" вещами !) а не стоять на месте и покорно ждать "милости" от сервера))



 
Ольга   (2003-05-27 14:39) [15]

Все ясно!
Еще раз всем спасибо! :)


 
Ольга   (2003-05-27 15:10) [16]

Действительно, OracleScript.Execute выполняется в отдельном потоке. И это очень замечательно! :)


 
Digitman   (2003-05-27 15:52) [17]


> Ольга


если OracleScript.Execute - асинхронный, то вряде случаев совершенно индифферентно, в каком код.потоке он выполняется. Важно, что не блокирует он (метод) код.поток



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
1-26524
Renul
2003-05-24 19:01
2003.06.09
Читать с MEMO


7-26815
sucer
2003-04-04 15:48
2003.06.09
Как узнать SerialNumber HDD без API(без GetVolumeInformation)?


1-26554
testthewest
2003-05-27 15:20
2003.06.09
как узнать размер текста в RichEdit


3-26338
qwerty2
2003-05-20 11:50
2003.06.09
Странное поведение BDE


14-26651
МуМу
2003-05-21 12:13
2003.06.09
Как в DbGride привязать какие либо значения к полям грида.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский