Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.12.2015, 14:18
jester7 jester7 вне форума
Прохожий
 
Регистрация: 02.12.2015
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию 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  
Старый 02.12.2015, 14:29
jester7 jester7 вне форума
Прохожий
 
Регистрация: 02.12.2015
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Решили проблему:
Код:
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  
Старый 07.12.2015, 09:44
jester7 jester7 вне форума
Прохожий
 
Регистрация: 02.12.2015
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Приходиться продолжить тему, не качественно выполняется скрипт (((

Видимо программа выполняет строки до тех пор, пока не поймает ошибку, а потом пропускает некоторые строки и перепрыгивает .
В итоге получаю из 200 строк скрипта - выполнено 30-40 строк, ошибок при этом (совпадение кода) 10-20.
Реально НЕ ВСЕ строки ОБРАБАТЫВАЮТСЯ!.

Нашел выход из положения - добавил после каждой строки СОММИТ ВОРК;
И теперь у меня скрипты выполняются целиком.
Но это же через Ж выход.

Потому вопрос остается открытым:
как заставить программу выполнять все строки, как заставить прорабатывать каждую строку, и если ОШИБКА, то просто информировать об этом ????

П.С. (без КОММИТ ВОРКА после каждой строки - выполняет 50-60% кода, с КОММИТАМИ - 100%)
Ответить с цитированием
  #4  
Старый 08.12.2015, 08:58
jester7 jester7 вне форума
Прохожий
 
Регистрация: 02.12.2015
Сообщения: 4
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Немного подумали и пришли к выводу, что программа выполняет строки скрипта до тех пор, пока не встретит строку КОММИТА, после этой строки транзакции записываются в базу, а если ошибка происходит до КОММИТА, то транзакция до ошибки не записывается, вот и происходит потеря данных.

Вопрос: как сделать, чтоб КОММИТ сам работал, вне зависимости от встретившейся ошибки ???
Может параметры Транзакции выставить иначе ? или есть АУТОКОММИТ ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter