получение минимального значения в поле набора записей без циклов - PullRequest
0 голосов
/ 22 марта 2012

Я использую Access 2007 и пишу макрос в VBA.Подпрограмме «Анализ» передается набор записей rev_rec.Этот набор записей имеет два поля «PeriodNo» (целое число) и «выручка» (двойное).Минрев - это переменная, в которой я должен хранить минимальное значение поля «Доход».Код, который я использую, приведен ниже.

    Public Sub Analyze(rev_rec As DAO.Recordset)
    Dim Minrev As Double
    rev_rec.MoveFirst
    Minrev = rev_rec("Revenue")
    While Not rev_rec.EOF
    If rev_rec("Revenue") < Minrev Then
    Minrev = rev_rec("Revenue")
    End If
    rev_rec.MoveNext
    Wend
    rev_rec.MoveFirst
    .
    .
    .
    End Sub

Я пытался использовать DMin () с набором записей, но не смог найти способ сделать это.Есть ли способ сделать это без использования какого-либо цикла?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Я думаю, что вам лучше всего создать новый набор записей, используя оператор SQL, который извлекает только одну запись с минимальным за требуемый период. Другой вариант, вы можете открыть этот конкретный набор записей с помощью Order By в столбце Доход по возрастанию. Таким образом, вы знаете, что наименьшее значение будет в первой записи.

Предложение Энди Брауна об использовании DMin также должно сработать. На самом деле это идея, очень похожая на мое первое предложение.

1 голос
/ 22 марта 2012

Проблема в том, что вы передаете набор записей. Если у вас была только таблица или имя запроса (или оператор SQL), вы могли бы просто использовать DMIN. Например:

   MinRev = DMIN("Revenue","TableOrQueryNameInQuotes","")

Третий аргумент может быть использован для установки некоторых критериев. Например:

 MinRev = DMIN("Revenue","TableOrQueryNameInQuotes","PeriodNo > 5")

Имейте в виду, однако, что функции, начинающиеся с D (DMIN, DLOOKUP, DSUM), работают очень медленно, хотя, если у вас менее 10000 записей, вы не заметите этого.

...