Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireBird DAC: FibPlus => FireDac / 5 сообщений из 5, страница 1 из 1
10.02.2019, 22:34
    #39771935
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireBird DAC: FibPlus => FireDac
Расскажите, кто перебрался. С подробностями.
...
Рейтинг: 0 / 0
10.02.2019, 23:36
    #39771955
RackotPro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireBird DAC: FibPlus => FireDac
Фэйтл Эра, расскажу о своём опыте, писал отдельное приложение, от того, что выпускает компания и там дали свободу полёта выбрал XE + Firedac. Сконектился всё ок, транзакции прикрутил, прекрасно, но

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
  with qEventEdit do
  begin
    Transaction.StartTransaction;
    try
      ParamByName('AOPERATION').Value := 1;
      ParamByName('ID').Value := dsEvents.DataSet.FieldByName('ID').Value;
      ParamByName('ID_DOCUMENT').Value := dsEvents.DataSet.FieldByName('ID_DOCUMENT').Value;
      ParamByName('KIND').Value := dsEvents.DataSet.FieldByName('KIND').Value;
      ParamByName('TIME$EVENT').Value := dsEvents.DataSet.FieldByName('TIME$EVENT').Value;
      ParamByName('TIME$LAST_SEND').Value := dsEvents.DataSet.FieldByName('TIME$LAST_SEND').AsDateTime;
      ParamByName('SEND$RESULT').Value := dsEvents.DataSet.FieldByName('SEND$RESULT').Value;
      ParamByName('IS_SENDED').Value := Abs(Integer(dsEvents.DataSet.FieldByName('IS_SENDED').AsInteger));
      ParamByName('SEND$COUNTER').Value := dsEvents.DataSet.FieldByName('SEND$COUNTER').Value;
      ParamByName('STATE').Value := 0;
      Open;
      Refresh;//обязательно для записи нового значения

      Result := FieldByName('OUT_ID').Value;
      outError := FieldByName('OUT_ERROR').AsInteger;

      if (outError = 0) then
        UpdateTransaction.Commit
      else
        Transaction.Rollback;
    except
      Transaction.Rollback;
    end;
  end;



Собственно, столкнулся с проблемой когда, при первой итерации все изменения пишутся, а при последующих нет, помог, refresh. Судя по всему там имеется какой-то cash, думаю, люди пишущие каждый день с использованием FireDac более детально опишут эту ситуацию.

Да и в принципе пообщавшись с программистами, понял, что уходят от fib т.к. не поддерживаются, дабы не получить ситуацию, как сейчас на рынке с delphi 7.
...
Рейтинг: 0 / 0
10.02.2019, 23:39
    #39771956
RackotPro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireBird DAC: FibPlus => FireDac
Поясню, данная ситуация встречается только с хранимыми процедурами, которые вызваны конструкцией
Код: sql
1.
2.
3.
4.
select
  out_id,
  out_error
from procedure


И при первом вызове все изменения в таблицу приходят, а при последующих итерациях нет. Требуется refresh
...
Рейтинг: 0 / 0
11.02.2019, 08:30
    #39772003
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireBird DAC: FibPlus => FireDac
RackotPro,

Поставь после забора значений выходных параметров Close и убери Refresh, посмотрим что будет.
P.S. И тебе про это, кажется уже говорили.
...
Рейтинг: 0 / 0
11.02.2019, 16:57
    #39772390
RackotPro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireBird DAC: FibPlus => FireDac
Vlad F, только сейчас дошло какой я критин =);
Собственно, такая история лично у меня возникла, т.к. каждый день пишу на Delphi 7 и там для fibQuery это не требуется, т.к. и дата сета там нет, а у FDQuery там отдельно dataset подключается. И всё это время писал, без проверки
Код: pascal
1.
2.
if Active then
  Close;


И там это работало, поэтому наверно у меня и случился когнитивный диссонанс, но однако странно, то что это только с select.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireBird DAC: FibPlus => FireDac / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]