** Инга |
Отправлено: 25.11.2005, 17:57 |
|
Не зарегистрирован
|
Заполняю, во время выполнения, данными ClientDataSet. Просмотрев их, хочу загрузить в этот же ClientDataSet другие данные.
Как проверить содержаться ли в ClientDataSet данные и если да, то очистить ClientDataSet и приступить к заполнению новыми данными.
Удалять, наверное, правильно так:
CODE |
if(ClientDataSet2->Active==true)
{
ClientDataSet2->First();
for(int i=1; i<=ClientDataSet2->FieldCount; i++)
{
ClientDataSet2->Edit();
ClientDataSet2->ClearFields();
ClientDataSet2->FindNext();
}
ClientDataSet2->EmptyDataSet();
}
ClientDataSet2->Active=false;
|
Мне надо удалить и колонки и все записи, чтобы компонет пришел в такое состояние, когда его только положили на форму. |
|
Guest |
Отправлено: 25.11.2005, 18:33 |
|
Не зарегистрирован
|
Достаточно
DataSet2->Active=false;
|
|
** Инга |
Отправлено: 25.11.2005, 18:41 |
|
Не зарегистрирован
|
Что такое DataSet2?
У меня ClientDataSet2 соединен с DataSource, но у DataSource нет свойства Active |
|
** Инга |
Отправлено: 25.11.2005, 18:44 |
|
Не зарегистрирован
|
ClientDataSet2->Active = false;
так не работает. Исключение пишет, что поля уже определены. |
|
** Инга |
Отправлено: 25.11.2005, 19:03 |
|
Не зарегистрирован
|
И так исключение, если в самом начале поставить:
DataSource3->DataSet->Active=false; |
|
Admin |
Отправлено: 25.11.2005, 21:22 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Никогда не приходилось работать с ClientDataSet,
но почему бы не попробовать динамически создавать его,
а когда стал не нужен — удалять ?
CODE |
// создаем
TClientDataSet* ClientDataSet = new TClientDataSet(Form1);
// работаем с ним
.....
// удаляем
delete ClientDataSet;
|
|
|
** Инга |
Отправлено: 26.11.2005, 15:13 |
|
Не зарегистрирован
|
Данные выводятся в гриде который расположен на другой форме и присодинет к ClientDataSet на главной. Если бы все было в одной форме, то с new было бы легче.
Может чистить ClientDataSet как-то так:
if(ClientDataSet2->FieldDefs->Count)
{
for(int i=0; iFieldDefs->Count; i++)
{
ClientDataSet2->Edit();
ClientDataSet2->Fields->Fields[i]->Clear();
}
}
Как очистить списки FieldDefs?
После очистки нужно ли еще ClientDataSet2->EmptyDataSet();?
|
|
** Инга |
Отправлено: 26.11.2005, 15:26 |
|
Не зарегистрирован
|
Вроде получилось, исключения пропали, но надежен ли такой код?
Вставляю перед заполнением:
CODE |
if(ClientDataSet2->FieldDefs->Count)
{
ClientDataSet2->Edit();
ClientDataSet2->FieldDefs->Clear();
ClientDataSet2->IndexDefs->Clear();
ClientDataSet2->Close();
}
//далее заполняю новыми колонками и данными
|
Так надежно? |
|
Guest |
Отправлено: 26.11.2005, 19:16 |
|
Не зарегистрирован
|
Вполне надежен.
А попробуйте этот код без строчки:
ClientDataSet2->Edit();
будет рабатать ?
Если будет, то оставляйте без этой строчки,
не будет — оставляйте с этой строчкой. |
|