Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 использование Агрегатных функций с DAO  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 131
всем добрый день.
может конечно придумаваю фигню, но прошу подсказать насколько это реально

Суть в следующем: есть форма, в ней подформа (ленточная форма - таблица), в подформе эн-нное количество записей, отобранный стандартным механизмов подформы. С основной формой связано через поле связи.

Для работы с данными подформы использую DAO.recordset. Понадобилось найти по одному полю максимальное значение, сделал через
for ... to ... next
. Второй вариант - сделать SQL-запрос в исходную таблицу, которая по факту содержит данные, отобранные в рекордесете подформы, то есть отборать по полю связи и найти MAX.

Вопрос в следующем: реально ли сделать SQL-запрос в уже отобранный рекордсет, идея в том, что раз он уже отобран, то запрос должен быстрее обрабатываться, чем сделать такой же запрос непосредственно в исходную таблицу, где может быть несколько тысяч значений.

Спасибо за ответы
29 янв 19, 12:15    [21796668]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 131
может "слепить" из DAO.recordset программно временную таблицу и уже в нее сделать SQL-запрос, а после получения данных бахнуть таблицу, т.к. она больше не нужна
29 янв 19, 12:16    [21796670]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3926
Ганов Александр
Вопрос в следующем: реально ли сделать SQL-запрос в уже отобранный рекордсет,
нет

Ганов Александр
идея в том, что раз он уже отобран, то запрос должен быстрее обрабатываться, чем сделать такой же запрос непосредственно в исходную таблицу, где может быть несколько тысяч значений.
нет

Ганов Александр
может "слепить" из DAO.recordset программно временную таблицу и уже в нее сделать SQL-запрос
нет
29 янв 19, 12:22    [21796682]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3926
Ганов Александр
может конечно придумаваю фигню
да
29 янв 19, 12:23    [21796686]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 131
Панург, я так и знал Картинка с другого сайта.
29 янв 19, 12:27    [21796690]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3926
Ганов Александр
сделать SQL-запрос в исходную таблицу
да
29 янв 19, 12:28    [21796694]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 131
то есть единственные варианты цикл или SQL-запрос в базовую таблицу?
29 янв 19, 12:28    [21796695]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 3926
Ганов Александр, нужно трезво оценить количество записей которое возможно будет отобрано.
Но в общем случае курсором перебрать значения будет дольше чем обработать массив записей запросом (язык SQL заточен под работу со множеством)
29 янв 19, 12:32    [21796703]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 176
Ганов Александр
Понадобилось найти по одному полю максимальное значение, сделал через
for ... to ... next
А не проще создать в примечании подформы поле с выражением =MAX([Ваше поле])?
Ганов Александр
Второй вариант - сделать SQL-запрос в исходную таблицу, которая по факту содержит данные, отобранные в рекордесете подформы, то есть отборать по полю связи и найти MAX
Проще - функция DMax().
29 янв 19, 12:46    [21796726]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Сергей Лалов
Member

Откуда: Питер,Москва, Выборг, Светогорск
Сообщений: 1266
Ганов Александр
всем добрый день.
может конечно придумаваю фигню, но прошу подсказать насколько это реально

Суть в следующем: есть форма, в ней подформа (ленточная форма - таблица), в подформе эн-нное количество записей, отобранный стандартным механизмов подформы. С основной формой связано через поле связи.

Для работы с данными подформы использую DAO.recordset. Понадобилось найти по одному полю максимальное значение, сделал через
for ... to ... next
. Второй вариант - сделать SQL-запрос в исходную таблицу, которая по факту содержит данные, отобранные в рекордесете подформы, то есть отборать по полю связи и найти MAX.

Вопрос в следующем: реально ли сделать SQL-запрос в уже отобранный рекордсет, идея в том, что раз он уже отобран, то запрос должен быстрее обрабатываться, чем сделать такой же запрос непосредственно в исходную таблицу, где может быть несколько тысяч значений.

Спасибо за ответы


Как хранится отобранный рекордсет и причем тут агрегатные функции? :)

Создавайте на подчиненной ленточной форме дополнительные поля, вычисляющие MAX, MIN,AVG,COUNT и.т.д. В источнике данных так и пишите =MAX ([ваше_поле_для_расчета]) итд. Создаются они в примечании подчиненной ленточной формы.

А потом на главной форме создайте дополнительные поля, которые ссылаются на эти расчетные. По типу = [подчиненная_ленточная_форма].[вычисляемое_поле_из_примечания].

И без всяких лишних манипуляций с DAO , SQL и такой то матери вы получаете итоговые значения из подчиненной в полях на уровне главной.

PS* DAO.Recordset он такой... может обидится на нецелевое использование))
29 янв 19, 13:10    [21796765]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 131
Сергей Лалов, спасибо за подсказку. почему-то про поле я вообще не подумал, хотя применяю его в отчетах для подсчета ИТОГО по столбцам. Всем еще раз спасибо за то, что убрали "туман" из головы :-)
29 янв 19, 13:40    [21796808]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 423
Ганов Александр,
можно- тонкость только в одном - нужно переменную подформы создать в основной форме и работать с ней.
+
dim sfrm as form
set sfrm=Me.Podforma.form ' подформа 
' бла-бла-бла
' применен фильтр может а может и нет
sfrm.filter="[Field]=5"
sfrm.filteron=true 

для неё делаете рекордсет, лучше клон
dim rst as recordset
set rst=sfrm.recordsetclone
' после этого ищете
 with  rst 
strsql="наш запрос " 
.findfirst strsql
If not .nomatch then
Do Until .EOF
' соответствие или ещё какие обработки
.findNext strsql
If .nomatch then exit do
Loop
End if
end with
set rst=nothing
29 янв 19, 16:37    [21797074]     Ответить | Цитировать Сообщить модератору
 Re: использование Агрегатных функций с DAO  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 131
alecko, спасибо за Ваш вариант. Access - гибкая штука, можно очень по-разному одно и то же сделать :-)
30 янв 19, 09:17    [21797450]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить