Access의 단일 쿼리 필드에 여러 결과를 표시하는 방법

지금 공유 :

데이터베이스에서 필드/쿼리 값과 다른 정보를 구분자로 구분한 목록을 만들어야 했던 경험이 있다면, 이것이 얼마나 어려운 작업인지, 그리고 대부분의 사람들이 불가능하다고 생각하는 작업인지 잘 아실 겁니다. 예를 들어, 연중 각 월별 최고 판매원 5명을 내림차순으로 나열한 보고서나, 각 고객에게 가장 가까운 매장 3곳을 찾는 보고서를 작성해야 한다면, 교차 테이블 쿼리를 사용하거나 Access 외부에서 결과를 수동으로 결합하는 수밖에 없을 것입니다. 하지만 간단한 VBA 코드를 활용하면 다음과 같은 결과를 단 몇 분 만에 생성할 수 있습니다.

존, 샐리, 빌
2월 샐리, 아담, 존
March 아담, 샐리, 빌

더 큰 쿼리의 일부로 구분 된 결과 목록을 표시하는 것이 유용 할 때가 많습니다. 각 영업 담당자에 대한 상위 3 명의 가장 큰 고객 목록, 가장 많이 지출하는 각 고객에게 가장 가까운 5 개의 매장 , 목록이 계속됩니다.

보고서 연결 중지

MS 액세스이러한 종류의 보고서를 만드는 데 필요한 세부 정보를 얻는 것은 가능하지 않지만 일반적으로 스프레드 시트 또는 보고서의 일부로 Access 외부에서 결과를 수동으로 연결해야합니다.

다음 코드는 Access 외부에서 쿼리 결과를 조작 할 필요성을 없애고 대신 위에 표시된 종류의 결과를 쉽게 생성 할 수 있도록합니다.

먼저 코드가 수행 할 수있는 작업에 대해 간략히 설명하겠습니다.

"쿼리가 주어지면 x 개의 결과를 반환하고 y로 구분 된 단일 문자열로 결합"

시작하기 전에

코드를 살펴보기 전에보다 일반적이고 모든 쿼리 조합을 처리 할 수있는 VBA 함수를 만들 수 있지만 이렇게하면 코드가 상당히 길어질 수 있으므로이 기사에서 수행 할 작업에 유의해야합니다. 예제 케이스를 정의하고 해당 케이스를 처리하는 함수를 작성하는 것입니다. 이렇게하면 특정 요구 사항을 충족하는 코드를 훨씬 쉽게 다시 만들 수 있습니다.

샘플 케이스

우리는 구매가 속한 제품의 범주와 함께 고객 구매의 세부 정보를 저장하는 판매 데이터베이스를 가지고 있습니다. 월별 상위 3 개 카테고리를 내림차순으로 표시하는 보고서를 생성하려고합니다.

사용자의 설정에 관계없이 주체가 작동하지만 간단하게 예제를 단일 테이블로 유지합니다. 우리가 사용할 테이블은 다음과 같이 설정됩니다.

세일즈
고객 이름
거래 날짜
거래 가치
카테고리

분명히 이것은 지나치게 단순화 된 설정이지만 아이디어를 얻을 수 있습니다.

이제 – 코드

Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
    Dim sSql, resultString As String
    Dim rst As Recordset
    Dim firstLine As Boolean
    
    'Create our SQL string using the supplied parameters
    sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
    If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
    
    Set rst = CurrentDb.OpenRecordset(sSql)
    
    firstLine = True
    
    'Loop through the results, and create the string to return
    With rst
        Do While Not .EOF
            If Not firstLine Then
                resultString = resultString & Delimiter & .Fields("category")
            Else
                resultString = resultString & .Fields("category")
                firstLine = False
            End If
            
        .MoveNext
        Loop
    End With
    
    Set rs = Nothing
    CategoryList = resultString
End Function

코드 – 설명

VBA 코드보시다시피 코드는 매우 직관적입니다. 먼저 제공된 매개변수를 사용하여 쿼리를 구성합니다. 쿼리 문자열이 생성되면 이를 실행하고 결과를 반복하면서 모든 결과를 연결하여 원하는 단일 결과 문자열을 만듭니다.

문자열에 구분 기호를 추가해야하는지 여부를 확인하는 것을 알 수 있습니다.이 검사를하지 않으면 형식이 잘못된 결과 문자열이 생성되거나 원하지 않는 구분 기호를 제거하기 위해 코드를 추가해야합니다. 이렇게하면 처음부터 일을 멋지고 깔끔하게 유지할 수 있습니다.

물론 함수 자체는 쿼리, 보고서 또는 Access 내에서 원하는 곳 어디에서나 호출 할 수 있습니다.

손상된 Access 데이터베이스 수정

만나면 손상된 Access 데이터베이스 위의 코드를 실행할 때 특수 도구를 사용하여이를 복구하고 손상된 데이터베이스에서 모든 테이블을 복구하는 것이 좋습니다.

저자 소개 :

Mitchell Pond는 데이터 복구 전문가입니다. DataNumen, Inc.는 다음과 같은 데이터 복구 기술 분야의 세계적 리더입니다. SQL 문제 복구 그리고 엑셀 복구 소프트웨어 제품. 자세한 내용은 WWW.datanumen.COM

지금 공유 :

댓글이 닫혀있다.