работа с ADOQuery1 & ADOQuery2 - PullRequest
       20

работа с ADOQuery1 & ADOQuery2

1 голос
/ 26 июня 2010

У меня есть ADOQuery1, который является моей главной таблицей, и теперь я хочу использовать другой ADOQuery2 для моей таблицы подробностей, но на самом деле я не могу найти правильный способ решения этой проблемы.

ADOQuery1 nr- Autonum название местный колич. ADOQuery2 Nro _ Autonum Имя
l1 l2
l3

может кто-нибудь помочь thank's

Ответы [ 2 ]

1 голос
/ 26 июня 2010

Для AdoQuery вы должны использовать свойство DataSource.Вот что вы должны сделать:

1 - Перетащите AdoQuery на форму в качестве основного набора данных и запишите запрос, используя его свойство SQL.

2 - Удалите компонент DataSource на формеи подключите его к основному AdoQuery, который вы создали на шаге 1.

3 - Перетащите еще один AdoQuery на форму в качестве набора подробных данных.

4 - Установите свойство DataSource вашего подробного набора данныхисточник данных, который подключен к основному набору данных (см. шаг 2).

5 - запишите SQL-запрос для вашего подробного набора данных, используя его свойство SQL;в запросе должно быть предложение WHERE, которое фильтрует ваш подробный набор данных с использованием параметра, имя которого совпадает с именем одного из полей в главном источнике данных.Например, предположим, что у вас есть поле идентификатора в вашем наборе основных данных и поле с именем MasterID в вашем наборе подробных данных, которое является внешним ключом для поля идентификатора основного набора данных.Теперь, чтобы подключить подробный набор данных к основному, используя эти поля, вы можете написать запрос для подробного набора данных следующим образом:

SELECT * FROM DetailTable WHERE MasterID = :ID

Как видите, у нас есть параметр SQL с именем ID, которыйимеет то же имя, что и поле ID в источнике основных данных.Теперь, когда вы просматриваете записи в основном источнике данных, Delphi автоматически получает значение поля ID и использует его в качестве значения параметра ID в наборе подробных данных, а также запрашивает набор подробных данных.Вам не нужно устанавливать значение параметра и запрашивать явно.Это будет сделано автоматически для вас.

Я надеюсь, что это прояснит вам, как установить отношения мастер-деталь с использованием наборов данных AdoQuery.

С уважением

0 голосов
/ 26 июня 2010

У меня есть некоторые компоненты, которые автоматизируют это, но при использовании сырого TADOQuery я так и реализую:

На событии Master TADOQuery.AfterScroll сделайте следующее:

myDetailQuery.Active := False;
myDetailQuery.Params.ParamByName('ID').Value := DataSet.FieldsByName('ID').AsString;
myDetailQuery.Active := True;

Запрос для Detail TADOQuery выглядит следующим образом:

SELECT * FROM DetailTable
WHERE ID = :ID;

Если есть лучший способ, я бы тоже хотел его увидеть.

TADOTable имеет эту встроенную функциональность, поэтому вы можете рассмотреть возможность ее использования. Установите TADOTable.MasterSource. Более подробная информация об этом свойстве содержится в справке Delphi.

...