2012-03-22 3 views
0

저는 Access 2007을 사용하고 VBA에서 매크로를 작성하고 있습니다. "분석"서브 루틴은 레코드 세트 rev_rec에 전달됩니다. 이 레코드 세트에는 두 개의 필드 "PeriodNo"(Integer)와 "Revenue"(double)이 있습니다. Minrev는 "Revenue"필드의 최소값을 저장해야하는 변수입니다. 내가 사용하고있는 코드는 다음과 같습니다.루프를 사용하지 않고 레코드 집합 필드에서 최소값 가져 오기

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

+2

@ HK1 나는 무엇이 잘못되었는지 대답으로 보지 않는다. – Fionnuala

답변

1

적어도 하나의 레코드 만 검색하는 SQL 문을 사용하여 새 레코드 집합을 작성하는 것이 가장 좋습니다. 원하는 기간에 대해 최소값을 갖는 레코드를 검색하는 것이 가장 좋습니다. 또 다른 옵션은 오름차순 열의 오더 기준에서이 특정 레코드 집합을 열 수 있다는 것입니다. 이렇게하면 가장 작은 값이 첫 번째 레코드에 있음을 알 수 있습니다.

앤디 브라운 (Andy Brown)의 DMin 사용 제안도 효과가 있습니다. 사실 제 제안과 매우 흡사합니다.

+0

주문 주문 "Revenue"는 좋은 생각 인 것 같고 나의 목적을 해결합니다. 감사. – Heman

1

문제는 레코드 집합을 전달한다는 것입니다. 방금 테이블 또는 쿼리 이름 (또는 SQL 문)이있는 경우 DMIN을 사용할 수 있습니다. 예 :

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

세 번째 인수를 사용하여 일부 기준을 설정할 수 있습니다. 예를 들면 :

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

은 당신이 당신이 통지하지 않습니다 약 10,000 기록보다 덜 가지고있는 경우에 있지만 D로 시작하는 기능 (DMIN,을 DLookup, DSUM), 매우 느리게 실행하는 것이, 그러나주의 할.

+0

문제는 레코드 세트의 다른 데이터도 사용되기 때문에 레코드 세트를 전달하려는 것이며 최소 수익을 찾는 것이 논리. – Heman

관련 문제