Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
Вразумите, добрые люди. Локальная БД FB 2.5 (embedded). На клиенте (Delphi) в цикле происходит добавление записей в две таблицы (по 2-4-6-8 записей). Одну назовем MAIN, другую Tbl2. Они мало зависимы и вторая упомянута для полноты картины. Запись в обе таблицы идет в одной транзакции. Конструкция эта нормально работала долгое время, пока на авансцене не появилась третья таблица. Для краткости имя ее Tbl3 и связана она с MAIN по ВК для каскадного удаления: FK_TBL3_1 на поле ID_MAIN, вн.таблица MAIN, вн.поле ID, правило удаления CASCADE Удаление тоже благополучно отрабатывало и отрабатывает. Но вот понадобилось в Tbl3 заменить значение в ID_MAIN, меняя, таким образом владельца. И на беду как раз в той же самой транзации, в которой пишется добавление в MAIN. Происходит, понятно что: клиент запрашивает новое значение ID для MAIN, записывает данные в эту таблицу и, затем, надо заменить в Tbl3 значение в поле ID_MAIN на полученное для MAIN новое ID. Но транзакция еще не завершилась и запись в MAIN не видна - получаем облом обновления значения в Tbl3 из-за наличия ВК: 'violation of FOREIGN KEY constraint ... Foreign key reference target does not exist' Т.к. разрывать, делить транзакцию нельзя, то вроде бы, ничего не остается делать как пристрелить этот FK и на клиенте заняться удалением. Но теплится призрачная надежда, что может есть что-то типа "волшебного слова, зелья, приворота", чтобы в рамках одной транзакции и добавить записи и обновление сделать по ID добавленной но не существующей в рамках транзакции записи? Или оставь надежду всяк такое придумавший? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 17:58 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
SAN_01_08, ничего не понял. Приводи воспроизводимый пример в ISQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 18:01 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
Hello, San_01_08! You wrote on 15 апреля 2015 г. 18:01:13: San_01_08обновление сделать по ID добавленной но не cуществующей в рамках транзакции записипомедленнее. я записываю. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 18:01 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисSAN_01_08, ничего не понял. Приводи воспроизводимый пример в ISQL Ну как здесь привести пример из клиентской программы? Еще хуже будет. В таблице MAIN есть поле ID и другие, которые в этой ситуации роли не играют. В таблице Tbl3 есть ВК на это поле ID из MAIN Ситуация проста как галоша: - запускается транзакция; - берется новое значение ID из генератора; - добавляется запись в MAIN с этим новым значением ID; - теперь в Tbl3 в поле ID_MAIN надо заменить то значение что там было на это новое, полученное для MAIN; Т.к. к моменту обновления таблицы Tbl3 транзакция не завершена, то ВК не может найти запись в MAIN с новым ID и генерит вышеуказанную ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 18:18 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
SAN_01_08Ситуация проста как галоша: - запускается транзакция; - берется новое значение ID из генератора; - добавляется запись в MAIN с этим новым значением ID; - теперь в Tbl3 в поле ID_MAIN надо заменить то значение что там было на это новое, полученное для MAIN; Т.к. к моменту обновления таблицы Tbl3 транзакция не завершена, то ВК не может найти запись в MAIN с новым ID и генерит вышеуказанную ошибку.Это означает, что а) апдейт Tbl3 происходит не в той тр-ции, в которой был инсерт в MAIN, или б) в Tbl3 присваивается не то значение, которое вставлено в MAIN, или в) где-то (в Tbl3 ?) есть злобные триггеры, которые портят картинку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 18:21 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
Может быть мое предположение о причине ошибки и не верное, но а) одна транз. и для инсерта и для апдейта. Отвечаю. б) пишется то значение, которое надо. Проверено в отладке. в) триггеров на таблицу Tbl3 нет. Если таблицу апдейтить в другой транзакции, то ВК не мешает и ошибки нет. Но нужна именно одна транзакция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 18:26 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
Тебе уже сказали: делай тесткейс в isql и покажи нам как оно нарушается. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 19:03 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
SAN_01_08, воспроизведи в isql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 19:03 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
А что такое isql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 19:31 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
И как в isql воспризвести две операции в одной транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 19:33 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
SAN_01_08, нет слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 20:41 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
hvladSAN_01_08, нет слов. Здесь МП нужен. Лучше него кратко и емко объяснить ситуацию вряд ли кто-то сможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 21:46 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
SAN_01_08чтобы в рамках одной транзакции и добавить записи и обновление сделать по ID добавленной но не существующей в рамках транзакции записи? три раза прочитал, что-то ересь какая-то. Это типа как сначала создать заказ, а потом создавать или записи использовавшихся в нем товаров, или запись клиента, делающего заказ. Foreign key reference target does not exist означает совершенно конкретное - в справочнике нет записи с id, который пытаются использовать в таблице. Насчет транзакций тоже муть какая-то. В одной транзакции никаких нет проблем создать запись справочника и потом сослаться на нее в другой таблице. В разных транзакциях - да, будет эта самая проблема. Потому что транзакция со ссылкой не видит вставленной в справочник в другой транзакции записи. Для этого надо транзакцию со вставкой в справочник сначала завершить (commit), и более того, транзакция ссылающаяся на этот справочник не должна быть snapshot. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 23:20 |
|
||
|
Нужна замена значения, а ВК мешает
|
|||
|---|---|---|---|
|
#18+
SAN_01_08Ситуация проста как галоша: - запускается транзакция; - берется новое значение ID из генератора; - добавляется запись в MAIN с этим новым значением ID; - теперь в Tbl3 в поле ID_MAIN надо заменить то значение что там было на это новое, полученное для MAIN; Вот если последний и предпоследний пункты местами поменять, то будет наблюдаться описанная картина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2015, 17:22 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38937573&tid=1562905]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 275ms |

| 0 / 0 |
