powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / использование Агрегатных функций с DAO
13 сообщений из 13, страница 1 из 1
использование Агрегатных функций с DAO
    #39766412
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем добрый день.
может конечно придумаваю фигню, но прошу подсказать насколько это реально

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

Для работы с данными подформы использую DAO.recordset. Понадобилось найти по одному полю максимальное значение, сделал через
Код: vbnet
1.
for ... to ... next

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

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

Спасибо за ответы
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766414
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может "слепить" из DAO.recordset программно временную таблицу и уже в нее сделать SQL-запрос, а после получения данных бахнуть таблицу, т.к. она больше не нужна
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766426
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов АлександрВопрос в следующем: реально ли сделать SQL-запрос в уже отобранный рекордсет,нет

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

Ганов Александрможет "слепить" из DAO.recordset программно временную таблицу и уже в нее сделать SQL-запроснет
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766430
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александрможет конечно придумаваю фигнюда
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766434
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург, я так и знал
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766436
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александрсделать SQL-запрос в исходную таблицуда
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766437
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть единственные варианты цикл или SQL-запрос в базовую таблицу?
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766444
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр, нужно трезво оценить количество записей которое возможно будет отобрано.
Но в общем случае курсором перебрать значения будет дольше чем обработать массив записей запросом (язык SQL заточен под работу со множеством)
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766459
Ганов АлександрПонадобилось найти по одному полю максимальное значение, сделал через
Код: vbnet
1.
for ... to ... next

А не проще создать в примечании подформы поле с выражением =MAX([Ваше поле])?
Ганов АлександрВторой вариант - сделать SQL-запрос в исходную таблицу, которая по факту содержит данные, отобранные в рекордесете подформы, то есть отборать по полю связи и найти MAX Проще - функция DMax().
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766483
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александрвсем добрый день.
может конечно придумаваю фигню, но прошу подсказать насколько это реально

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

Для работы с данными подформы использую DAO.recordset. Понадобилось найти по одному полю максимальное значение, сделал через
Код: vbnet
1.
for ... to ... next

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

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

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

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

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

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

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

PS* DAO.Recordset он такой... может обидится на нецелевое использование))
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766518
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, спасибо за подсказку. почему-то про поле я вообще не подумал, хотя применяю его в отчетах для подсчета ИТОГО по столбцам. Всем еще раз спасибо за то, что убрали "туман" из головы :-)
...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766669
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр,
можно- тонкость только в одном - нужно переменную подформы создать в основной форме и работать с ней.
Код: vbnet
1.
2.
3.
4.
5.
6.
dim sfrm as form
set sfrm=Me.Podforma.form ' подформа 
' бла-бла-бла
' применен фильтр может а может и нет
sfrm.filter="[Field]=5"
sfrm.filteron=true 


для неё делаете рекордсет, лучше клон
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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

...
Рейтинг: 0 / 0
использование Агрегатных функций с DAO
    #39766852
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko, спасибо за Ваш вариант. Access - гибкая штука, можно очень по-разному одно и то же сделать :-)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / использование Агрегатных функций с DAO
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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