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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
15-1356553802
Юрий
2012-12-27 00:30
2013.04.28
С днем рождения ! 27 декабря 2012 четверг


2-1350458591
thely
2012-10-17 11:23
2013.04.28
Аккуратный выход


15-1356595975
DevilDevil
2012-12-27 12:12
2013.04.28
Мозговой штурм на тему разработки клиент-серверного приложения


2-1350564355
nikomp
2012-10-18 16:45
2013.04.28
чтение/запись компонентов


15-1356640202
Юрий
2012-12-28 00:30
2013.04.28
С днем рождения ! 28 декабря 2012 пятница