Форум: "Прочее";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
ВнизADO, ошибка в провайдере MSDAORA при select... for update Найти похожие ветки
← →
Es (2012-12-24 19:49) [0]Если кратко: при использовании
select..for update
провайдер MSDAORA в результате зануляет результат зароса.
То есть, имеем Connection String:Provider=MSDAORA.1;Password=YYY;User ID=XXX;Data Source=ZZZ;Persist Security Info=True;
Делаем запрос:select id from TestTable where id = 1 for update
в результате, если сделаем:ShowMessage(IntToStr(q1.FieldByName("id").AsInteger));
то получим ноль!
Данные занулены в датасете. Если делать без--for update
, то все нормально
Если взять провайдера OraOLEDB.1 тоже все нормально.
Кто-нибудь сталкивался с проблемой, как вылечить? )
Кардинальных решений не предлагайте, может как-то запрос можно по-другому составить...
← →
Ega23 © (2012-12-24 19:51) [1]А возвращает ли select for update рекордсет?
← →
Es (2012-12-24 20:17) [2]
> А возвращает ли select for update рекордсет?
если я правильно понял твой вопрос, то строчка:
> Если взять провайдера OraOLEDB.1 тоже все нормально.
является ответом?
← →
Игорь Шевченко © (2012-12-24 20:48) [3]Если кратко, то рекомендуется практически всегда использовать провайдер производителя
← →
Медвежонок Пятачок © (2012-12-24 21:23) [4]А нахрена for update?
Если запрос редактируемый, то он и будет редактируемым без for update
← →
Styx (2012-12-24 22:42) [5]
> А нахрена for update?
Для транзакций?
← →
Медвежонок Пятачок © (2012-12-24 22:43) [6]Нахрен для транзакций фор апдейт?
← →
Styx (2012-12-24 22:55) [7]
> Нахрен для транзакций фор апдейт?
Чтобы заблокировать набор для последующего обновления. Если ты выбрал for update, то другим с аналогичным запросом придётся ждать конца твоей транзакции.
← →
Медвежонок Пятачок © (2012-12-24 22:56) [8]Транзакция-то здесь причем?
← →
Styx (2012-12-24 22:59) [9]
> Транзакция-то здесь причем?
При том, что вне транзакции for update не несёт никакого смысла?
← →
Медвежонок Пятачок © (2012-12-24 23:10) [10]без транзакции апдейт никакого смысла не имеет и не произойдет.
← →
Игорь Шевченко © (2012-12-24 23:37) [11]http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#i2130052
← →
Медвежонок Пятачок © (2012-12-24 23:39) [12]это типа мне?
на случай если я с села и не слышал для чего нужен форапдейт?
← →
Игорь Шевченко © (2012-12-24 23:44) [13]
> на случай если я с села
На тот самый случай
← →
Медвежонок Пятачок © (2012-12-24 23:45) [14]Спасибо конечно, но случай совсем нет тот.
← →
Es (2012-12-25 12:18) [15]
> А нахрена for update?
вообще?
Тебе дали ссылку. Блокировка ресурса, гарантия, что его теперь никто не изменит.
Конкретно здесь?
Это тестовый пример, чтобы показать глюк.
← →
Медвежонок Пятачок © (2012-12-25 12:53) [16]Мне не нужна была ссылка для чего вообще нужен форапдейт.
Мне нужно было знать зачем тебе форапдейт.
← →
Es (2012-12-25 13:31) [17]мне он нужен для того же самого. Чтобы сделать выборку и при этом заблокировать её для изменений конкурирующими транзакциями.
← →
Es (2012-12-26 12:57) [18]решение забавное.
Если перед SELECT"ом (перед Open) сделать BeginTrans, то тогда все возвращается корректно.
Особенно это радует в контексте того, что в оракле отсутствует команда начала транзакции...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c