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

 
TClientDataset, Без BDE
Лена
Отправлено: 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("*'");

Спасибо! Теперь работает. smile.gif

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