Лена |
Отправлено: 24.10.2005, 09:52 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
В TClientDataset грузиться информация из файла *.xml Код:
CODE |
void __fastcall TForm1::Button2Click(TObject *Sender)
{
cdsRoad->LoadFromFile("s.xml");
TIndexDef *pIDef = cdsRoad->IndexDefs->AddIndexDef();
pIDef->Fields = "NAM_STR";
pIDef->Name = "NameIndex";
cdsRoad->IndexName = "NameIndex";
cdsRoad->First();
dsRoad->DataSet = cdsRoad;
}
|
dsRoad имя DataSet
cdsRoad имя TClientDataset
Установлена связь чтобы увидеть все в DBGrid. Получаю нужную мне колонку из s.xml в DBGrid.
Можно ли делать к такому набору, отображаемому в DBGrid, различные SQL запросы, фильтрование? |
|
olegenty |
Отправлено: 24.10.2005, 10:17 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
запросы — нет. фильтровать можно.
|
|
Лена |
Отправлено: 25.10.2005, 13:09 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Еще вопрос:
как видно выше для TClientDataset с именем cdsRoad создан индекс "NameIndex"
Почему ругается на код ниже? Пытаюсь в sEdit1 набирать текст и чтобы в DBGrid видеть работу индекса. Например, набираю "A" и вижу в DBGrid записи на "A":
CODE |
void __fastcall TSeashName::sEdit1Change(TObject *Sender)
{
//AnsiString S = Form1->cdsRoad->IndexName; вижу NameIndex
Form1->cdsRoad->IndexName = "NameIndex";
TFilterOptions FO;
FO << foCaseInsensitive;
Form1->cdsRoad->FilterOptions=FO;
Form1->cdsRoad->Filter = AnsiString("NameIndex = '")+AnsiString(sEdit1->Text)+AnsiString("*'");
if(sEdit1->Text=="")
{
Form1->cdsRoad->Filtered = false;
}
else
{
Form1->cdsRoad->Filtered = true;
}
}
|
Пишет поле NameIndex не найдено. Не могу понять причем тут поле? Поля в DBGrid имеют имена NAN_STR и ID они отсортированы по алфавиту по индексу NameIndex, данные берутся из cdsRoad.
|
|
olegenty |
Отправлено: 25.10.2005, 13:19 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
так в фильтре надо указывать имя ПОЛЯ, а не имя ИНДЕКСА.
|
|
Лена |
Отправлено: 25.10.2005, 13:32 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
>Form1->cdsRoad->Filter = AnsiString("NAM_STR = '")+AnsiString(sEdit1->Text)+AnsiString("*'");
Спасибо! Теперь работает. |
|