![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IBQuery и IBUpdateSQL [D7, IB6.x]
gestern © (2003-11-27 01:33:00)
Что-то не то? Вопрос очень простой. Почему при использовании IBQuery и IBUpdateSQL может возникнуть ошибка Update Failed
ksan (2003-11-28 07:27:00) [1]
> Zacho © (27.11.03 21:05) [22]
Я действительно ошибся "с закрыть запрос". Спасибо за ссылку.
Zacho (2003-11-27 21:10:00) [2]
> ksan (27.11.03 20:57) [21]
Не может быть. Что-то ты не правильно делаешь, а вот что - я даже и не знаю, мне отсюда не видно :)
Zacho (2003-11-27 21:05:00) [3]
> ksan (27.11.03 20:47) [20]
Думаю, что в последней строке следует читать "открыл запрос" ? :)
А ответ такой: просто не надо завершить транзакцию перед присваиванием параметров, или завершать, но CommitRetaining или RollbackRetaining или стартовать заново.
Есть хорошая статья по работе с транзакциями в IBX: http://www.ibase.ru/devinfo/ibxtrans.htm
ksan (2003-11-27 20:57:00) [4]
> Zacho © (27.11.03 20:43) [19]
Причем с TIBQuery такой проблемы не возникает.
ksan (2003-11-27 20:47:00) [5]
> Zacho © (27.11.03 20:43) [19]
А в каком месте ее делать? Последовательность ведь такая:
закрыл запрос,
изменил параметр,
закрыл запрос.
Zacho (2003-11-27 20:43:00) [6]
> ksan © (27.11.03 20:28) [18]
Дело не в параметре, однозначно. Транзакция не активна ? Так надо сделать StartTransaction.
ksan (2003-11-27 20:28:00) [7]
> Zacho © (27.11.03 20:20) [17]
Извините что вмешиваюсь. Я пробовал использовать TIBDataSet, но возикла проблема с параметром в запросе. При попытке усьановить параметр возникает Transaction is not active. Может быть встречалась такая проблема?
Zacho (2003-11-27 20:20:00) [8]
> Vlad © (27.11.03 19:32) [16]
Самые большие грабли - это необходимость использовать CachedUpdates, все остальное вытекает именно из этого. А в реализации CachedUpdates в IBX постоянно обнаруживаются какие-нибудь баги (насколько помню, началось это еще с FIBC) Например, в IBX 6.0 я нарвался на весьма неприятный баг, (слава богу, что бухгалтерша вовремя обратила внимание, что суммы в отчете какие-то странные) проявляющийся при CachedUpdates:=true и Filtered:=true. Несколько часов потратил, прежде чем понял, в чем дело. Да и то же самое Update failed при RowsAffected<>1 - чем не грабля ? Я, например, частенько делаю insert/update/delete при помощи ХП, если бы использовал TIBQuery - пришлось бы думать, как это обходить, писать какой-то абсолютно лишний код, а с TIBDataSet такой проблемы просто не возникает.
И повторю еще раз : зачем использовать 2 компонента (TIBQuery и TIBUpdateSQL) вместо одного TIBDataSet ?
Vlad (2003-11-27 19:32:00) [9]
> Zacho © (27.11.03 19:28) [15]
В чем грабли, например ?
Просто интересно. Я в одном более-менее серьезном проекте использовал как раз IBQuery+IBUpdateSql. Чем это м.б. чревато ?
Zacho (2003-11-27 19:28:00) [10]
> gestern (27.11.03 18:42) [13]
Не может TIBQuery работать быстрее. Все-таки мой совет: используй TIBDataSet и избегнешь всяческих граблей. И вообще, зачем использовать 2 компонента (TIBQuery и TIBUpdateSQL) вместо одного TIBDataSet ?
Sandman25 (2003-11-27 18:44:00) [11]
Я писал свой компонент для решения данной проблемы. Скопировал реализацию какого-то метода (сейчас уже не помню, какого) и закоментировал в нем проверку на rowsaffected :)
gestern (2003-11-27 18:42:00) [12]
> Не может быть. Что-то ты неправильно делаешь.
Разобраля. Хотя в общем и не помогло. Вернулся к Query оно быстрее работает. Буду бороть проблему Update Failed.
Zacho (2003-11-27 15:13:00) [13]
> gestern (27.11.03 14:34) [11]
Не может быть. Что-то ты неправильно делаешь.
gestern (2003-11-27 14:34:00) [14]
>Вместо TIBQuery использовать TIBDataSet c CachedUpdates:=false;
А как это делается. У меня в DataSource не прописывается TIBDataSet. Или оно и не должно?
Bmasik (2003-11-27 11:38:00) [15]
Ну можно было бы поиздеваться..получить ошибку BDE и так далее...а надо ли?
Vlad (2003-11-27 11:07:00) [16]
Мощно задвинул. Внушает! (с) :)))
Bmasik (2003-11-27 11:06:00) [17]
Vlad
Второй вариант работает! Сенкаю.
Для тех кому интересно
if E.Message="Update failed" then
UpdateAction:=uaApplied;
Vlad (2003-11-27 10:50:00) [18]
Еще вариант, в Query на событие OnUpdateError глушить ошибку.
Bmasik (2003-11-27 10:47:00) [19]
про IB я знаю...тут ситуация совсем другая...либо блин один Update на форме держать либо гору кверей.
Vlad (2003-11-27 10:46:00) [20]
> BMasik (27.11.03 10:42) [2]
> Zacho
> А как это хозяйство обойти чтобы оно ни орало.
Просто скажи своему хозяйству чтобы оно не орало (try...except)