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

Связывание нескольких DBGrid

21.11.2013, 08:57. Показов 5079. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Создал 3 таблицы в Access и связал их там же.
В делфи создал 3 DBGrid. С помощью TDataSource, TADOConnection, TADOQuery и кода привязал к первому DBGrid первую таблицу.

Задача состоит в том, сделать чтобы при выборе из первого Grid какого либо пункта, во втором Grid показывались ячейки привязанные к этому самому пункту.

Третий grid с такой же задачей только при нажатии пункта из 2 grid. Третий пока можно не трогать. Если с 2 поможете, с 3 думаю сам разберусь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2013, 08:57
Ответы с готовыми решениями:

Связывание индикатора DBGrid со значениями в другом DBGrid
Доброго дня! Имеется два DBGrid с подключенными разными взаимосвязанными таблицами, также один ADOConnection, два ADOQuery и два...

Изменение запроса в зависимости от выбранных строк в нескольких DbGrid (в SQL получить значения из нескольких DataSet)
Здравствуйте. Есть таблицы и компоненты: Tbl_authors – Таблица авторов. С ней связаны компоненты: - ADOTable_authors, -...

Связывание двух dbgrid с одной таблицей, а затем одного query с ними
Есть таблица, в ней данные, которые надо вывести в два разных грида. Для вывода в каждый я создал по компоненте TTable, и прописал в каждом...

7
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
21.11.2013, 09:16
Данный метод называется "Master-Detail"
0
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 18
21.11.2013, 09:28  [ТС]
Цитата Сообщение от ZfoxAK Посмотреть сообщение
Данный метод называется "Master-Detail"
Программист я начинающий. Можно поконкретней куда вот это сунуть:

Delphi
1
2
3
SELECT * FROM dbo.A_Detail
WHERE
A_MASTER_ID=:A_MASTER_ID
в моем коде:
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, Menus, DB, ADODB;
 
type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DBGrid3: TDBGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    DataSource1: TDataSource;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DBGrid2: TDBGrid;
    procedure N1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DataSource2DataChange(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.N1Click(Sender: TObject);
begin
form1.Close;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM НаселенныйПункт');
ADOQuery1.Active:=True;
end;
 
end.
Добавлено через 1 минуту
и нужно ли привязывать каждую таблицу к каждому Grid?
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
21.11.2013, 09:53
Цитата Сообщение от Gigson Посмотреть сообщение
Программист я начинающий. Можно поконкретней куда вот это сунуть: Код Delphi
SELECT * FROM dbo.A_Detail
WHERE
A_MASTER_ID=:A_MASTER_ID
Как бы поделикатней сказать... куда засунуть пример... ))
SQL запрос помещают в свойство ADOQuery.SQL
Цитата Сообщение от Gigson Посмотреть сообщение
ADOQuery1.Active:=True;
Delphi
1
ADOQuery1.Open;
этот вариант лучше для запросов типа Select.
DBGrid информации не содрежит, данная компанента для отображения.
Данные содержита компоненты типа DataSet к которым относятся ADOQuery. По этому связывать нужно по схеме.
ADOConnection1 <- ADOQuery1 <- DataSource1 <- ADOQuery2 <- DataSource2 ... DataSource1 <- DBGrid1 ... DataSource2 <- DBGrid2

Добавлено через 6 минут
В ADOQuery2 помещается запрос на вывод данных зависимых от выбора.
Цитата Сообщение от Gigson Посмотреть сообщение
SELECT * FROM dbo.A_Detail
WHERE
A_MASTER_ID=:A_MASTER_ID
Здесь A_MASTER_ID ( поле из таблице1) =:A_MASTER_ID (это так называемй параметр, типо переменной, через который передается значение в запрос.
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
21.11.2013, 10:25

Вроде такая схема соединения.
Активировать нужно сначало ADOQuery1, за тем ADOQuery2.
0
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 18
25.11.2013, 08:36  [ТС]
Цитата Сообщение от ZfoxAK Посмотреть сообщение
Данный метод называется "Master-Detail"
"Для этого на форму нужно положить еще один компонент DataSet (Detail).
Со следующим SQL запросом..."
Я так понял DataSet берется из ADO, а вот как сделать SQL запрос?

p.s. Я всё связал так как вы писали выше. Спасибо вам огромное за внимание.
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
25.11.2013, 09:40
Цитата Сообщение от Gigson Посмотреть сообщение
Я так понял DataSet берется из ADO .....
ADOQuery и есть Dataset. DataSet хранить данные полученные SQL запросом из БД. Для подключения к самой БД при помощи СУБД осуществляется с использованием компоненты в данном случае ADOConnection1
Цитата Сообщение от Gigson Посмотреть сообщение
а вот как сделать SQL запрос?
На панели Инспекторе объектов компоненты ADOQuery2 находишь свойство SQL нажимаешь и в появившемся окне вносишь след код "
SQL
1
2
SELECT * FROM (таблицу которую нужно вывести) 
WHERE Имя ключевого поля = :Имя параметра сопадающего с именем ключевого поля
"
0
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 18
25.11.2013, 10:22  [ТС]
Цитата Сообщение от ZfoxAK Посмотреть сообщение
ADOQuery и есть Dataset. DataSet хранить данные полученные SQL запросом из БД. Для подключения к самой БД при помощи СУБД осуществляется с использованием компоненты в данном случае ADOConnection1

На панели Инспекторе объектов компоненты ADOQuery2 находишь свойство SQL нажимаешь и в появившемся окне вносишь след код "
SQL
1
2
SELECT * FROM (таблицу которую нужно вывести) 
WHERE Имя ключевого поля = :Имя параметра сопадающего с именем ключевого поля
"
Ясно спасибо огромное!!!
К сожалению мне так тяжело дается, что помог только этот сайт
http://devdelphi.ru/?p=1271#comment-21360
расписано там как говорится для чайников)

С задачей справился!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2013, 10:22
Помогаю со студенческими работами здесь

Перенос нескольких строк DbGrid
У меня есть 2 DBGrida , задача: Я выделяю несколько строк в 1Гриде и надо перенести во второй, только все выделенные значения должны...

Поиск нескольких строк в DBGrid
Добрый вечер. Я для поиска в DBGrid использую: Table1.Locate('Fio klienta',Edit1.Text,); Да, оно работает. Но вопрос в следующем...

Вывод данных нескольких таблиц в dbgrid
День добрый! Есть три таблицы (структура одинакова, данные - нет, БД - MySQL, работаю через ADO). Хочется проводить поиск одновременно в...

Связывание картинок с DBGrid
Есть DBGrid,в которой отображены данные. Нужно чтобы при нажатии на id появлялась картинка, связанная с данной записью, нажимаешь на другой...

Связывание нескольких таблиц
вот пытаюсь связать несколько таблиц в &quot;Схеме данных&quot; а само задание таково необходимо связать таблицы Группы студентов и Студенты,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru