Сетка БД: Как использовать столбец текущей строки одного в качестве индекса в другой?
Я не уверен, что название вопроса достаточно ясное, пожалуйста, не стесняйтесь редактировать его.
По сути, у меня есть две сетки БД, которые отражают две таблицы базы данных, каждая из которых показывает одну.
Когда пользователь выбирает строку в первой таблице (давайте назовем ее oders
), Я хочу обновить вторую информацию о любых строках, соответствующих столбцу выбранной строки первой таблицы.
Скажем, например, эта таблица orders
имеет колонку customer_id
и я хочу заполнить вторую таблицу (давайте назовем это order_details
) с подробностями всех заказов от этого клиента, один заказ на строку.
Я могу подключить 2 @ источник данных, запрос и подключение к двум TDbGrid
с, но я застрял в том, как кодировать order_details
SQL.
SQL для orders
просто SELECT * from orders
а другой?
Я хочу что-то вроде SELECT * from order_details WHERE cutomer_id=<orderQuery>.currentRow.FieldByName("customer_id").AsInteger
- но я не знаю, как это сделать...
Может ли кто-нибудь помочь мне с кодом Delphi?
Кроме того, как только я установлю эти отношения, выберу новую строку в orders
Сетка БД автоматически обновляет order_details
Сетка БД? Или мне нужно добавить код для этого.
Ps я знаю что нет books
теги (больше жаль), но может ли кто-нибудь порекомендовать хорошую книгу, которая объясняет основы программирования элементов управления с учетом БД? Я явно нуждаюсь в этом. Спасибо
1 ответ
Используйте параметризованный запрос для подробной (дочерней) базы данных:
SELECT * FROM Order_Details od WHERE od.CustomerID = :CustomerID
Затем установите дочерний запрос MasterSource
к родителю (Order
) источник данных, а MasterFields
в CustomerID
, (Если есть несколько столбцов, которые связывают два, разделите их ;
, как в CustomerID;OrderNumber
.)
Каждый раз, когда вы прокручиваете родительский элемент (изменяете выбранную запись в родительском DBGrid), дочерний запрос будет выполняться с идентификатором родительской строки, автоматически передаваемым в качестве параметра.