Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
24 / 23 / 0
Регистрация: 10.10.2014
Сообщений: 886

Запрос записей из подчинённой формы

07.05.2017, 15:34. Показов 2120. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Подскажите пожалуйста, как запросить данные из подчинённой формы с учётом имеющейся у неё сортировки и фильтра? Чтобы этот запрос был наподобие запроса из таблицы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2017, 15:34
Ответы с готовыми решениями:

Подсчет количества записей в подчиненной форме из другой подчиненной формы
Форумчане, всем привет. На форме 2 подчиненной формы. При переходе по одной отображаются данные другой. Сделал кнопку...

Сумма из подчиненной формы, отмена записей в подчиненной форме
Нужна сразу помощь по четырем пунктам, форма КвитанцияСкупкиОбмена надо: 1. Суммирование поля Сумма в подчиненной форме с занесением в...

Перебор записей подчиненной табличной формы
как программно из главной формы перебрать все записи подчиненной табличной формы, связанных по одному полю (КодПродажи)? главная -...

13
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
07.05.2017, 15:40
Цитата Сообщение от GafarovIS Посмотреть сообщение
как запросить данные из подчинённой формы с учётом имеющейся у неё сортировки и фильтра?
и почему такие вопросы хитрые, это в выходной-то (и без примера базы)

-----
короче --я не поняла, куда и что надо вытащить
0
24 / 23 / 0
Регистрация: 10.10.2014
Сообщений: 886
07.05.2017, 15:55  [ТС]
Цитата Сообщение от shanemac51 Посмотреть сообщение
и почему такие вопросы хитрые, это в выходной-то (и без примера базы)
наверное я не с той ноги встал )
Цитата Сообщение от shanemac51 Посмотреть сообщение
короче --я не поняла, куда и что надо вытащить
приложил БД. суть в том чтобы делать запросы данных, содержащихся в табличной форме, так как будто это была не табличная форма, а сама таблица. Прочто эта табличная форма может быть подтаблицей и у неё будут свои фильтр и сортировка. Поэтому нужно запрашивать данные из формы, а не из таблицы.
Вложения
Тип файла: rar Database1.rar (14.8 Кб, 10 просмотров)
0
24 / 23 / 0
Регистрация: 10.10.2014
Сообщений: 886
07.05.2017, 16:01  [ТС]
может делать дополнительный запрос и обусловливать его фильтром, сортировкой и основнойзаписью из формы?
0
Эксперт MS Access
 Аватар для Eugene-LS
12069 / 5851 / 1495
Регистрация: 05.10.2016
Сообщений: 16,446
07.05.2017, 16:05
GafarovIS, лихо излагаете!
Читаю в пятый раз:
"так как будто это была не табличная форма, а сама таблица. Прочто эта табличная форма может быть подтаблицей и у неё будут свои фильтр и сортировка. Поэтому нужно запрашивать данные из формы, а не из таблицы."

НОЛЬ!!!
Кто нибудь понял??? - а я точно нет.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
07.05.2017, 16:05
Лучший ответ Сообщение было отмечено GafarovIS как решение

Решение

Цитата Сообщение от GafarovIS Посмотреть сообщение
как запросить данные из подчинённой формы с учётом имеющейся у неё сортировки и фильтра? Чтобы этот запрос был наподобие запроса из таблицы.
Смотря, что требуется. Если нужен рекордсет отсортированной и отфильтрованной формы, то вообще нет проблем. Рекордсет формы и есть отсортированный и отфильтрованный. Его можно присвоить другой форме, если совпадают поля или пользоваться в циклах и выражениях.
Если требуется именно запрос, то есть сложности разного порядка. В самом простом случае можно создать динамический SQL и присвоить его любому сохраненному запросу, задавая свойство SQL для QueryDef запроса, где во Where будет Filter формы, а в OrderBy свойство OrderBy формы. Но если фильтрация на форме была по видимому значению поля со списком, то в Filter появится служебное слово Lookup, говорящее, что есть ссылка на поле иной таблицы. Т.е. просто так в скл не вставишь.
Построение динамического SQL и присваивание сохраненному запросу выглядит примерно так
Visual Basic
1
2
3
4
5
6
7
8
Dim s
s="select * " _
& " from (" & me.Recordsource _
& " where " & Me.Filter _
& " order by " & Me.Orderby & ")"
s=replace(s, ";", "")
'Присваиваем SQL-выражение сохраненному запросу, например с именем Temp
Currentdb.Querydefs("Temp").sql=s
Вместо сохраненного запроса можно создавать запрос "на лету" и сохранять его. Но я предпочитаю пользоваться уже имеющимся запросом, предназначенным именно для этих целей.
2
24 / 23 / 0
Регистрация: 10.10.2014
Сообщений: 886
07.05.2017, 16:12  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
НОЛЬ!!!
Кто нибудь понял??? - а я точно нет.
так ведь сегодня выходной )

Добавлено через 1 минуту
Цитата Сообщение от mobile Посмотреть сообщение
Рекордсет формы и есть отсортированный и отфильтрованный
а если эта форма является подчинённой подтаблицей и данные в ней соответствуют основному полю основной формы, тогда рекордсет это тоже содержит?
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
07.05.2017, 16:15
Лучший ответ Сообщение было отмечено GafarovIS как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim FRm As Form, _
    S As String
Set Frm = Forms("имя основной формы").<SubForm>.Form
With Frm
   S = .RecordSource
   If .Filter <> "" And .FilterOn Then
      S = S & " WHERE " & .Filter
   End If
   If .OrderBy <> "" Then
      S = S & " ORDER BY " & .OrderBy
   End If
End With
CurrentDb.QueryDefs("имя запроса").SQL = S
DoCmd.OpenQuery "имя запроса"
2
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
07.05.2017, 16:23
Лучший ответ Сообщение было отмечено GafarovIS как решение

Решение

забыла правда про сортировку
изменяйте выбранные позиции и будет генерироваться запрос по текущему состоянию
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Form_Current()
Dim s1, s1a, s2, s2a
s1 = Me.RecordSource
If s1 Like "select *" Then   '''БЫЛА ОПЕЧАТКА   S1A'''''''''''''''''''''''''''''''''''''''''''''''''''''
s1a = s1
Else
s1a = "select * from [" & s1 & "]"
End If
s2 = Me.Filter & ""
 
If Len(s2) > 0 Then
s2a = " where (" & s2 & ")"
Else
s2a = ""
End If
MsgBox s1a & " " & s2a
 
End Sub
Вложения
Тип файла: zip gaf0507m.zip (24.9 Кб, 4 просмотров)
1
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
07.05.2017, 17:07
Лучший ответ Сообщение было отмечено GafarovIS как решение

Решение

Цитата Сообщение от shanemac51 Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
Dim s1, s1a, s2, s2a 
s1 = Me.RecordSource 
If s1a Like "select *" Then 
s1a = s1 
Else s1a = "select * from [" & s1 & "]" 
End If
Этот кусок вообще непонятен.
Зачем проверка If s1a Like "select *" Then, если s1a объявлено как Variant и есть в этот момент Null.

И сортировки нет.
Фильтр в форме может быть задан, но не применен.

Добавлено через 24 минуты
shanemac51,

Цитата Сообщение от Capi Посмотреть сообщение
Зачем проверка If s1a Like "select *" Then, если s1a объявлено как Variant и есть в этот момент Null.
Ответа, как видно, не дождаться.
Ладно.
Уже и так понятно - там у Вас то ли опечатка, то ли еще что.
Вместо s1a должно было быть s1.

Добавлено через 7 минут
Цитата Сообщение от GafarovIS Посмотреть сообщение
а если эта форма является подчинённой подтаблицей и данные в ней соответствуют основному полю основной формы, тогда рекордсет это тоже содержит?
Если связь через LinkChildFields/LinkMasterFields, то нет.
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
07.05.2017, 18:39
немного пояснений в коде
Visual Basic
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
Private Sub Form_Current()
Dim s1, s1a, s2, s2a, s3, s3a
'''''''''''''''''''''''источник формы'''''''''''''''''''''''''''''''''''''''''
  '''''''''''''не учтен случай с перекрестным хапросом'''''''''''''''''
s1 = Me.RecordSource
  If s1 Like "select *" Then   '''здесь была описка в виде s1a
  ''если источник формы встроенный запрос
  
  s1a = s1
  Else
  s1a = "select * from [" & s1 & "]"
  ''если источник формы таблица или сохраненный запрос
  
 
  End If
 '''''''''''''''''''''фильтр'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''' не учтен случай, если источник формы тоже имеет условие отбора
s2 = Me.Filter & ""
 
  If Len(s2) > 0 Then
  ''табличная форма отслеживает свой фильтр
  s2a = " where (" & s2 & ")"
  Else
  s2a = ""
  End If
 
'''''''''''''''''''''''''сортировка'''''''''''''''''''''''''''''''''''''''''''''''''
s3 = Me.OrderBy & ""
If Len(s3) > 0 Then
''табличная форма отслеживает свою сортировку
s3a = " order by (" & s3 & ")"
Else
s3a = ""
End If
 
MsgBox s1a & " " & s2a & " " & s3a
 
End Sub
Вложения
Тип файла: zip gaf0507m.zip (29.5 Кб, 8 просмотров)
1
24 / 23 / 0
Регистрация: 10.10.2014
Сообщений: 886
31.08.2021, 07:41  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Смотря, что требуется. Если нужен рекордсет отсортированной и отфильтрованной формы, то вообще нет проблем. Рекордсет формы и есть отсортированный и отфильтрованный. Его можно присвоить другой форме, если совпадают поля или пользоваться в циклах и выражениях.
Если требуется именно запрос, то есть сложности разного порядка. В самом простом случае можно создать динамический SQL и присвоить его любому сохраненному запросу, задавая свойство SQL для QueryDef запроса, где во Where будет Filter формы, а в OrderBy свойство OrderBy формы. Но если фильтрация на форме была по видимому значению поля со списком, то в Filter появится служебное слово Lookup, говорящее, что есть ссылка на поле иной таблицы. Т.е. просто так в скл не вставишь.
Построение динамического SQL и присваивание сохраненному запросу выглядит примерно так
Visual Basic
1
2
3
4
5
6
7
8
Dim s
s="select * " _
& " from (" & me.Recordsource _
& " where " & Me.Filter _
& " order by " & Me.Orderby & ")"
s=replace(s, ";", "")
'Присваиваем SQL-выражение сохраненному запросу, например с именем Temp
Currentdb.Querydefs("Temp").sql=s
Вместо сохраненного запроса можно создавать запрос "на лету" и сохранять его. Но я предпочитаю пользоваться уже имеющимся запросом, предназначенным именно для этих целей.
не работает что-то. сейчас опять такая задача появилась. в тот раз так и не реализовал её. куча вопросов возникает:
-сперва надо создать запрос "Temp"?
-какие поля должны быть у этого запроса? они должны совпадать с полями рекордсета формы?
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
31.08.2021, 09:28
Рекордсет вы как получили? Подробнее!
1
24 / 23 / 0
Регистрация: 10.10.2014
Сообщений: 886
03.09.2021, 22:09  [ТС]
Цитата Сообщение от alvk Посмотреть сообщение
Рекордсет вы как получили? Подробнее!
Рекордсет: источник формы - запрос.

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

Копирование записей из подчиненной формы в подчиненную
Две формы, с первой формы надо поле отмеченное галочкой скопировать во вторую форму, Нашла код, в родной БД работает, в моей-нет. Выделяет...

Запрос на вывод последних записей подчиненной таблицы
Здаравствуйте. Есть 2 таблицы: Таб1; Таб2 (подчиненая). Каждой записи Таб1 соответствует 2-4 записей из Таб2. Как сформировать запрос...

Перенос записей из подчиненной формы в поле Memo
Есть главная форма &quot;Заказ&quot; и подчиненная форма с &quot;состав заказа&quot;. там к номеру заказа присвоены несколько строк с позициями заказа ...

Изменяем источник записей для подчиненной формы
Можно с помощью VBA изменять источник данных (таблицы) для подчиненной формы. Например в Поле со списком были фиксированные значения...

Удаление записей по выделенным строкам подчиненной формы
Помогите пожалуйста разобраться. Имеется база, основная форма с подчиненной табличной формой, один запрос и таблица. На основной форме...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru