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

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

20.05.2015, 02:34. Показов 690. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru