Модераторы: Rodman
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pFIBTransaction - не весь скрипт выполняется, pFIBTransaction - не весь скрипт выполня 
:(
    Опции темы
jester7
Дата 8.12.2015, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.12.2015

Репутация: нет
Всего: нет



Код

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.

добавил, чтоб не останавливалась на ошибке:
Код

procedure TForm1.pFIBScripter1ExecuteError(Sender: TObject; StatementNo,
  Line: Integer; Statement: TStrings; SQLCode: Integer; const Msg: string;
  var doRollBack, Stop: Boolean);
begin
     stop:=false;
 
end;


но пропускает куски целые.
НЕ вписывает в базу.


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

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

П.С. временно добавил в файл скрипта "КОММИТ ВОРКИ" после каждой строки ))) - хоть так работает

подскажите, как обойти эту ошибку транзакции ?
Хотелось бы , чтоб любой файл скрипта программа отрабатывала правильно.




PM MAIL   Вверх
barmaley4ik
Дата 8.12.2015, 15:06 (ссылка)    |    (голосов: 1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не совсем понятно, что требуется. У тебя выбивается ошибка по внешнему ключу... НУ нет у тебя в связанной таблице такого ключа и все тут. Соответственно ошибка.. Данные не вставились. Скрипт отрабатывается правильно. Метод ExecuteFromFile не загружает весь файл в память, а считывает файл построчно. Попробуй pFIBScripter1.Script.LoadFromFile(FileName);
pFIBScripter1.ExecuteScript;

Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
Akella
Дата 10.12.2015, 10:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18470
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Часть скрипта выполняется, потом ошибка и после неё уже не выполняется.
Исправляй ошибку, выясняй откуда ноги растут.
А лучше так:
открытие транзакции
запуск скрипта
если ошибка - откат
если нет ошибок - подтверждение

тогда будет или всё откатываться или всё сохраняться

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Alexeis
Дата 10.12.2015, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11720
Регистрация: 12.10.2005
Где: Молдова, Кишинев

Репутация: нет
Всего: 458



  Суть транзакции состоит в том, чтобы применить все или не применить ничего. Честно говоря я удивлен, что у вас изменения применяются частично. По идее не должны вовсе применяться. Если нужно чтобы запросы применялись независимо, то завершайте транзакцию после каждого.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Google
  Дата 23.9.2017, 03:17 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0793 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.