IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Access & C++(Rad studio 2010), запросы
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Доброго времени суток, появился вопрос при написании курсовой: есть база данных Прикрепленное изображение, имеется форма Прикрепленное изображение, в первый комбобокс я записываю все значения столбца Отделение таблицы Отделения (идентификатор Id_отделения я хотел использовать для дальнейших целей):
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ADOTable1->Open();
DBGrid3->Visible = False;
DBComboBox1->Clear();
for (ADOTable1->First(); !ADOTable1->Eof; ADOTable1->Next())
{
DBComboBox1->Items->Add(ADOTable1->FieldValues["Id_отделения","Отделение"]);
}
}

затем я хочу, чтобы при выборе определенного отделения у меня из таблицы Группы записывались значения столбца Группа в комбобокс2, я пытался все это счастье сделать так:
void __fastcall TForm1::DBComboBox1Change(TObject *Sender)
{
try
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
DBComboBox2->Enabled = True;
ADOTable2->Open();
DBComboBox2->Clear();
ADOQuery1->SQL->Add("SELECT Группы.Группа FROM Отделения INNER JOIN Группы ON Отделения.Id_отделения = Группы.Id_отделения WHERE Отделения.Отделение='"+DBComboBox1->Text+"'");
ADOQuery1->ExecSQL();
for (ADOTable2->First(); !ADOTable2->Eof; ADOTable2->Next())
{
DBComboBox2->Items->Add(ADOTable2->FieldValues["Id_группы","Группа"]);
}
DBComboBox2->Enabled = True;
}
catch(...)
{
//MessageBox(0,"Такая таблица не существует, сначала создайте её!","Ошибка!",MB_OK);
}
}

но почему-то он игнорирует сравнение идентификаторов и записывает все значения таблицы Группы.
Подскажите мб как это делать, просто на C# чтобы все это сделать надо 4 раза мышкой щелкнуть, зато никак там с добавлением данных в таблицу разобраться не могу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
просто на C# чтобы все это сделать надо 4 раза мышкой щелкнуть
И зачем эта информация? Тебе ж надо на С++ сделать? Вот и делай, не смотри, сколько где раз надо щелкнуть...

Все проще на самом деле:
1) на форме DataSource (2 шт.), ADOTable (2 шт.) и DBLookupComboBox (тоже 2 шт.)
2) настраиваем ADOTable1 на таблицу "Отделения", а ADOTable2 - на "Группы"
3) настраиваем DataSource1 -> Dataset = ADOTable1 и DataSource2 -> Dataset = ADOTable2
4) теперь LookupComboBox-ы.

Первый будет отображать отделения. Для этого у него:
ListSource = DataSource1; ListField = Отделение; KeyField = Id_Отделение.

Второй - для отображения связанных групп. Сначала настраиваем его вообще на отображение групп:
ListSource = DataSource2; ListField = Группы; KeyField = Id_Группы.

5) А вот теперь надо добавить тот самый функционал, что после выбора определенного значения в первом Lookup-е, во втором останутся только связанные значения. Для этого:
void __fastcall TForm1::DBLookupComboBox1Click(TObject *Sender)
{
ADOTable2->Filtered = false; // Эта таблица связана с Группами, не забыл?

// Просто фильтруем таблицу, чтоб она содержала только нужные записи
ADOTable2->Filter = "[id_branch] = " + IntToStr((int)DBLookupComboBox1->KeyValue);
ADOTable2->Filtered = true;

DBLookupComboBox2->Refresh(); // И обновляем LookupCB
}
Вот и все... А заполнение вручную - выброси из головы, не надо оно. Все делается автоматом...

Ну, и что? Где сложнее настроить нужное поведение?
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.05.2024 5:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name