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

지금 공유 :

데이터베이스의 다른 정보와 함께 필드 / 쿼리 값의 구분 된 목록을 생성해야했다면 이것이 기껏해야 어려울 수 있음을 알게 될 것입니다.ost 사람들은 불가능할 것이라고 생각합니다. 예를 들어, 한 해의 매월 상위 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 코드보시다시피 코드는 자명합니다. 우리는tart는 제공된 매개 변수를 사용하여 쿼리를 작성합니다. 쿼리 문자열이 생성되면이를 실행하고 결과를 반복하여 함께 연결하여 찾고있는 단일 결과 문자열을 형성합니다.

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

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

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

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

저자 소개 :

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

지금 공유 :

댓글이 닫혀있다.