Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > pFIBTransaction - не весь скрипт выполняется |
Автор: jester7 8.12.2015, 10:14 | ||||
В скрипте (в файле): "UPDATE OR INSERT INTO ***************************" и т.д. строк примерно 200 Какая-то часть выполнилась, какая-то нет. Видимо от половины и до конца не выполнилось Нашел: Application: Object: "Form1.pFIBScripter1" Operation:TrID=12599960 Error on execute query. Error message: "Form1.pFIBScripter1: Violation of FOREIGN KEY constraint "". Violation of FOREIGN KEY constraint "FK_AKCIANAME_2" on table "AKCIANAME". Foreign key reference target does not exist. добавил, чтоб не останавливалась на ошибке:
но пропускает куски целые. НЕ вписывает в базу. Немного подумали и пришли к выводу, что программа выполняет строки скрипта до тех пор, пока не встретит строку КОММИТА, после этой строки транзакции записываются в базу, а если ошибка происходит до КОММИТА, то транзакция до ошибки не записывается, вот и происходит потеря данных. Вопрос: как сделать, чтоб КОММИТ сам работал, вне зависимости от встретившейся ошибки ??? Может параметры Транзакции выставить иначе ? или есть АУТОКОММИТ ? П.С. временно добавил в файл скрипта "КОММИТ ВОРКИ" после каждой строки ))) - хоть так работает подскажите, как обойти эту ошибку транзакции ? Хотелось бы , чтоб любой файл скрипта программа отрабатывала правильно. |
Автор: barmaley4ik 8.12.2015, 15:06 |
Не совсем понятно, что требуется. У тебя выбивается ошибка по внешнему ключу... НУ нет у тебя в связанной таблице такого ключа и все тут. Соответственно ошибка.. Данные не вставились. Скрипт отрабатывается правильно. Метод ExecuteFromFile не загружает весь файл в память, а считывает файл построчно. Попробуй pFIBScripter1.Script.LoadFromFile(FileName); pFIBScripter1.ExecuteScript; Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/pFIBTransaction-ne-ves-skript-vypolnyayetsya-id56668376ae2015483c8b4567#findElement_E7045_5666c7b6ae2015c31d3b5d84_0 |
Автор: Akella 10.12.2015, 10:02 |
Часть скрипта выполняется, потом ошибка и после неё уже не выполняется. Исправляй ошибку, выясняй откуда ноги растут. А лучше так: открытие транзакции запуск скрипта если ошибка - откат если нет ошибок - подтверждение тогда будет или всё откатываться или всё сохраняться Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/pFIBTransaction-ne-ves-skript-vypolnyayetsya-id56668376ae2015483c8b4567#findElement_E7045_5669237bae2015185d3b5db4_0 |
Автор: Alexeis 10.12.2015, 17:33 |
Суть транзакции состоит в том, чтобы применить все или не применить ничего. Честно говоря я удивлен, что у вас изменения применяются частично. По идее не должны вовсе применяться. Если нужно чтобы запросы применялись независимо, то завершайте транзакцию после каждого. |