powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Максимум из Recordset
25 сообщений из 35, страница 1 из 2
Максимум из Recordset
    #39685295
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, можно ли из уже запущенного Recordset вытащить информацию о максимальном значении из разных полей?
как?

Запрос например

Код: sql
1.
2.
SELECT ID, YEARNUM, TEMPERATURE, CITY
FROM WEATHER


и вот узнать до какого года (YEARNUM) у нас статистика есть

____
vk.com/taenfox
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685335
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPи вот узнать до какого года (YEARNUM) у нас статистика есть
А каков критерий(как определить)что статистика есть или её нет(какое-то поле заполнено/пустое где-то установлен флажок или какой другой признак-а как иначе?
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685355
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuMokeevPи вот узнать до какого года (YEARNUM) у нас статистика есть
А каков критерий(как определить)что статистика есть или её нет(какое-то поле заполнено/пустое где-то установлен флажок или какой другой признак-а как иначе?

Пожалуй, перефразирую
мне нужен такой же эффект как от функции max, то есть какой последний год указан или пересортировать на запущенном запросе по возрастанию, например и взять последнее значение

Мне просто очень не хочется запускать два аналогичных запроса одновременно.

или всё тлен?
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685359
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPМне просто очень не хочется запускать два аналогичных запроса одновременно.А придётся... впрочем, можешь запустить их последовательно, который на максимумы - наверное, первым.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685382
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPмне нужен такой же эффект как от функции max, то есть какой последний год указан....Если нужен эффект "как от функции max", то почему её не использовать А разве это не то же самое (ничё не понимаю, однако):
Код: vbnet
1.
SELECT TOP 1 год FROM  ORDER BY год DESC
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685392
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, просто общая схема будет примерно такая:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim rs as dao.recordset, x = integer, y = integer

set rs=currentdb.openrecordset("table")

do while x=0
   y = currentdb.openrecordset("SELECT max(YEARNUM) as MaxYear From table")!MaxYear
   with rs
      rs.addnew
      rs!YEARNUM = y+1
      rs.update

      rs.addnew
      rs!YEARNUM = y-1
      rs.update

      rs.addnew
      rs!YEARNUM = y+2
      rs.update       'и т.п.
   end with
loop



Это имеет место быть или я вообще не прав?


P.S. не рассматривайте смысловую нагрузку арифметических действий с годами, её там нет
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685393
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevP, создается клон рекордсета.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685395
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuMokeevPмне нужен такой же эффект как от функции max, то есть какой последний год указан....Если нужен эффект "как от функции max", то почему её не использовать А разве это не то же самое (ничё не понимаю, однако):
Код: vbnet
1.
SELECT TOP 1 год FROM  ORDER BY год DESC


это не по ТЗ :-)
он же пишет, что
авториз уже запущенного Recordset
так что циклом по набору :-(
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685396
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,
Ваш вариант мне больше нравится чем то что я выше написал :)

но суть вопроса в том чтобы не использовать два запроса, а всё выжимать и обсасывать из одного
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685404
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О, у человеков обед начался :D
Всем спасибо за внимание)

aleckoMokeevP, создается клон рекордсета.
Как это делать?

bubuchaтак что циклом по набору :-(
как здесь указал? 21635752
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685408
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPобщая схема будет примерно такаяВ показанной схеме значение
Код: vbnet
1.
y = currentdb.openrecordset("SELECT max(YEARNUM) as MaxYear From table")!MaxYear

есть константа, которую можно смело вынести за пределы цикла.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685425
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPКак это делать? link
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685449
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
линк конечно отлично, а вкратце
Код: vbnet
1.
2.
3.
4.
5.
dim rs as recordset, rsc as recordset
set rs=currentdb.openrecordset("table")
set rsc=rs.clone
' клон это снимок рекордсета в нынешнем состоянии, поэтому после определения максимум/минимумов и перед изменением _ 
рекордсета клон необходимо закрыть.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685476
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прогер_самоучка, спасибо за линк!

aleckoлинк конечно отлично, а вкратце
Код: vbnet
1.
2.
3.
4.
5.
dim rs as recordset, rsc as recordset
set rs=currentdb.openrecordset("table")
set rsc=rs.clone
' клон это снимок рекордсета в нынешнем состоянии, поэтому после определения максимум/минимумов и перед изменением _ 
рекордсета клон необходимо закрыть.

Спасибо за разъяснение, только всё равно не понятно как его фильтровать "на ходу" :)


Akinaесть константа, которую можно смело вынести за пределы цикла.Как же так, когда после каждого прохода цикла добавляются новые значения YEARNUM? Я что-то упустил?
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685536
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevP,
на вопрос автори вот узнать до какого года (YEARNUM) у нас статистика есть
ответ уже дан, но с учетом
авторКак же так, когда после каждого прохода цикла добавляются новые значения YEARNUM? Я что-то упустил?
задача не ясна, более того, это многопользовательская задача, или нет... опишите задачу, ибоавтор не рассматривайте смысловую нагрузку арифметических действий с годами, её там нет мало добавляет понятности
с чего вы решили, что обход в цикле рекордсета будет быстрее, что два запроса?
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685541
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPпосле каждого прохода цикла добавляются новые значения YEARNUM?А тупо посмотреть, сколько максимально добавляется, и приплюсить столько к переменной в конце очередного витка цикла, вместо того чтобы ещё раз лезть в таблицу - не? или ты полагаешь, что оно вдруг да не запишется?
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685557
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubuchaMokeevP,
на вопрос автори вот узнать до какого года (YEARNUM) у нас статистика есть
ответ уже дан, но с учетом
авторКак же так, когда после каждого прохода цикла добавляются новые значения YEARNUM? Я что-то упустил?
задача не ясна, более того, это многопользовательская задача, или нет... опишите задачу, ибоавтор не рассматривайте смысловую нагрузку арифметических действий с годами, её там нет мало добавляет понятности
с чего вы решили, что обход в цикле рекордсета будет быстрее, что два запроса?

Я это решил, потому что предположил, что каждый раз открывать дополнительный запрос дольше чем спрашивать у уже открытого какое-то свойство, собственно об этом и вопрос, вдруг уже всё придумано давно, а я глупостью этой занимаюсь (напоминаю что я жуткий дилетант в вопросе программирования и о существовании многих вещей только догадываюсь!).

Если перейти к конкретике, то я хочу решить задачу с добавлением из экселешной таблицы записей, причём на одну строку экселя - четыре строки акса с разными параметрами. Мне нужно их объединить чем-то, поэтому у меня есть поле long в котором я просто набиваю цифры (соответственно, ко всем записям, добавляемым в акс на одну из экселя ставится одинаковый номер). И как раз задача в том чтобы определять максимум в этой колонке на момент добавления.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685558
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaMokeevPпосле каждого прохода цикла добавляются новые значения YEARNUM?А тупо посмотреть, сколько максимально добавляется, и приплюсить столько к переменной в конце очередного витка цикла, вместо того чтобы ещё раз лезть в таблицу - не? или ты полагаешь, что оно вдруг да не запишется?

не исключено :D таблица-источник своеобразная

А ещё другой юзер может аналогичную программу запустить на эту же таблицу но со своими данными. Маловероятно, но не исключено.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685568
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если так, то получается, что ты и сам не в курсе, чего добавляешь? и добавляешь ли уника или дубликат на пару с соседом? чёта у тебя там неладное... тут бы над физикой процесса и идеологией её обработки думать, а не о том как непродуманное нечто реализовать в коде.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685591
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНо если так, то получается, что ты и сам не в курсе, чего добавляешь? и добавляешь ли уника или дубликат на пару с соседом? чёта у тебя там неладное... тут бы над физикой процесса и идеологией её обработки думать, а не о том как непродуманное нечто реализовать в коде.Это действительно бардак, но ничего лучше пока сделать не могу)

Всем сочувствующим и участвующим спасибо!
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685636
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevP,
Из Вашего кода просмативается следующее: добавить 3(N записей) записи в таблицу со значением поля YEARNUM
первая-max(YEARNUM) +1
вторая-max(YEARNUM ) - 1
третья-max(YEARNUM) + 2
N-max(YEARNUM) + N
Может Вы таки объясните какие данные имеются и ЧЕГО именно хотите
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685694
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuMokeevP,
Из Вашего кода просмативается следующее: добавить 3(N записей) записи в таблицу со значением поля YEARNUM
первая-max(YEARNUM) +1
вторая-max(YEARNUM ) - 1
третья-max(YEARNUM) + 2
N-max(YEARNUM) + N
Может Вы таки объясните какие данные имеются и ЧЕГО именно хотите
Правильный вопрос.

Если это действительно такой "запрос", то огород городить с рекордсетами вообще не нужно, а просто запустить вставку:
Код: sql
1.
2.
3.
4.
INSERT INTO yourtable(YEARNUM)
SELECT t.MaxYEARNUM + Ch.ch FROM 
(SELECT MAX(YEARNUM) AS MaxYEARNUM FROM yourtable) AS t
INNER JOIN (SELECT 1 AS Ch UNION SELECT -1 UNION SELECT -2) AS ch ON 1 = 1



ЗЫ Не уверен что Акцес схавает именно это, но идея думаю понятна.
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685871
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuMokeevP,
Из Вашего кода просмативается следующее: добавить 3(N записей) записи в таблицу со значением поля YEARNUM
первая-max(YEARNUM) +1
вторая-max(YEARNUM ) - 1
третья-max(YEARNUM) + 2
N-max(YEARNUM) + N
Может Вы таки объясните какие данные имеются и ЧЕГО именно хотитеSandalTreeПравильный вопрос.

Если это действительно такой "запрос", то огород городить с рекордсетами вообще не нужно, а просто запустить вставку:
Код: sql
1.
2.
3.
4.
INSERT INTO yourtable(YEARNUM)
SELECT t.MaxYEARNUM + Ch.ch FROM 
(SELECT MAX(YEARNUM) AS MaxYEARNUM FROM yourtable) AS t
INNER JOIN (SELECT 1 AS Ch UNION SELECT -1 UNION SELECT -2) AS ch ON 1 = 1



ЗЫ Не уверен что Акцес схавает именно это, но идея думаю понятна.

sdku, SandalTree,

Спасибо за внимание к моей проблеме
Этот пример неудачный, он как бы сферический в вакууме и к моей БД не имеет никакого отношения. Мне был интересен сам вопрос можно ли из объекта рекордсет взять такую информацию.
Ваш вариант я запомню, почти то что надо)
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685879
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MokeevPМне был интересен сам вопрос можно ли из объекта рекордсет взять такую информацию.Ну, дык отсортировать рекордсет в "нужном направлении" и "взять" :)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub test()
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("select * from T")
    rs.Sort = "txt desc"
    Debug.Print rs.OpenRecordset.Fields("txt")
    rs.Sort = "txt"
    Debug.Print rs.OpenRecordset.Fields("txt")
End Sub
...
Рейтинг: 0 / 0
Максимум из Recordset
    #39685883
MokeevP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
courtMokeevPМне был интересен сам вопрос можно ли из объекта рекордсет взять такую информацию.Ну, дык отсортировать рекордсет в "нужном направлении" и "взять" :)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub test()
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("select * from T")
    rs.Sort = "txt desc"
    Debug.Print rs.OpenRecordset.Fields("txt")
    rs.Sort = "txt"
    Debug.Print rs.OpenRecordset.Fields("txt")
End Sub



ВОТ ЭТО ТО ЧТО НУЖНО! :DD
Спасибо!

Тогда другой вопрос, по быстродействию это хуже/лучше открытия другого запроса?
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Максимум из Recordset
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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