void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if(CheckBox1->Checked == true)
{
DataModule2->ADOQueryKey->Active = false;
DataModule2->ADOQueryKey->SQL->Clear();
DataModule2->ADOQueryKey->SQL->Add("select * FROM keys ORDER BY code;");
DataModule2->ADOQueryKey->Active = true;
}
}
ADOQuery
Что не так?:
Код:
Cортировка не происходит.
Связь: ADOQueryKey -> TDatasetProvider -> TClientDataset -> TDatasource
Код:
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if(CheckBox1->Checked == true)
{
DataModule2->ClientDataSetKey->Active = false;
DataModule2->ADOQueryKey->Active = false;
DataModule2->ADOQueryKey->SQL->Clear();
DataModule2->ADOQueryKey->SQL->Add("select * FROM keys ORDER BY code");
DataModule2->ADOQueryKey->Active = true;
DataModule2->ClientDataSetKey->Active = true;
}
}
{
if(CheckBox1->Checked == true)
{
DataModule2->ClientDataSetKey->Active = false;
DataModule2->ADOQueryKey->Active = false;
DataModule2->ADOQueryKey->SQL->Clear();
DataModule2->ADOQueryKey->SQL->Add("select * FROM keys ORDER BY code");
DataModule2->ADOQueryKey->Active = true;
DataModule2->ClientDataSetKey->Active = true;
}
}
Надежно так?
Код:
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if(CheckBox1->Checked == true)
{
DataModule2->ClientDataSetKey->Active = false;
DataModule2->ADOQueryKey->Active = false;
DataModule2->ADOQueryKey->SQL->Clear();
DataModule2->ADOQueryKey->SQL->Add("select * FROM keys ORDER BY code");
DataModule2->ADOQueryKey->Active = true;
DataModule2->ClientDataSetKey->Active = true;
}
}
{
if(CheckBox1->Checked == true)
{
DataModule2->ClientDataSetKey->Active = false;
DataModule2->ADOQueryKey->Active = false;
DataModule2->ADOQueryKey->SQL->Clear();
DataModule2->ADOQueryKey->SQL->Add("select * FROM keys ORDER BY code");
DataModule2->ADOQueryKey->Active = true;
DataModule2->ClientDataSetKey->Active = true;
}
}
Надежно так?[/QUOTE]Если прочитать help об Active, тогда не совсем то что надо, вроде она при закрытии кеширует данные. Может перед закрытием ClientdataSet написать
DataModule2->ClientDataSetKey->EmptyDataSet();
или к первому варианту (без точки с запятой в конце SQL) дописать
DataModule2->ClientDataSetKey->EmptyDataSet();
DataModule2->ClientDataSetKey->Refresh();
И если в ClientDataSet-е данные не редактируются, тогда можно свойство LogChanges установить в false.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DataModule2->ClientDataSetKey->IndexFieldNames = "code";
}
{
DataModule2->ClientDataSetKey->IndexFieldNames = "code";
}
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DataModule2->ClientDataSetKey->IndexFieldNames = "code";
}
{
DataModule2->ClientDataSetKey->IndexFieldNames = "code";
}
Индексы не определены. Эта строка делает индекс, как я поняла.
DataModule2->ClientDataSetKey->IndexFieldNames = "code"; не строит индекс, а только сортирует записи в порядке code.
А если тебе нужен только один индекс, то почему изначально не выбрать данные в этом порядке?
Да, спасибо. Теперь у меня так при загрузке:
в ADOQuery строка select * from keys order by code
а в FormCreate еще строка:
DataModule2->ClientDataSetKey->IndexFieldNames = "code";
чтобы при добавлении новых данных в грид сразу происходила сортировка.
Получается, что при первоначальной загрузке и при добавлении данных всегда все сортируется. :)