TDBPlanner

After a very long time I came back to Planner. I had forgotten everything.
Previously I had a separate DataSource and DataSet for each TDB..Source. Everything worked.
Now I have a single DataSource and DataSet. If I put an invalid value in a field, I get an exception. Just as proof that it works. But the write to the DB is not performed.
Please, what am I missing?

procedure TfrmPlannerRole.GetItemSource;
begin
  if Assigned(dbplDay.ItemSource) then
  begin
    TDBItemSource(dbplDay.ItemSource).Active := False;
    TDBItemSource(dbplDay.ItemSource).DataSource := nil;
  end;

  case TViews(FIdxSource) of
    TViews.vwMultiDay: dbplDay.ItemSource := dbdysrMultiDay;
    ...
  end;

  TDBItemSource(dbplDay.ItemSource).DataSource := ibdsPlanner;
  TDBItemSource(dbplDay.ItemSource).Active := True;
end;

procedure TfrmPlannerRole.dbpmwMonthItemToFields(Sender: TObject; Fields: TFields; Item: TPlannerItem);
begin
  var NewItem := (Item.DBKey = '');

  if NewItem then
  begin
    Item.DBKey := IntToStr(TSQLTexts.NewPrimaryKey);
    Item.CaptionType := ctTime;
    ...
  end;

  if (not NewItem) and (Sender is TDBPlannerMonthView) then
  begin
      Fields.FieldByName('STARTTIME').AsDateTime := FPlanDates[StartTime];
      Fields.FieldByName('ENDTIME').AsDateTime := FPlanDates[StartTime];
  end;

  Fields.FieldByName('IDPLANNERS').AsInteger := StrToInt(Item.DBKey);
  ...
end;

PlannerRole

A write for what?
Invoking item editor?
Inplace editing?
Item moving, sizing, ...?
Programmatic item change?

I did suspect something was missing here.
Programmatically create a new event. Then write it to DB. I create the event. I don't have it in DB.

procedure TfrmPlannerRole.dbplDayPlannerDblClick(Sender: TObject; Position, FromSel, FromSelPrecise, ToSel,
  ToSelPrecise: Integer);
var
  Inputs: array [0..0] of TInput;
begin
  ZeroMemory(@Inputs, SizeOf(Inputs));
  Inputs[0].Itype := INPUT_KEYBOARD;
  Inputs[0].ki.wVk := VK_INSERT;
  SendInput(1, Inputs[0], SizeOf(TInput));
end;

Hm, the record is saved if TIBCConnection.AutoCommit := True;
It was not enough to have this set in ibtblPlanner.
From my point of view, I understand this as a bug.

var
  plit: TPlannerItem;

begin
  // this should create it in the DB if there is an ItemSource connected 
  // and an active DataSet via DataSource to the ItemSource. 
  plit := DBPlanner.CreateItem;
  
   // change item here and call DBPlanner.UpdateItem should update it in the DB
   plit.Text.Text := 'hello world';
   DBPlanner.UpdateItem(plit);
end;

I haven't found an event where I should put it.
OnItemToFields or OnUpdateItem - DataSource is not in dsInsert or dsEdit state.
Forgot to mention: switched from FireDAC (OK) to Devart IBC - problem.
Now I solve it like this:
. ibtblPlanner.Connection.AutoCommit := True;
It's not clean. But I suppose it will work everywhere.