Mam bazę danych - 4 tabele. Połączone SQLConnection - SQLDataSet - DataSetProvider - ClientDataSet. Wykonuję operacje kasowania na ClientDataSet'ach (1,2,3,4). Jest OK do czasu jak chcę updateować dane do bazy danych. Robię to kodem:

  if(ClientDataSet1->State == dsEdit || ClientDataSet1->State == dsInsert)
   ClientDataSet1->Post();
  ClientDataSet1->ApplyUpdates(-1);
  if(ClientDataSet2->State == dsEdit || ClientDataSet2->State == dsInsert)
   ClientDataSet2->Post();
  ClientDataSet2->ApplyUpdates(-1);
  if(ClientDataSet3->State == dsEdit || ClientDataSet3->State == dsInsert)
   ClientDataSet3->Post();
  ClientDataSet3->ApplyUpdates(-1);

Dla pierwszego działa, a dla ClientDataSet2 i 3 dosteję wyjątek EDatabaseError -
'sieze of optimizer block exceeded' i jeszcze jeden po nim 'Unable to find record. No key specified'.
O co tu chodzi? Dlaczego nie chce zapisać tego po skasowaniu, jeśli po dodaniu rekordu zapisuje. POMOCY!