Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IBQuery и IBUpdateSQL [D7, IB6.x]


Страницы:   1 2

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)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо