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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.015 c
7-62290
RET
2003-10-12 16:46
2003.12.19
WinXP & LPT


3-61992
Goida
2003-11-25 19:16
2003.12.19
Как позиционировать курсор в DBGrid?


3-61937
AlexNord
2003-11-25 07:49
2003.12.19
Банальный Table is busy


7-62297
Delphi5.01
2003-10-12 22:14
2003.12.19
Проблема с ОЛЕ, Вордом


7-62286
PolarS
2003-10-13 19:17
2003.12.19
Не вызывается метод из Rapi.dll





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