С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118

Как сделать запрос-выборку

27.09.2024, 20:02. Показов 10921. Ответов 15

Студворк — интернет-сервис помощи студентам
Как сделать запрос-выборку у меня на форме есть combobox1 combobox2, и adoquery, хочу чтобы в первом(combobox) я выбирал первое(вид блюда) и во втором появились борщ, суп, харчо также надо сделать со всеми видами блюд
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2024, 20:02
Ответы с готовыми решениями:

Как сделать выборку по всем 11 столбцам, а не только по одному определенному
Доброго времени суток! Пользуюсь Builder XE2 с базами в первые работаю... Решил создать программу, база InterBase 6,5. Из книги...

Запрос на выборку из Access
Как сделать запрос чтоб он вывел уникальные номера тестов, так если например два теста но он показал только тот за который оценка больше? ...

Запрос на выборку для DBLookupComboBox
Подскажите, такой вопрос: У меня есть таблица сотрудников, у них разные должности. Есть таблица с договорами и там есть поле...

15
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
28.09.2024, 05:07
Ну примерно так
Вложения
Тип файла: zip Sample1.zip (72.0 Кб, 6 просмотров)
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
28.09.2024, 12:30
Лучший ответ Сообщение было отмечено Nikita_Soprano как решение

Решение

Цитата Сообщение от Nikita_Soprano Посмотреть сообщение
Как сделать запрос-выборку
Все зависит от того, как организована Ваша БД. Если она спроектирована неправильно, то это бывает или невозможно в принципе или сопряжено с определенными трудностями.
В общем случае:
- существует справочник-классификатор блюд - t_Spr (названия условны, главное, чтобы смысл был понятен) и таблица блюд (t_Dishes), которая содержит ключевое поле (spr_id) для связи со справочником. Таблицы связаны между собой отношением один ко многим.



- выполняется запрос на получение всех значений из справочника:
SQL
1
SELECT * FROM t_Spr
- в цикле обходится полученный набор данных. В айтемы комбобокса1 добавляются объекты, состоящие из названия типа блюда и его уникального идентификатора.
C++
1
2
3
4
5
6
7
ComboBox1->Items->Clear();
while(!ADOQuery1->Eof) {
   int k = ADOQuery1->FieldByName("id")->AsInteger;
   String s = ADOQuery1->FieldByName("type_name")->AsString;
   ComboBox1->Items->AddObject(s, (TObject*)k);
   ADOQuery1->Next();
}
- в момент выбора значения из комбобокса1 необходимо проделать следующее:
а) получить уникальный идентификатор (ID) записи в справочнике в соответствии с выбором айтема комбобокса1
б) Динамически сформировать и выполнить запрос на получение только блюд требуемого типа
в) заполнить полученным набором данных айтемы второго комбобокса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
   int k = (int)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
 
   ADOQuery1->Close();
   ADOQuery1->SQL->Text = String().sprintf("SELECT * FROM t_Dishes WHERE spr_id=%d", k);
   ADOQuery1->Open();
 
   ComboBox2->Items->Clear();
   ComboBox2->Text = "";
   while(!ADOQuery1->Eof) {
      ComboBox2->Items->Add(Q1->FieldByName("dishe")->AsString);
      ADOQuery1->Next();
   }
   ComboBox2->ItemIndex = -1;
}
Конечно, есть, типа, DBLookupComboBox и т.д., но я не сторонник использования db-aware компонентов, прошло их время...
0
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118
28.09.2024, 16:34  [ТС]
Хорошо, Я попробую если что-то не получится сюда отпишу
0
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118
28.09.2024, 18:38  [ТС]
D1973, Что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm2::ComboBox1Change(TObject *Sender)
 
{
 
  int k = (int)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
 
   ADOQuery1->Close();
   ADOQuery1->SQL->Text = String().sprintf("SELECT dishe_1 * FROM T_Food WHERE F_Type = ", k);
   ADOQuery1->Open();
 
   ComboBox2->Items->Clear();
   ComboBox2->Text = "";
   while(!ADOQuery1->Eof) {
        ComboBox2->Items->Add(ADOQuery1->Fields->Fields[0]->AsString);
      ADOQuery1->Next();
   }
   ComboBox2->ItemIndex = -1;
}
//---------------------------------------------------------------------------
Миниатюры
Как сделать запрос-выборку   Как сделать запрос-выборку   Как сделать запрос-выборку  

0
42 / 45 / 6
Регистрация: 21.10.2022
Сообщений: 560
Записей в блоге: 2
28.09.2024, 18:54
Видимо:
C++
1
 ADOQuery1->SQL->Text = String().sprintf("SELECT dishe_1 * FROM T_Food WHERE F_Type = %d", k);
ну или типа по правилам, через параметры.

Кстати, хотел спросить, откуда вообще такие задания? В институтах обучают непрофильных?
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
28.09.2024, 20:40
Цитата Сообщение от Nikita_Soprano Посмотреть сообщение
Что не так?
Запрос не так. Таблица не так. Связь не так. В общем, вся БД ни к черту!
Собственно, судя по приведенной схеме данных, я был, к сожалению, прав:
Цитата Сообщение от D1973 Посмотреть сообщение
Если она спроектирована неправильно, то это бывает или невозможно в принципе или сопряжено с определенными трудностями.
0
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118
28.09.2024, 21:16  [ТС]
D1973,
Кстати, хотел спросить, откуда вообще такие задания? В институтах обучают непрофильных?
в институтах Белорусси и г.Сочи по программированию

Эх придется полностью переделывать бд, или сдавать задачу сырую без выборки
0
42 / 45 / 6
Регистрация: 21.10.2022
Сообщений: 560
Записей в блоге: 2
28.09.2024, 21:27
Цитата Сообщение от Nikita_Soprano Посмотреть сообщение
в институтах Белорусси и г.Сочи по программированию
Странно, мне кажется это слишком простое задание для институтов по программированию. Если только первый месяц первого курса и то если человек наобум выбрал специальность.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
28.09.2024, 22:21
Цитата Сообщение от Nikita_Soprano Посмотреть сообщение
придется полностью переделывать бд
именно. Проектирование БД - наиболее значимая часть работы при создании приложений, подобных Вашему.
0
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118
30.09.2024, 18:20  [ТС]
Почему не выводит в combobox2?
Миниатюры
Как сделать запрос-выборку  
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
01.10.2024, 04:54


А почему эта машина не заводится?
Порча по фотографии снимается только на телеканале Рен-ТВ, а тут код Ваш нужен, и не просто код, а проект вместе с БД
0
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118
01.10.2024, 08:45  [ТС]
Бд и код проекта
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm2::ComboBox1Change(TObject *Sender)
 
{
  int k = (int)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
 
   ADOQuery1->Close();
   ADOQuery1->SQL->Text = String().sprintf("SELECT * FROM dishe WHERE spr_id=%d", k);
   ADOQuery1->Open();
 
   ComboBox2->Items->Clear();
   ComboBox2->Text = "";
   while(!ADOQuery1->Eof) {
      ComboBox2->Items->Add(ADOQuery1->FieldByName("dishes")->AsString);
      ADOQuery1->Next();
   }
   ComboBox2->ItemIndex = -1;
}
Миниатюры
Как сделать запрос-выборку   Как сделать запрос-выборку   Как сделать запрос-выборку  

0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
01.10.2024, 10:55
Скорее всего Вы запросом формируете просто пустой набор данных. Переменная k вообще значение получает? Вы первый комбобокс заполняли так, как я писал?
0
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118
01.10.2024, 18:34  [ТС]
D1973, как то так я особо не понял как правильно заполнить 1комбобокс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void __fastcall TForm2::ComboBox1Change(TObject *Sender)
 
{
  int k = (int)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
 
  ComboBox1->Items->Clear();
while(!ADOQuery1->Eof) {
   int k = ADOQuery1->FieldByName("id")->AsInteger;
   String s = ADOQuery1->FieldByName("type_name")->AsString;
   ComboBox1->Items->AddObject(s, (TObject*)k);
   ADOQuery1->Next();
}
   ADOQuery1->Close();
   ADOQuery1->SQL->Text = String().sprintf("SELECT * FROM dishe WHERE spr_id=%d", k);
   ADOQuery1->Open();
 
   ComboBox2->Items->Clear();
   ComboBox2->Text = "";
   while(!ADOQuery1->Eof) {
      ComboBox2->Items->Add(ADOQuery1->FieldByName("dishes")->AsString);
      ADOQuery1->Next();
   }
   ComboBox2->ItemIndex = -1;
}
Почему-то вызывает исключения на строку String s заменяешь type_name на dishes начинает криво работать
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
03.10.2024, 04:58
Цитата Сообщение от D1973 Посмотреть сообщение
- выполняется запрос на получение всех значений из справочника:
SELECT * FROM t_Spr
Это где сделано?
Цитата Сообщение от Nikita_Soprano Посмотреть сообщение
заменяешь type_name на dishes
А зачем это делать, если Вам надо заполнять первый комбобокс именно значениями поля type_name таблицы t_Spr?

Вы, по факту, вообще логику не стараетесь понять, тупо копипастите и все?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2024, 04:58
Помогаю со студенческими работами здесь

Запрос на выборку в диапазоне дат
Доброй ночи! Подскажите как решить задачу. Имеется БД SQLite, с неё необходимо делать выборку записей в DBGrid запросом в нужном диапазоне...

Запрос на выборку из трёх связанных таблиц
Кто может схематично изобразить запрос на выборку из трёх связанных таблиц? код программы чисто для примера что я делаю. void...

SQL, запрос на выборку полей с определенным значением
Надобно написать средствами SQL выборку, которая при значении какого-то поля <какое-то_поле> = 0 выводило пробел, ну или по вкусу. ...

Как сделать выборку в компоненте StringGrid?
Подскажите как отфильтровать или сделать выборку по критерию в компоненте StringGrid?

Как сделать запрос на выборку
Помогите! Надо сделать чтобы программа считала данные только за прошлый месяц. Есть код где считаются данные за все прошлые месяцы, а...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru