![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Код:
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
|
|||
|
|||
|
Немного подумали и пришли к выводу, что программа выполняет строки скрипта до тех пор, пока не встретит строку КОММИТА, после этой строки транзакции записываются в базу, а если ошибка происходит до КОММИТА, то транзакция до ошибки не записывается, вот и происходит потеря данных.
Вопрос: как сделать, чтоб КОММИТ сам работал, вне зависимости от встретившейся ошибки ??? Может параметры Транзакции выставить иначе ? или есть АУТОКОММИТ ? |