Конференция "Базы" » Транзакция не выполняется [Firebird]
 
  • seimey © (28.01.16 13:33) [0]
    Добрый день!
    Помогите советом, пожалуйста.
    Delphi xe7, Firebird, компоненты interbase.
    на форме DataModule  компоненты IBDatabase, IBTransaction, IBQuery, IBTable, соединение успешное.
    Теперь на другой форме подключаю модуль данных (uses UDM), пытаюсь внести данные в таблицу, используя хранимую процедуру. она тоже есть на форме модуля данных. Если  обращаюсь к IBTransaction, что на форме модуля данных, то транзакция не проходит возвращает исключение по Roolback (Не удалось сохранить данные),  а если IBTransaction на эту форму кидаю, то все ок, сохраняет в таблицу.Хотелось бы использовать тот компонент, что на форме модуля данных.
    Можете что-нибудь посоветовать?
  • seimey © (28.01.16 13:39) [1]
    try
       FDM.IBTWrite.StartTransaction;
       FDM.SPSETUP.Close;  
       FDM.SPSETUP.ParamByName('VCOUNT').AsInteger:=varcount;
       FDM.SPSETUP.ParamByName('SFORM').AsInteger:=number_pm;
       FDM.IBTWrite.Commit;
    except
       FDM.IBTWrite.Rollback;
       ShowMessage('Не удалось сохранить данные!');
       Exit;
     raise;
     end;
  • Кщд © (28.01.16 13:46) [2]
    >Можете что-нибудь посоветовать?
    конечно
    прочитать и понять сообщение exception
  • seimey © (28.01.16 14:27) [3]
    а по существу вопроса? Вопрос в принципе был не об исключении.
  • кгшзх © (28.01.16 15:24) [4]
    в исключении тебе было дано вразумительная причина исключения.
    но ты его заменил на свое 'Не удалось сохранить данные!'

    ну так не удалось, значит не удалось.
    а почему - так тебе же самому неинтересно было
  • кгшзх © (28.01.16 15:43) [5]
    А что это за ересь?

    FDM.SPSETUP.Close;  
    FDM.SPSETUP.ParamByName('VCOUNT').AsInteger:=varcount;
    FDM.SPSETUP.ParamByName('SFORM').AsInteger:=number_pm;

    Начинаем транзакцию.
    Что-то там закрываем,
    Затем закрытому присваиваем параметры
    Затем ничего не сделав, чего-то там коммитим
  • seimey © (29.01.16 06:38) [6]
    begin
     INSERT INTO setup(
     SFORM,  
     VCOUNT)
     VALUES(
     :SFORM,  
     :VCOUNT);
     suspend;
    end
    Возможно, не все было указано сразу в вопросе. Текста хранимой процедуры не было. Это текст хранимой процедуры, через нее идет добавление данных в таблицу, именно она закрывается, вносятся параметры, и потом коммит транзакция. Вопрос был - почему когда транзакция на этой форме, где поля для вноса данных, данные в таблицу таки вносятся. А если обращаюсь к транзакции что на форме модуля данных, то нет.
  • sniknik © (29.01.16 08:49) [7]
    повторю -
    прочитать и понять сообщение exception

    > Возможно, не все было указано сразу в вопросе.
    в вопросе бред, показанный код это куски бессмысленного текста, который ничего не делает... и дополненный текстом процедуры от этого бредом быть не перестал. закрытие без вызова бессмысленно, вызова нет, транцакция начинается просто так, от балды, также закрывается. райз стоит после выходы, т.е. тоже не о чем.
    ты или показывай все, либо тестируй и приводи именно тот кусок который хочешь обсудить. уверения "тыт не правильно, но вообще у меня в коде все хорошо и вопрос не о том"... не катят.
  • seimey © (29.01.16 09:01) [8]
    ок, спасибо
  • seimey © (29.01.16 09:01) [9]
    ок, спасибо
 
Конференция "Базы" » Транзакция не выполняется [Firebird]
Есть новые Нет новых   [118241   +23][b:0][p:0]