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

Вниз

Oracle+ExecSql+Open   Найти похожие ветки 

 
Max_   (2003-09-05 17:22) [0]

Есть редактор Оракловских запросов! Классический пример с запросами на 100 строк работает прекрасно:
Query1.Close;
Query1.SQL.Add(zapros);
try
Query1.Open;
except
on EDataBaseError do
Query1.ExecSQL;
end;
Но скажем если я пишу запрос (Update) на 30000 строк (только не пишите, что таких запросов писать неследует), то идет выполнение Query1.Open; (где-то 30-40 сек.) потом, под конец как известно, Query1.Open пытается создать выходной курсор (которого быть в случае Updatе"а не может) происходит ошибка и компилятор начинает заново 40 сек. выполнять Update, но уже с Query1.ExecSQL;
P.S. Есть ли решение поизящнее (что б не тратить по 40 сек. каждый раз, нпр. проверить возвратит данный запрос курсор или нет)!


 
Reindeer Moss Eater   (2003-09-05 17:34) [1]

Если в тексте запроса найден update, то сразу делать Exec, а не найдено - значит Open


 
Max_   (2003-09-05 17:43) [2]

Ну я так и думал, что последует такого рода ответ! Это не решение! Select может быть вложенным или Update быть вместе с Selectом или в скрипте! (одним словом, я это проверял- возможны нюансы) Ещё предложения? :)


 
Reindeer Moss Eater   (2003-09-05 17:45) [3]

Есть предложение использовать SQL+ и не парить мозги.


 
Sandman25   (2003-09-05 17:46) [4]

Написать своего наследника TQuery, у которого перекрыть Open так, чтобы не происходило исключения при неудачном создании курсора.


 
Reindeer Moss Eater   (2003-09-05 17:48) [5]

Опять таки признаки скрипта легко детектируются в тексе.
Так что не надо усложнять.
Нет скрипта, но есть UPDATE - нет никакого курсора.


 
VAleksey   (2003-09-05 19:46) [6]

А что так
try
Query.Open;
except
on E:<Какое там исключение при открытии курсора> do
begin
end;
end;
или
try
Query.Open;
except
on E:Exception do
begin
// Парсим E.Message на предмет нашей ошибки
if e.Message <> "Error creating cursor handle" then
Raise;
end;
end;


 
Petr V. Abramov   (2003-09-06 14:56) [7]

...
except
on EDataBaseError
может быть что угодно, в т.ч. и обрыв соединения с сервером, упавшим от update 30 тыс строк.
Не знаю, можно ли в BDE от D6 достать родные оракловские хендлы, но если можно, то в их атрибутах есть код statement`а



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

Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.017 c
1-82237
mishgan
2003-09-08 10:29
2003.09.25
Есть ли в DELPHI аналог функции AbnormalTermination()?


1-82174
r00t
2003-09-15 11:20
2003.09.25
Многострочный


1-82271
drakulita
2003-09-15 12:04
2003.09.25
архивация


6-82348
Лёша
2003-07-28 14:15
2003.09.25
МУЖИКИ, подскажите как корректно обрабатывать ексепшены


4-82562
stkatch
2003-07-22 11:04
2003.09.25
Вызов MessageBox из сервиса (службы)





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