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

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

27.09.2024, 20:02. Показов 11019. Ответов 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
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 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
Сообщений: 581
Записей в блоге: 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
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 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
Сообщений: 581
Записей в блоге: 2
28.09.2024, 21:27
Цитата Сообщение от Nikita_Soprano Посмотреть сообщение
в институтах Белорусси и г.Сочи по программированию
Странно, мне кажется это слишком простое задание для институтов по программированию. Если только первый месяц первого курса и то если человек наобум выбрал специальность.
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
28.09.2024, 22:21
Цитата Сообщение от Nikita_Soprano Посмотреть сообщение
придется полностью переделывать бд
именно. Проектирование БД - наиболее значимая часть работы при создании приложений, подобных Вашему.
0
0 / 0 / 0
Регистрация: 10.10.2023
Сообщений: 118
30.09.2024, 18:20  [ТС]
Почему не выводит в combobox2?
Миниатюры
Как сделать запрос-выборку  
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 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
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 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
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru