Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 22.02.2012
Сообщений: 140
MS SQL

Данные в втором DBLookupCombobox зависят от того что будут выбрано в первом Lookup

20.05.2015, 02:34. Показов 711. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть два dblookupcombox. Первый соединен через ListSource, ListField = Name, KeyField = ID (это название услуг). Мне необходимо сделать так: например я выбираю "кап.ремонт" в первом lookup, потом во втором lookup должно появиться название запчастей в которых id аналогичен как в услугах.
Набросал что-то, но не работает.
Вначале пробовал так:
C++
1
2
3
4
DataModule4->ADOQuery17->SQL->Add("Select Name from Repair_parts WHERE ID_type_work LIKE '"+DBLookupComboBox1->Text+"%'");
 
DataModule4->ADOQuery17->Open();
DBLookupComboBox3->ListField=DataModule4->ADOQuery17->FieldByName("Name")->AsString;
Потом так:
C++
1
2
3
4
5
6
 DataModule4->ADOQuery17->SQL->Clear();
DataModule4->ADOQuery17->SQL->Add("Select * from Repair_parts INNER JOIN Type_repair ON Type_repair.ID_type_work = Repair_parts.ID_Type_work WHERE Type_repair.ID_type_work LIKE '"+DBLookupComboBox1->Text+"%'");
DataModule4->ADOQuery17->Open();
DBLookupComboBox3->ListSource=DataModule4->DataSource17;
DBLookupComboBox3->ListField="Repair_parts.Name";
DBLookupComboBox3->KeyField="Repair_parts.ID_part";
Добавлено через 5 часов 57 минут
Попробовал записать в обычные комбобоксы:
Записываю услуги в первый комбобокс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AnsiString SQLSelect;
SQLSelect="select * from Type_repair";
DataModule4->ADOQuery17->Active=false;
DataModule4->ADOQuery17->SQL->Clear();
DataModule4->ADOQuery17->SQL->Add(SQLSelect);
DataModule4->ADOQuery17->Active=true;
if (DataModule4->ADOQuery17->RecordCount>0) {
ComboBox3->Items->Clear();
 DataModule4->ADOQuery17->FindFirst();
 for (int i=0; i<DataModule4->ADOQuery17->RecordCount; i++) {
 ComboBox3->Items->Add(DataModule4->ADOQuery17->FieldByName("Name")->AsString);
  if (i<=DataModule4->ADOQuery17->RecordCount-2)
  DataModule4->ADOQuery17->FindNext();
  }
}
Делаю событие на закрытие первого комбика:
C++
1
2
3
4
5
6
7
8
9
10
11
AnsiString SQLSelect;
SQLSelect="select * from Type_repair,Repair_parts where Type_repair.Name='";
SQLSelect+=ComboBox3->Text.Trim();
SQLSelect+="' and Type_repair.ID_type_work=Repair_parts.ID_type_work";
DataModule4->ADOQuery17->Active=false;
DataModule4->ADOQuery17->SQL->Clear();
DataModule4->ADOQuery17->SQL->Add(SQLSelect);
DataModule4->ADOQuery17->Active=true;
if (DataModule4->ADOQuery17->RecordCount>0) {
 DataModule4->ADOQuery17->FindFirst();
ComboBox2->Items->Add(DataModule4->ADOQuery17->FieldByName("Name_part")->AsString);
Вроде работает, но как мне с них вытащить ID соответствующих данных чтобы записать их в таблицу. И возможно ли потом вытащить с этих выбранных данных поля "стоимость" чтобы посчитать общую стоимость? Или лучше экспериментировать с dblookupcombobox?

Добавлено через 1 час 38 минут
Если сделать так:
C++
1
ComboBox3->AddItem(DataModule4->ADOQuery17->FieldByName("Name")->AsString, (TObject*)DataModule4->ADOQuery17->FieldByName("ID_type_work")->AsInteger );
Добавлено через 50 секунд
Как потом узнать запись которую я выбрал и посчитать общую суму по полу "стоимость"?

Добавлено через 1 час 3 минуты
C++
1
2
DataModule4->ADOQuery5->FieldValues["ID_type_work"]=ComboBox3->Items->Objects[ComboBox3->ItemIndex];
DataModule4->ADOQuery5->FieldValues["ID_part"]=ComboBox2->Items->Objects[ComboBox2->ItemIndex];
Ошибка: Конфликтируют внешние ключи. В чем моя ошибка?

Добавлено через 6 часов 3 минуты
Вроде получилось.

Добавлено через 1 минуту
Надеюсь последний вопрос как вывести поле "цена" моих комбибоксов в edit?
Пробую так:
C++
1
2
3
4
5
DataModule4->ADOQuery17->SQL->Clear();
DataModule4->ADOQuery17->SQL->Add("Select Price from Type_repair where ID_type_work LIKE '"+IntToStr(Integer(ComboBox3->Items->Objects[ComboBox3->ItemIndex]))+"%' ");
DataModule4->ADOQuery17->Open();
int a=DataModule4->ADOQuery17->FieldByName("Price")->AsInteger ;
Edit2->Text=a;
Пусто...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2015, 02:34
Ответы с готовыми решениями:

Контент второго выпадающего списка зависит от того, что выбрано в первом
Всем добрый вечер! К примеру, на форме два КомбоБокса. В первом &quot;Выбор 1&quot; и &quot;Выбор 2&quot;. Второй Комбобокс в это время пустой. От...

Какой параметр DBLookUpComboBox отвечает за то, что в данный момент в нем выбрано?
Подскажите кто нибудь какой параметр комбобокса отвечает за то, что в данный момент в нем выбрано

Объединить 2 списка в один, элементы которого будут только те элементы, которые есть в первом, но нет во втором
Например '(1 2 4 7 8) '(3 5 8 2 0 5) Результат - '(1 4 7)

2
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
20.05.2015, 04:33
а если так
C++
1
DataModule4->ADOQuery17->SQL->Add("Select Price from Type_repair where ID_type_work = "+IntToStr(int(ComboBox3->Items->Objects[ComboBox3->ItemIndex])));
0
0 / 0 / 1
Регистрация: 22.02.2012
Сообщений: 140
20.05.2015, 12:03  [ТС]
Цитата Сообщение от Bit_Man Посмотреть сообщение
DataModule4->ADOQuery17->SQL->Add("Select Price from Type_repair where ID_type_work = "+IntToStr(int(ComboBox3->Items->Objects[ComboBox3->ItemIndex])));
Так же, пустой edit...

Добавлено через 9 минут
Вроде получилось с моим кодом...

Добавлено через 1 час 25 минут
Есть ещё одна проблема когда выбираю в первом комбике услуги, во втором появляется только одна запись с таким же "id" хотя их несколько.
C++
1
2
3
4
5
6
7
8
9
10
11
AnsiString SQLSelect;
SQLSelect="select * from Type_repair,Repair_parts where Type_repair.Name='";
SQLSelect+=ComboBox3->Text.Trim();
SQLSelect+="' and Type_repair.ID_type_work=Repair_parts.ID_type_work";
DataModule4->ADOQuery17->Active=false;
DataModule4->ADOQuery17->SQL->Clear();
DataModule4->ADOQuery17->SQL->Add(SQLSelect);
DataModule4->ADOQuery17->Active=true;
if (DataModule4->ADOQuery17->RecordCount>0) {
 DataModule4->ADOQuery17->FindFirst();
ComboBox2->AddItem(DataModule4->ADOQuery17->FieldByName("Name_part")->AsString, (TObject*)DataModule4->ADOQuery17->FieldByName("ID_part")->AsInteger);
Добавлено через 9 минут
C++
1
2
3
for (int i=0; i<DataModule4->ADOQuery17->RecordCount; i++)
if (i<=DataModule4->ADOQuery17->RecordCount-2)
  DataModule4->ADOQuery17->FindNext();
Решение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2015, 12:03
Помогаю со студенческими работами здесь

Загрузка во фрейм того, что было выбрано в меню.
Исплоьзую меню на подобие того что внизу.Кто нить смог бы подсказать как загрузить во фрейм то что выбрано в меню?Имееются различные товары...

Подтягивание нужного отчета в зависимости от того, что выбрано в выпадающем поле
Привет, каким образом можно осуществить задумку? При выборе из &quot;полесосписком&quot; необходимого поставщика и нажатии на кнопку печать -...

В зависимости от того, что выбрано в одном Combobox в другом на выборку давалось другое
как сделать так, чтобы в зависимости от того, что выбрано в одном комбобоксе в другом на выборку давалось другое?

Найти вероятность того, что будет выбрано три карты одного значения, а четвертая — другого
Из колоды в 52 карты выбираются 4 карты, причем каждая из них после определения масти и значения возвращается в колоду. Найти вероятность...

Создать два запроса, что бы в первом было с 1 по 3 строки, а во втором с 4 по 10. По Коду (счетчик) не получается
Есть таблица1 с 3 столбцами: Код, ФИО, Оценка. Как создать два запроса что бы в первом было с 1 по 3 строки а во втором с 4 по 10. По...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru