Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два запроса: главный-детальный / 14 сообщений из 14, страница 1 из 1
13.11.2014, 16:12
    #38805123
myaucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
Access совсем не мой профиль, поэтому не пинайте за тривиальные вопросы

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

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

И еще, если я создаю запрос в режиме SQL и форматирую его так, чтобы удобно было прочитать, разнося ключевые слова по разным строчкам и делая отступы, то при сохранении система сама все склеивает. Можно ли какой-либо настройкой заставить ее это не делать.
...
Рейтинг: 0 / 0
13.11.2014, 16:19
    #38805132
Два запроса: главный-детальный
Создайте еще одну форму на детальном запросе и мастером вставьте ее на главную как субформу. При этом укажите связанные поля.
myauchaя создаю запрос в режиме SQL и форматирую его так, чтобы удобно было прочитать, разнося ключевые слова по разным строчкам и делая отступы, то при сохранении система сама все склеивает. Можно ли какой-либо настройкой заставить ее это не делать. Нельзя. И вообще, 95% запросов проще и удобнее создавать в конструкторе.
...
Рейтинг: 0 / 0
13.11.2014, 16:23
    #38805140
myaucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
А как указывать связанные поля?!
...
Рейтинг: 0 / 0
13.11.2014, 16:27
    #38805146
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
Основные поля / подчиненные поля они же LinkMaster / LinkChildFields
Мощный и удобный инструмент аксеса. Можно задавать динамически в коде.
...
Рейтинг: 0 / 0
13.11.2014, 16:39
    #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
13.11.2014, 16:53
    #38805213
?????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
...
Рейтинг: 0 / 0
13.11.2014, 17:16
    #38805249
myaucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
Еще раз - на ОДНУ форму бросаю два запроса. Как их связать. Нужно конкретное решение приведенной задаче. Просьба никакие ссылки никуда не давать
...
Рейтинг: 0 / 0
13.11.2014, 17:37
    #38805297
?????
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
myauchaЕще раз - на ОДНУ форму бросаю два запроса. Как их связать. Нужно конкретное решение приведенной задаче. Просьба никакие ссылки никуда не давать
Какой капризный. Конечно, в Оракле работает, а тут какой-то Акцесс. Выдрал пример из ссылки.
...
Рейтинг: 0 / 0
13.11.2014, 18:04
    #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
13.11.2014, 20:43
    #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
14.11.2014, 08:43
    #38805714
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
myauchaЕще раз - на ОДНУ форму бросаю два запроса. Как их связать. Нужно конкретное решение приведенной задаче. Просьба никакие ссылки никуда не давать
Никогда не стройте формы таким образом. Только через субформы. Источником объекта всегда должна быть форма. Если будете и дальше требовать готового решения на блюдечке, вас обзовут нехорошими словами и будут правы. Я - первый в очереди.
...
Рейтинг: 0 / 0
14.11.2014, 10:55
    #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
14.11.2014, 11:18
    #38805943
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
Линкмастерчаилд настраивается мышкой в конструкторе без кодирования.
Линкмастерчаилд обеспечивает корретную работу в режиме редактирования, в том числе добавления и удаления в обоих формах - в главной форме и в детальной.
Чтобы полноценно эмулировать его функциональность надо перехватыввать и писать код в нескольких событиях, одного каррент не достаточно.
...
Рейтинг: 0 / 0
15.11.2014, 19:28
    #38807165
6652
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два запроса: главный-детальный
myauchaОсновные поля / подчиненные поля они же LinkMaster / LinkChildFields
Мощный и удобный инструмент аксеса. Можно задавать динамически в коде. DDE-технология - это не инструмент аксеса, а морально устаревший древний рудимент от Microsoft

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


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