|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
pfibtransaction - не весь скрипт выполняет
Код:
TRY Form1.pFIBScripter1.AutoDDL:=true; Form1.pFIBScripter1.Script.Clear; Form1.pFIBScripter1.ExecuteFromFile(sql_name1,';'); Form1.pFIBTransaction1.Commit; Form1.pFIBTransaction1.Active:=false; EXCEPT on E:EXCEPTION do form1.Memo1.Lines.Add('SQL_ERROR (exception): --> '+e.message); END; В скрипте: "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. Как сказать программе, чтоб игнорировала ошибку и продолжила выполнение ??? Последний раз редактировалось Admin, 02.12.2015 в 19:01. |
#2
|
|||
|
|||
Решили проблему:
Код:
procedure TForm1.pFIBScripter1ExecuteError(Sender: TObject; StatementNo, Line: Integer; Statement: TStrings; SQLCode: Integer; const Msg: string; var doRollBack, Stop: Boolean); begin stop:=false; end; по событию на ошибку - поставили НЕ ОСТАНАВЛИВАТЬСЯ!!!! Последний раз редактировалось Admin, 02.12.2015 в 19:01. |
#3
|
|||
|
|||
Приходиться продолжить тему, не качественно выполняется скрипт (((
Видимо программа выполняет строки до тех пор, пока не поймает ошибку, а потом пропускает некоторые строки и перепрыгивает . В итоге получаю из 200 строк скрипта - выполнено 30-40 строк, ошибок при этом (совпадение кода) 10-20. Реально НЕ ВСЕ строки ОБРАБАТЫВАЮТСЯ!. Нашел выход из положения - добавил после каждой строки СОММИТ ВОРК; И теперь у меня скрипты выполняются целиком. Но это же через Ж выход. Потому вопрос остается открытым: как заставить программу выполнять все строки, как заставить прорабатывать каждую строку, и если ОШИБКА, то просто информировать об этом ???? П.С. (без КОММИТ ВОРКА после каждой строки - выполняет 50-60% кода, с КОММИТАМИ - 100%) |
#4
|
|||
|
|||
Немного подумали и пришли к выводу, что программа выполняет строки скрипта до тех пор, пока не встретит строку КОММИТА, после этой строки транзакции записываются в базу, а если ошибка происходит до КОММИТА, то транзакция до ошибки не записывается, вот и происходит потеря данных.
Вопрос: как сделать, чтоб КОММИТ сам работал, вне зависимости от встретившейся ошибки ??? Может параметры Транзакции выставить иначе ? или есть АУТОКОММИТ ? |