Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
Подскажите, пожалуйста, можно ли из уже запущенного Recordset вытащить информацию о максимальном значении из разных полей?
как?

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

SELECT ID, YEARNUM, TEMPERATURE, CITY
FROM WEATHER

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

____
vk.com/taenfox
9 авг 18, 10:50    [21635547]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5667
MokeevP
и вот узнать до какого года (YEARNUM) у нас статистика есть
А каков критерий(как определить)что статистика есть или её нет(какое-то поле заполнено/пустое где-то установлен флажок или какой другой признак-а как иначе?
9 авг 18, 11:25    [21635640]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
sdku
MokeevP
и вот узнать до какого года (YEARNUM) у нас статистика есть
А каков критерий(как определить)что статистика есть или её нет(какое-то поле заполнено/пустое где-то установлен флажок или какой другой признак-а как иначе?


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

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

или всё тлен?
9 авг 18, 11:36    [21635682]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18756
MokeevP
Мне просто очень не хочется запускать два аналогичных запроса одновременно.
А придётся... впрочем, можешь запустить их последовательно, который на максимумы - наверное, первым.
9 авг 18, 11:40    [21635692]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5667
MokeevP
мне нужен такой же эффект как от функции max, то есть какой последний год указан....
Если нужен эффект "как от функции max", то почему её не использовать А разве это не то же самое (ничё не понимаю, однако):
SELECT TOP 1 год FROM  ORDER BY год DESC
9 авг 18, 11:59    [21635737]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
Akina, просто общая схема будет примерно такая:

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. не рассматривайте смысловую нагрузку арифметических действий с годами, её там нет
9 авг 18, 12:05    [21635752]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 453
MokeevP, создается клон рекордсета.
9 авг 18, 12:06    [21635753]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
bubucha
Member

Откуда:
Сообщений: 5344
sdku
MokeevP
мне нужен такой же эффект как от функции max, то есть какой последний год указан....
Если нужен эффект "как от функции max", то почему её не использовать А разве это не то же самое (ничё не понимаю, однако):
SELECT TOP 1 год FROM  ORDER BY год DESC

это не по ТЗ :-)
он же пишет, что
автор
из уже запущенного Recordset

так что циклом по набору :-(
9 авг 18, 12:07    [21635756]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
sdku,
Ваш вариант мне больше нравится чем то что я выше написал :)

но суть вопроса в том чтобы не использовать два запроса, а всё выжимать и обсасывать из одного
9 авг 18, 12:08    [21635757]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
О, у человеков обед начался :D
Всем спасибо за внимание)

alecko
MokeevP, создается клон рекордсета.

Как это делать?

bubucha
так что циклом по набору :-(

как здесь указал? 21635752
9 авг 18, 12:11    [21635767]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18756
MokeevP
общая схема будет примерно такая
В показанной схеме значение
y = currentdb.openrecordset("SELECT max(YEARNUM) as MaxYear From table")!MaxYear
есть константа, которую можно смело вынести за пределы цикла.
9 авг 18, 12:14    [21635775]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
Прогер_самоучка
Member

Откуда:
Сообщений: 67396
MokeevP
Как это делать?
link
9 авг 18, 12:21    [21635797]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 453
линк конечно отлично, а вкратце
dim rs as recordset, rsc as recordset
set rs=currentdb.openrecordset("table")
set rsc=rs.clone
' клон это снимок рекордсета в нынешнем состоянии, поэтому после определения максимум/минимумов и перед изменением _ 
рекордсета клон необходимо закрыть.
9 авг 18, 12:38    [21635829]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
Прогер_самоучка, спасибо за линк!

alecko
линк конечно отлично, а вкратце
dim rs as recordset, rsc as recordset
set rs=currentdb.openrecordset("table")
set rsc=rs.clone
' клон это снимок рекордсета в нынешнем состоянии, поэтому после определения максимум/минимумов и перед изменением _ 
рекордсета клон необходимо закрыть.
Спасибо за разъяснение, только всё равно не понятно как его фильтровать "на ходу" :)


Akina
есть константа, которую можно смело вынести за пределы цикла.
Как же так, когда после каждого прохода цикла добавляются новые значения YEARNUM? Я что-то упустил?
9 авг 18, 12:52    [21635871]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
bubucha
Member

Откуда:
Сообщений: 5344
MokeevP,
на вопрос
автор
и вот узнать до какого года (YEARNUM) у нас статистика есть

ответ уже дан, но с учетом
автор
Как же так, когда после каждого прохода цикла добавляются новые значения YEARNUM? Я что-то упустил?

задача не ясна, более того, это многопользовательская задача, или нет... опишите задачу, ибо
автор
не рассматривайте смысловую нагрузку арифметических действий с годами, её там нет
мало добавляет понятности
с чего вы решили, что обход в цикле рекордсета будет быстрее, что два запроса?
9 авг 18, 13:43    [21636010]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18756
MokeevP
после каждого прохода цикла добавляются новые значения YEARNUM?
А тупо посмотреть, сколько максимально добавляется, и приплюсить столько к переменной в конце очередного витка цикла, вместо того чтобы ещё раз лезть в таблицу - не? или ты полагаешь, что оно вдруг да не запишется?
9 авг 18, 13:49    [21636039]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
bubucha
MokeevP,
на вопрос
автор
и вот узнать до какого года (YEARNUM) у нас статистика есть

ответ уже дан, но с учетом
автор
Как же так, когда после каждого прохода цикла добавляются новые значения YEARNUM? Я что-то упустил?

задача не ясна, более того, это многопользовательская задача, или нет... опишите задачу, ибо
автор
не рассматривайте смысловую нагрузку арифметических действий с годами, её там нет
мало добавляет понятности
с чего вы решили, что обход в цикле рекордсета будет быстрее, что два запроса?


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

Если перейти к конкретике, то я хочу решить задачу с добавлением из экселешной таблицы записей, причём на одну строку экселя - четыре строки акса с разными параметрами. Мне нужно их объединить чем-то, поэтому у меня есть поле long в котором я просто набиваю цифры (соответственно, ко всем записям, добавляемым в акс на одну из экселя ставится одинаковый номер). И как раз задача в том чтобы определять максимум в этой колонке на момент добавления.
9 авг 18, 13:58    [21636084]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
Akina
MokeevP
после каждого прохода цикла добавляются новые значения YEARNUM?
А тупо посмотреть, сколько максимально добавляется, и приплюсить столько к переменной в конце очередного витка цикла, вместо того чтобы ещё раз лезть в таблицу - не? или ты полагаешь, что оно вдруг да не запишется?


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

А ещё другой юзер может аналогичную программу запустить на эту же таблицу но со своими данными. Маловероятно, но не исключено.
9 авг 18, 14:01    [21636090]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18756
Но если так, то получается, что ты и сам не в курсе, чего добавляешь? и добавляешь ли уника или дубликат на пару с соседом? чёта у тебя там неладное... тут бы над физикой процесса и идеологией её обработки думать, а не о том как непродуманное нечто реализовать в коде.
9 авг 18, 14:10    [21636108]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
Akina
Но если так, то получается, что ты и сам не в курсе, чего добавляешь? и добавляешь ли уника или дубликат на пару с соседом? чёта у тебя там неладное... тут бы над физикой процесса и идеологией её обработки думать, а не о том как непродуманное нечто реализовать в коде.
Это действительно бардак, но ничего лучше пока сделать не могу)

Всем сочувствующим и участвующим спасибо!
9 авг 18, 14:39    [21636183]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5667
MokeevP,
Из Вашего кода просмативается следующее: добавить 3(N записей) записи в таблицу со значением поля YEARNUM
первая-max(YEARNUM) +1
вторая-max(YEARNUM ) - 1
третья-max(YEARNUM) + 2
N-max(YEARNUM) + N
Может Вы таки объясните какие данные имеются и ЧЕГО именно хотите
9 авг 18, 15:41    [21636345]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28065
sdku
MokeevP,
Из Вашего кода просмативается следующее: добавить 3(N записей) записи в таблицу со значением поля YEARNUM
первая-max(YEARNUM) +1
вторая-max(YEARNUM ) - 1
третья-max(YEARNUM) + 2
N-max(YEARNUM) + N
Может Вы таки объясните какие данные имеются и ЧЕГО именно хотите

Правильный вопрос.

Если это действительно такой "запрос", то огород городить с рекордсетами вообще не нужно, а просто запустить вставку:
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


ЗЫ Не уверен что Акцес схавает именно это, но идея думаю понятна.
9 авг 18, 17:59    [21636547]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
sdku
MokeevP,
Из Вашего кода просмативается следующее: добавить 3(N записей) записи в таблицу со значением поля YEARNUM
первая-max(YEARNUM) +1
вторая-max(YEARNUM ) - 1
третья-max(YEARNUM) + 2
N-max(YEARNUM) + N
Может Вы таки объясните какие данные имеются и ЧЕГО именно хотите
SandalTree
Правильный вопрос.

Если это действительно такой "запрос", то огород городить с рекордсетами вообще не нужно, а просто запустить вставку:
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,

Спасибо за внимание к моей проблеме
Этот пример неудачный, он как бы сферический в вакууме и к моей БД не имеет никакого отношения. Мне был интересен сам вопрос можно ли из объекта рекордсет взять такую информацию.
Ваш вариант я запомню, почти то что надо)
10 авг 18, 09:41    [21637241]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
court
Member

Откуда:
Сообщений: 1646
MokeevP
Мне был интересен сам вопрос можно ли из объекта рекордсет взять такую информацию.
Ну, дык отсортировать рекордсет в "нужном направлении" и "взять" :)
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
10 авг 18, 09:55    [21637263]     Ответить | Цитировать Сообщить модератору
 Re: Максимум из Recordset  [new]
MokeevP
Member

Откуда: Нижний Новгород
Сообщений: 131
court
MokeevP
Мне был интересен сам вопрос можно ли из объекта рекордсет взять такую информацию.
Ну, дык отсортировать рекордсет в "нужном направлении" и "взять" :)
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
Спасибо!

Тогда другой вопрос, по быстродействию это хуже/лучше открытия другого запроса?
10 авг 18, 10:00    [21637269]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить