powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два запроса: главный-детальный
14 сообщений из 14, страница 1 из 1
Два запроса: главный-детальный
    #38805123
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Access совсем не мой профиль, поэтому не пинайте за тривиальные вопросы

Надо быстренько проанализировать данные нескольких таблиц. Импортировал таблицы, создал Главный SQL-запрос, затем создал форму и добавил на нее созданный запрос, отобразились данные. Теперь я хочу ниже основного запроса в той же форме разместить детальный (то есть должна появиться еще одна табличка). Предполагается, что становясь на запись в Главной таблице я буду сразу же получать обновленную информацию в детальной (то есть текущая выбранная строка в Главном отчете, точнее некоторые ее поля, будут являться входными параметрами для детального отчета).

Возможно такое?! Если да, то как правильно прописать параметры во входном запросе и связать два запроса между собой?! Оба запроса я создавал в конструкторе запросов в виде SQL-текста

И еще, если я создаю запрос в режиме SQL и форматирую его так, чтобы удобно было прочитать, разнося ключевые слова по разным строчкам и делая отступы, то при сохранении система сама все склеивает. Можно ли какой-либо настройкой заставить ее это не делать.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805132
Создайте еще одну форму на детальном запросе и мастером вставьте ее на главную как субформу. При этом укажите связанные поля.
myauchaя создаю запрос в режиме SQL и форматирую его так, чтобы удобно было прочитать, разнося ключевые слова по разным строчкам и делая отступы, то при сохранении система сама все склеивает. Можно ли какой-либо настройкой заставить ее это не делать. Нельзя. И вообще, 95% запросов проще и удобнее создавать в конструкторе.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805140
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как указывать связанные поля?!
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805146
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основные поля / подчиненные поля они же LinkMaster / LinkChildFields
Мощный и удобный инструмент аксеса. Можно задавать динамически в коде.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805178
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте с уловным примером попробуем разобраться.

Запрос1
SELECT
F1, F2, F3
FROM
T1

Запрос2
SELECT
F1, F2
FROM
T2
WHERE
F1 = :F1 - предполагается, что в :F1 будет подставляться значение текущей строки из T1.F1

Создаю форму
На форму помещаю Запрос1 (в свойстве Объект-источник стоит Запрос.Запрос1)
На форму помещаю Запрос2 (в свойстве Объект-источник стоит Запрос.Запрос2)

Свойства основные и подчиненные поля пустые. Если пытаюсь дважды щелкнуть по ним, то получаю "Невозможно создать связь между свободными формами". Руководствуясь условным примером, как и что надо прописать в свойствах?!
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805213
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805249
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз - на ОДНУ форму бросаю два запроса. Как их связать. Нужно конкретное решение приведенной задаче. Просьба никакие ссылки никуда не давать
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805297
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
myauchaЕще раз - на ОДНУ форму бросаю два запроса. Как их связать. Нужно конкретное решение приведенной задаче. Просьба никакие ссылки никуда не давать
Какой капризный. Конечно, в Оракле работает, а тут какой-то Акцесс. Выдрал пример из ссылки.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805337
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте еще раз попробуем...

Запрос 1
Код: plsql
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.
SELECT 
  t1.kokrs AS coep_kokrs,
  t1.belnr AS coep_belnr,
  t1.buzei AS coep_buzei,

  t2.aufnr AS aufk_aufnr,

  t4.ihrez AS ekko_ihrez,
  t4.unsez AS ekko_unsez,

  count(*) AS cnt
FROM 
  (
    (
      covp_auak AS t1 

      INNER JOIN aufk AS t2 ON 
      t1.parob1 = t2.objnr
    )
    INNER JOIN ekkn AS t3 ON
    t2.aufnr = t3.aufnr
  )
  INNER JOIN ekko AS t4 ON
  t3.ebeln = t4.ebeln

WHERE 
  t2.autyp = '30' AND
  t4.bstyp = 'F'

GROUP BY
  t1.kokrs,
  t1.belnr,
  t1.buzei,
  t2.aufnr,
  t4.ihrez,
  t4.unsez

HAVING 
  count(*) > 1



Запрос 2
Код: plsql
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.
SELECT 
  t1.kokrs AS coep_kokrs,
  t1.belnr AS coep_belnr,
  t1.buzei AS coep_buzei,

  t2.aufnr AS aufk_aufnr,

  t4.ihrez AS ekko_ihrez,
  t4.unsez AS ekko_unsez
FROM 
  (
    (
      covp_auak AS t1 

      INNER JOIN aufk AS t2 ON 
      t1.parob1 = t2.objnr
    )
    INNER JOIN ekkn AS t3 ON
    t2.aufnr = t3.aufnr
  )
  INNER JOIN ekko AS t4 ON
  t3.ebeln = t4.ebeln

WHERE 
  t2.autyp = '30' AND
  t4.bstyp = 'F' AND

  t1.kokrs = [Формы]![Form1]![Q1]![coep_kokrs] AND 
  t1.belnr = [Формы]![Form1]![Q1]![coep_belnr] AND
  t1.buzei = [Формы]![Form1]![Q1]![coep_buzei]



1. Создаю форму Form1
2. На форму кидаю первый запрос - он становится подчиненной формой Q1, объект-источник Запрос.Запрос1, данные отображаются
3. На форму кидаю второй запрос - он становится подчиненной формой Q2, объект-источник Запрос.Запрос2, данные не отображаются, а появляется диалоговое окошко для ввода первого параметра [Формы]![Form1]![Q1]![coep_kokrs]

Я хочу понять, как во втором запросе правильно прописать ссылку на текущую строку первого.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805481
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Уберите из запроса2 эти условия.
t1.kokrs = [Формы]![Form1]![Q1]![coep_kokrs] AND
t1.belnr = [Формы]![Form1]![Q1]![coep_belnr] AND
t1.buzei = [Формы]![Form1]![Q1]![coep_buzei]
2. См пример для Вашего случая.
3. Лучше, все-таки для сабформ использовать табличные формы на запросах, а не сами запросы.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805714
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaЕще раз - на ОДНУ форму бросаю два запроса. Как их связать. Нужно конкретное решение приведенной задаче. Просьба никакие ссылки никуда не давать
Никогда не стройте формы таким образом. Только через субформы. Источником объекта всегда должна быть форма. Если будете и дальше требовать готового решения на блюдечке, вас обзовут нехорошими словами и будут правы. Я - первый в очереди.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805894
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основные поля / подчиненные поля они же LinkMaster / LinkChildFields
Мощный и удобный инструмент аксеса. Можно задавать динамически в коде. DDE-технология - это не инструмент аксеса, а морально устаревший древний рудимент от Microsoft

Никогда не стройте формы таким образом. Только через субформы. Источником объекта всегда должна быть форма. Если будете и дальше требовать готового решения на блюдечке, вас обзовут нехорошими словами и будут правы. Я - первый в очереди. Прежде чем называть кого-то плохими словами или даже намекать о такой возможности, надо хотя бы иметь небольшое представление о том, с кем имеешь дело, чтобы потом не выглядеть бледно

А теперь разумное и удобное решение (может кому и пригодится в случаях, если требуется выгрузить откуда-нибудь данные и воспользоваться аксесом, как средством быстрого анализа)...

1. Главный запрос Q1 (суть сиквела не важна, просто привожу для наглядности)
Код: plsql
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.
SELECT 
  t1.kokrs AS coep_kokrs,
  t1.belnr AS coep_belnr,
  t1.buzei AS coep_buzei,

  t2.aufnr AS aufk_aufnr,

  t4.ihrez AS ekko_ihrez,
  t4.unsez AS ekko_unsez,

  count(*) AS cnt
FROM 
  (
    (
      covp_auak AS t1 

      INNER JOIN aufk AS t2 ON 
      t1.parob1 = t2.objnr
    )
    INNER JOIN ekkn AS t3 ON
    t2.aufnr = t3.aufnr
  )
  INNER JOIN ekko AS t4 ON
  t3.ebeln = t4.ebeln

WHERE 
  t2.autyp = '30' AND
  t4.bstyp = 'F'

GROUP BY
  t1.kokrs,
  t1.belnr,
  t1.buzei,
  t2.aufnr,
  t4.ihrez,
  t4.unsez

HAVING 
  count(*) > 1



2. Детальный запрос Q2 (особое внимание следует уделить способу передачи параметров из первого запроса)
Код: plsql
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.
SELECT 
  t1.kokrs AS coep_kokrs,
  t1.belnr AS coep_belnr,
  t1.buzei AS coep_buzei,

  t2.aufnr AS aufk_aufnr,

  t4.ihrez AS ekko_ihrez,
  t4.unsez AS ekko_unsez
FROM 
  (
    (
      covp_auak AS t1 

      INNER JOIN aufk AS t2 ON 
      t1.parob1 = t2.objnr
    )
    INNER JOIN ekkn AS t3 ON
    t2.aufnr = t3.aufnr
  )
  INNER JOIN ekko AS t4 ON
  t3.ebeln = t4.ebeln

WHERE 
  t2.autyp = '30' AND
  t4.bstyp = 'F' AND

  t1.kokrs = [Forms]![F1]![Q1]![coep_kokrs] AND 
  t1.belnr = [Forms]![F1]![Q1]![coep_belnr] AND
  t1.buzei = [Forms]![F1]![Q1]![coep_buzei]



3. Далее, создаем ПУСТУЮ форму и бросаем на нее оба запроса Q1 и Q2

4. В событии на открытие формы прописываем макрос Q1_Current (имя может быть любым), который будет вызываться при перемещении по строчкам главного запроса

Код: vbnet
1.
2.
3.
4.
Private Sub Form_Open(Cancel As Integer)
    
    Q1.Form.OnCurrent = "=Q1_Current()"
End Sub


5. Сам макрос реализуем в модуле Module, в котором просто обновляем детальный запрос

Код: vbnet
1.
2.
3.
4.
Public Function Q1_Current()

    [Forms]![F1]![Q2].Requery
End Function



Все! Никаких средств DDE и дополнительных контролов на форме.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38805943
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Линкмастерчаилд настраивается мышкой в конструкторе без кодирования.
Линкмастерчаилд обеспечивает корретную работу в режиме редактирования, в том числе добавления и удаления в обоих формах - в главной форме и в детальной.
Чтобы полноценно эмулировать его функциональность надо перехватыввать и писать код в нескольких событиях, одного каррент не достаточно.
...
Рейтинг: 0 / 0
Два запроса: главный-детальный
    #38807165
6652
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
myauchaОсновные поля / подчиненные поля они же LinkMaster / LinkChildFields
Мощный и удобный инструмент аксеса. Можно задавать динамически в коде. DDE-технология - это не инструмент аксеса, а морально устаревший древний рудимент от Microsoft

А какая связь между (действительно устаревшей технологией) DDE (Dynamic Data Exchange (DDE) — механизм взаимодействия приложений в операционных системах Microsoft Windows и OS/2) и LinkMaster / LinkChildFields??
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два запроса: главный-детальный
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]