C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ClientDataSet, обработчики событий
Лена
Отправлено: 21.12.2006, 11:28


Мастер участка

Группа: Участник
Сообщений: 501



Возник вопрос. Связь через ADOQuery -> TDatasetProvider -> TClientDataset -> TDatasource грид

Если мне, к примеру, надо чтобы ClientDataSet вел себя как обычный ADOTable т.е. после редактирования, удаления, вставки и переходе на новую строку запись сразу бы обновлялась в базе и в гриде. Тогда мне необходимо написать обработчики ClientDataSet. Написала так:

CODE

//список всех обработчиков ClientDataSetDoors
//в ADOQueryDoors привязанном к  ClientDataSetDoors при старте программы select *  from gates order by name

//№2
void __fastcall TDataModule2::ClientDataSetDoorsBeforeDelete(
     TDataSet *DataSet)
{
 if (Application->MessageBox("Удалить?", "Подтвердите удаление", MB_YESNO +
   MB_ICONQUESTION) != IDYES) {
        Abort();
   }
}
//---------------------------------------------------------------------------

//№3
void __fastcall TDataModule2::ClientDataSetDoorsBeforePost(
     TDataSet *DataSet)
{

  if( Form1->DBGrid2->Fields[1]->Value.IsNull()
            || Form1->DBGrid2->Fields[2]->Value.IsNull())
   {
    ShowMessage("Поля \"Доступ\" и \"Описание\" должны быть заполнены");
    Abort();
   }

}
//---------------------------------------------------------------------------

//№4
void __fastcall TDataModule2::ClientDataSetDoorsAfterDelete(
     TDataSet *DataSet)
{
 int Number = ClientDataSetDoors->RecNo;
 ClientDataSetDoors->ApplyUpdates(-1);
 ClientDataSetDoors->RecNo = Number;
}
//---------------------------------------------------------------------------

//№5
void __fastcall TDataModule2::ClientDataSetDoorsAfterPost(
     TDataSet *DataSet)
{
  int Number = ClientDataSetDoors->RecNo;
  ClientDataSetDoors->ApplyUpdates(-1);
  ClientDataSetDoors->Active = false;
  ADOQueryDoors->Active  = false;
  ADOQueryDoors->Active  = true;
  ClientDataSetDoors->Active = true;
  ClientDataSetDoors->RecNo = Number;
}
//---------------------------------------------------------------------------

//№6
void __fastcall TDataModule2::ClientDataSetDoorsBeforeRefresh(
     TDataSet *DataSet)
{
  //кнопка Refresh навигатора

  ClientDataSetDoors->Active = false;
  ADOQueryDoors->Active  = false;
  ADOQueryDoors->Active  = true;
  ClientDataSetDoors->Active = true;
  ClientDataSetDoors->First();

   
}


Написав, все эти обработчики будет ли мой ClientDataSetVis вести себя также как ADOTable? Т.е. я хочу отказаться от кэширования и сразу отправлять все в базу и видеть обновления в гриде. Правильны ли в этом случае написаны BeforeRefresh, AfterPost, AfterDelete? Может что поправить или добавить?


olegenty
Отправлено: 22.12.2006, 15:18


Ветеран

Группа: Модератор
Сообщений: 2412



переходи уже на TMemTableEh + TADODataDriverEh

Вернуться в Работа с базами данных в C++Builder