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

Вниз

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

Наверх




Память: 0.48 MB
Время: 0.023 c
3-82105
Alex(lion)
2003-09-04 20:42
2003.09.25
Как сравнить две ячейки (в которых находяться числа) в DBGrid


3-82130
FFF
2003-09-04 12:09
2003.09.25
Привет всем!!, подскажите есть ли похожая командаили функция


3-82031
Vlad
2003-09-06 10:29
2003.09.25
Вопрос по InterBase


3-82083
Петр
2003-09-05 12:20
2003.09.25
Упаковка БД


14-82424
Романов Р.В.
2003-09-08 16:46
2003.09.25
Не печать в MS Word