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

Вниз

IBQuery и IBUpdateSQL   Найти похожие ветки 

 
gestern   (2003-11-27 01:33) [0]

Что-то не то? Вопрос очень простой. Почему при использовании IBQuery и IBUpdateSQL может возникнуть ошибка Update Failed


 
Zacho ©   (2003-11-27 10:12) [1]

Такая ошибка возникает, когда в результате ApplyUpdates RowsAffected<>1, например какой-либо запрос в TIBUpdateSQL изменяет/удаляет/вставляет больше одной записи. Или если в TIBUpdateSQL вызывается ХП.


 
BMasik   (2003-11-27 10:42) [2]

Zacho
А как это хозяйство обойти чтобы оно ни орало.


 
Zacho ©   (2003-11-27 10:45) [3]


> BMasik (27.11.03 10:42) [2]

Вместо TIBQuery использовать TIBDataSet c CachedUpdates:=false;


 
BMasik   (2003-11-27 10:45) [4]

У меня просто BDE , ни IBQuery, но смысл от этого ни меняется


 
Vlad ©   (2003-11-27 10:46) [5]


> BMasik (27.11.03 10:42) [2]
> Zacho
> А как это хозяйство обойти чтобы оно ни орало.

Просто скажи своему хозяйству чтобы оно не орало (try...except)


 
Bmasik   (2003-11-27 10:47) [6]

про IB я знаю...тут ситуация совсем другая...либо блин один Update на форме держать либо гору кверей.


 
Vlad ©   (2003-11-27 10:50) [7]

Еще вариант, в Query на событие OnUpdateError глушить ошибку.


 
Bmasik ©   (2003-11-27 11:06) [8]

Vlad
Второй вариант работает! Сенкаю.

Для тех кому интересно


if E.Message="Update failed" then
UpdateAction:=uaApplied;


 
Vlad ©   (2003-11-27 11:07) [9]

Мощно задвинул. Внушает! (с) :)))


 
Bmasik ©   (2003-11-27 11:38) [10]

Ну можно было бы поиздеваться..получить ошибку BDE и так далее...а надо ли?


 
gestern   (2003-11-27 14:34) [11]

>Вместо TIBQuery использовать TIBDataSet c CachedUpdates:=false;
А как это делается. У меня в DataSource не прописывается TIBDataSet. Или оно и не должно?


 
Zacho ©   (2003-11-27 15:13) [12]


> gestern (27.11.03 14:34) [11]

Не может быть. Что-то ты неправильно делаешь.


 
gestern   (2003-11-27 18:42) [13]


> Не может быть. Что-то ты неправильно делаешь.

Разобраля. Хотя в общем и не помогло. Вернулся к Query оно быстрее работает. Буду бороть проблему Update Failed.


 
Sandman25 ©   (2003-11-27 18:44) [14]

Я писал свой компонент для решения данной проблемы. Скопировал реализацию какого-то метода (сейчас уже не помню, какого) и закоментировал в нем проверку на rowsaffected :)


 
Zacho ©   (2003-11-27 19:28) [15]


> gestern (27.11.03 18:42) [13]

Не может TIBQuery работать быстрее. Все-таки мой совет: используй TIBDataSet и избегнешь всяческих граблей. И вообще, зачем использовать 2 компонента (TIBQuery и TIBUpdateSQL) вместо одного TIBDataSet ?


 
Vlad ©   (2003-11-27 19:32) [16]


> Zacho © (27.11.03 19:28) [15]

В чем грабли, например ?
Просто интересно. Я в одном более-менее серьезном проекте использовал как раз IBQuery+IBUpdateSql. Чем это м.б. чревато ?


 
Zacho ©   (2003-11-27 20:20) [17]


> 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 ?


 
ksan ©   (2003-11-27 20:28) [18]


> Zacho © (27.11.03 20:20) [17]

Извините что вмешиваюсь. Я пробовал использовать TIBDataSet, но возикла проблема с параметром в запросе. При попытке усьановить параметр возникает Transaction is not active. Может быть встречалась такая проблема?


 
Zacho ©   (2003-11-27 20:43) [19]


> ksan © (27.11.03 20:28) [18]

Дело не в параметре, однозначно. Транзакция не активна ? Так надо сделать StartTransaction.


 
ksan   (2003-11-27 20:47) [20]


> Zacho © (27.11.03 20:43) [19]

А в каком месте ее делать? Последовательность ведь такая:
закрыл запрос,
изменил параметр,
закрыл запрос.


 
ksan   (2003-11-27 20:57) [21]


> Zacho © (27.11.03 20:43) [19]

Причем с TIBQuery такой проблемы не возникает.


 
Zacho ©   (2003-11-27 21:05) [22]


> ksan (27.11.03 20:47) [20]

Думаю, что в последней строке следует читать "открыл запрос" ? :)

А ответ такой: просто не надо завершить транзакцию перед присваиванием параметров, или завершать, но CommitRetaining или RollbackRetaining или стартовать заново.
Есть хорошая статья по работе с транзакциями в IBX: http://www.ibase.ru/devinfo/ibxtrans.htm


 
Zacho ©   (2003-11-27 21:10) [23]


> ksan (27.11.03 20:57) [21]

Не может быть. Что-то ты не правильно делаешь, а вот что - я даже и не знаю, мне отсюда не видно :)


 
ksan   (2003-11-28 07:27) [24]


> Zacho © (27.11.03 21:05) [22]

Я действительно ошибся "с закрыть запрос". Спасибо за ссылку.



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

Текущий архив: 2003.12.19;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
3-61918
чайник
2003-11-27 13:23
2003.12.19
как получить значение max из запроса


4-62334
BoxTer
2003-10-27 07:05
2003.12.19
TerminateProcess не работает ;-)


1-62039
UNick
2003-12-06 08:40
2003.12.19
Как мне добавить кнопку в заголовок окна?


3-61902
Murad
2003-11-27 12:03
2003.12.19
Backup в MSSql


1-62079
Arximed
2003-12-08 20:31
2003.12.19
Формат бумаги