2012-03-22 43 views
0

我正在使用Access 2007並在VBA中編寫宏。 「分析」子程序傳遞一個記錄集rev_rec。此記錄集有兩個字段「PeriodNo」(整數)和「收入」(雙倍)。 Minrev是一個變量,我必須存儲「收入」字段的最小值。我使用的代碼如下。在沒有循環的記錄集字段中獲取最小值

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(),但我無法找到一種方法來做到這一點。有沒有辦法做到這一點,而不使用任何類型的循環?

+3

我認爲你最好的選擇是使用SQL語句構建一個新的記錄集,該語句只檢索一個記錄,這個記錄是期望期間的最小記錄。另一種選擇是,您可以在「收入」列升序中使用「訂單號」打開此特定記錄集。這樣你會知道最小的值將會在第一條記錄中。 – HK1 2012-03-22 12:55:47

+2

@ HK1我看不出有什麼問題,作爲答案:) – Fionnuala 2012-03-22 13:11:59

回答

1

我認爲您最好的選擇是使用SQL語句構建一個新的記錄集,該語句只檢索一個記錄,即具有期望期限最小值的記錄。另一種選擇是,您可以在「收入」列升序中使用「訂單號」打開此特定記錄集。這樣你會知道最小的值將會在第一條記錄中。

安迪布朗的建議使用DMin也應該工作。這實際上與我的第一個建議非常相似。

+0

順序「收入」似乎是一個好主意,並解決了我的目的。謝謝。 – Heman 2012-03-23 05:37:50

1

問題是你傳遞一個記錄集。如果您只有表或查詢名稱(或SQL語句),則可以使用DMIN。例如:

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

第三個參數可以用來設置一些標準。例如:然而

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

被警告說,開始d功能(DMIN,使用DLookup,DSUM)運行很慢,但如果你已經超過10000條記錄,你不會注意到這讓少。

+0

它的問題是我只想傳遞一個記錄集,因爲記錄集中的其他數據也被使用並且尋找最小收入只是邏輯。 – Heman 2012-03-23 05:39:44

相關問題