Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 70

Combobox в связанных таблицах

08.11.2014, 12:40. Показов 2330. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, подскажите есть два комбобокса, в один из них загоняются значения полей из таблицы 1, нужно чтобы во второй комбобокс попадали значения определённого поля связанной таблицы 2

допустим, есть у вас таблица "продукт" и таблица "марки продуктов". В "продуктах" - только наименования, например "рис", "макароны" и т.д. В "марках продуктов" - соответствия вида "Макфа|макароны", "Вау|рис", "Мискузи|рис" и т.д.
Соответственно, если выбранный продукт - "макароны", то нужно вывести только те марки продуктов, которые соответствуют макаронам
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2014, 12:40
Ответы с готовыми решениями:

Фильтр в связанных таблицах
Есть две таблицы - Сотрудники и Трудовая книжка.Связь один-ко-многим. Нужно осуществить поиск в трудовой книжке по значению, но фильтр...

Отображение данных в связанных таблицах
Всем привет! Имеются две таблицы: tovar (id, naimenovanie, proizvoditel) и proizvoditel (id, organizazia, adres) . Связь осуществляется по...

Сохранение данных в БД в связанных таблицах
Всем привет! У меня есть 4 таблицы, из которых 3 завязаны на одну многие ко многим (группа, предмет, курс на специальность). В программе я...

7
129 / 129 / 41
Регистрация: 17.10.2013
Сообщений: 335
09.11.2014, 00:21
примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  ComboBox2.Clear;
  with ZQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT DISTINCT marka FROM table2 WHERE product = :product');
      Params.ParamByName('product').Value:= ComboBox1.Text;
      Open;
      First;
    end;
  while not ZQuery1.EOF do
    begin
      ComboBox2.Items.Add(ZQuery1.FieldByName('marka').AsString);
      ZQuery1.Next;
    end;
end;
хотя в таблице 2 логичнее хранить ID продуктов, а не само имя
0
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 70
09.11.2014, 10:42  [ТС]
благодраю
0
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 70
15.11.2014, 10:49  [ТС]
В догонку как заполнить dbgrid записями связанными с другой таблицей значение записей которой выведено в комбобокс, то есть при выборе значения в комбобокс заполняется dbgrid зависимыми значениями.
Прикрепляю свою работу
логин для входа mstom
пароль 19031987
Вложения
Тип файла: zip Прога 2.zip (959.8 Кб, 21 просмотров)
0
129 / 129 / 41
Регистрация: 17.10.2013
Сообщений: 335
15.11.2014, 14:58
Цитата Сообщение от Мстом Посмотреть сообщение
при выборе значения в комбобокс заполняется dbgrid зависимыми значениями
так же, как во втором посте. примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.ComboBox2Select(Sender: TObject);
begin
  with ZQuery2 do //отвечает за набор данных, отображаемых в dbgrid'е
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT field1, field2, ..., fieldN FROM table3 WHERE field1 = :val_from_CB');
      Params.ParamByName('val_from_CB').Value:= ComboBox2.Text;
      Open;
      First;
    end;
end;
и все же - связывать логичнее по id (числовому значению), а не по текстовому полю. только в таком случае необходимо использовать DBLookupComboBox, который позволит обращаться с id записи и, в то же время, показывать пользователю понятное текстовое описание или пойти таким путем
0
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 70
15.11.2014, 15:03  [ТС]
у меня они связаны по id и ParentID я вверху пример привёл, если возможно посмотрите пожалуйста саму работу может там где-то касяк
0
129 / 129 / 41
Регистрация: 17.10.2013
Сообщений: 335
15.11.2014, 15:40
Лучший ответ Сообщение было отмечено Мстом как решение

Решение

Мстом, поправил вот эти процедуры:
Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
procedure TBase_client.FormCreate(Sender: TObject);
var
i: integer;
begin
   ComboBox1.Items.Clear;
   ADOQuery1.Close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('select * from base');
   ADOQuery1.Open;
   ADOQuery1.First;
   for  i := 0 to ADOQuery1.RecordCount - 1 do
   begin
//здесь
      ComboBox1.Items.AddObject(ADOQuery1.FieldByName('Name').AsString, TObject(ADOquery1.fieldbyname('Код').AsInteger));
      ADOQuery1.Next;
   end;
   ADOQuery1.Close;
end;
 
procedure TBase_client.ComboBox1Select(Sender: TObject);
begin
kod:=integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
ComboBox2.Clear;
  with AdoQuery1 do
    begin
      Close;
      SQL.Clear;
//здесь
      SQL.Add('SELECT DISTINCT Код, Группа FROM groups WHERE Parentid = :Код');
      Parameters.ParamByName('Код').Value:=kod;
      Open;
      First;
    end;
  while not AdoQuery1.EOF do
    begin
//здесь
      ComboBox2.Items.AddObject(AdoQuery1.FieldByName('Группа').AsString,TObject(AdoQuery1.FieldByName('Код').AsInteger));
      AdoQuery1.Next;
    end;
end;
 
procedure TBase_client.ComboBox2Select(Sender: TObject);
begin
kod:=integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);
  with AdoQuery2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM client WHERE Parentid = :Группа');
//здесь
      Parameters.ParamByName('Группа').Value:= kod;
      Open;
      First;
    end;
{ Хwhile not AdoQuery2.EOF do
    begin
      ComboBox2.Items.Add(AdoQuery1.FieldByName('Группа').AsString);
      AdoQuery2.Next;
    end;}
end;
1
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 70
18.11.2014, 14:27  [ТС]
в продолжение темы подскажите в такой проблеме нужно на основании имеющегося ключевого поля вывести таблицу связанную с ней, а в той таблице несколько полей связаны с другими таблицами, в аксесе я вижу те данные которые я выбрал в списке данных из других таблиц, а в делфи я вижу id выбранных данных

вот по такому запросу выходит пустая таблица
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TBase_client.ComboBox2Select(Sender: TObject);
begin
kod:=integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);
  with AdoQuery2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT relatives.Фамилия, relatives.Имя, relatives.Отчество, client.Телефон, ');
      SQL.Add('client.Электронная почта, client.Дата_рождения, client.Мать, client.Отец,');
      SQL.Add('client.[Брат\Сестра], doct.Учёт, doct.Специализация, client.Дата_Время_приёма, client.Причина');
      SQL.Add('FROM relatives INNER JOIN ((base INNER JOIN groups ON base.Код = groups.ParentID)');
      SQL.Add('INNER JOIN (doct INNER JOIN client ON doct.Код = client.Учёт_врача) ON groups.Код = client.ParentID)');
      SQL.Add('ON (base.id = relatives.id) AND (relatives.id = client.[Брат\Сестра]) AND (relatives.id = client.Отец)');
      SQL.Add('AND (relatives.id = client.Мать) AND (relatives.id = client.ФИО_клиента)WHERE 
      (((client.Parentid) = :kod))');
      Parameters.ParamByName('kod').Value:=kod;
      Open;
      First;
    end;
end;
Вот по такому запросу строиться таблица но с id а не с содержимым ячеек
Delphi
1
2
3
4
5
6
7
8
9
 with AdoQuery2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM client WHERE Parentid = :Группа');
      Parameters.ParamByName('Группа').Value:= kod;
      Open;
      First;
    end;
подскажите как подправить запрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2014, 14:27
Помогаю со студенческими работами здесь

Как удалить записи в связанных таблицах
Всем привет, как мрожно удалить записи в связанных табюлицах? 3 таблицы свяаны между собой, нужно удалить записи. Adoquery1.delete не...

Как обновить данные?.., ..в связанных таблицах ADOTable
Народ, подскажите пожалуйста, у меня возникла классическая проблема с обновлением строк в базе данных, покапавшись в инете нашёл множество...

Sql запрос на поиск полей в связанных таблицах
Доброго времени суток имеется база данных со связанными столбцами таблица 1 main с колонками id_raz и raz, и вторая таблица ...

Построить правильный запрос в связанных таблицах БД Firebird
вопрос задавался мной но так и не решил, может не так спросил. вопрос перестроил

Редактирование данных в связанных таблицах
Подскажите, пожалуйста, как правильно выполнять редактирование данных в связанных таблицах? Есть таблицы tbl1(tbl1ID, Name, Description,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты 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. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru