So zeigen Sie mehrere Ergebnisse in einem einzigen Abfragefeld in Ihrem Zugriff an

Jetzt teilen:

Wenn Sie schon einmal eine Liste mit Feld-/Abfragewerten und anderen Datenbankinformationen erstellen mussten, wissen Sie, wie schwierig das sein kann – und dass die meisten die Aufgabe für unmöglich halten. Angenommen, Sie sollen einen Bericht erstellen, der die fünf umsatzstärksten Mitarbeiter (in absteigender Reihenfolge) für jeden Monat des Jahres oder die drei nächstgelegenen Filialen für jeden Kunden auflistet. Dann bleibt Ihnen möglicherweise nichts anderes übrig, als mit Kreuztabellen zu arbeiten oder die Ergebnisse außerhalb von Access manuell zusammenzuführen. Doch mit etwas VBA-Code erzielen Sie innerhalb weniger Minuten Ergebnisse wie die folgenden…

Januar John, Sally, Bill
Februar Sally, Adam, John
März Adam, Sally, Bill

Es gibt viele Fälle, in denen es nützlich wäre, eine begrenzte Ergebnisliste als Teil einer größeren Abfrage anzuzeigen - eine Liste der drei größten Kunden für jeden Vertriebsmitarbeiter, die fünf Geschäfte, die jedem Ihrer Kunden mit den höchsten Ausgaben am nächsten liegen , Die Liste geht weiter.

Hören Sie auf, Ihren Bericht zusammenzufügen

Frau ZugangWährend es mehr als möglich ist, die Details zum Erstellen dieser Art von Bericht abzurufen, müssen Sie die Ergebnisse normalerweise außerhalb von Access als Teil einer Tabelle oder eines Berichts manuell zusammenfügen.

Mit dem folgenden Code müssen Sie nicht mehr mit den Abfrageergebnissen außerhalb von Access herumspielen, sondern können die oben gezeigten Ergebnisse problemlos erstellen.

Lassen Sie uns zunächst skizzieren, was der Code tun soll:

"Geben Sie bei einer Abfrage x Anzahl der Ergebnisse zurück, kombiniert zu einer einzelnen Zeichenfolge, die durch y begrenzt ist."

Bevor wir anfangen

Bevor wir uns den Code ansehen, ist es wichtig zu beachten, dass es zwar möglich ist, eine allgemeinere VBA-Funktion zu erstellen, die jede Abfragekombination verarbeiten kann, dies jedoch zu ziemlich langem Code führen würde. Was wir in diesem Artikel tun werden besteht darin, einen Beispielfall zu definieren und die Funktion zu schreiben, die diesen Fall behandelt. Wenn Sie dies auf diese Weise tun, können Sie den Code viel einfacher neu erstellen, um Ihren spezifischen Anforderungen gerecht zu werden.

Der Beispielfall

Wir haben eine Verkaufsdatenbank, in der Details zu Kundenkäufen sowie die Produktkategorie, zu der der Kauf gehört, gespeichert sind. Wir möchten einen Bericht erstellen, der nach Monat die drei wichtigsten Kategorien in absteigender Reihenfolge anzeigt.

Der Einfachheit halber behalten wir das Beispiel in einer einzigen Tabelle bei, obwohl der Principal unabhängig von Ihrem Setup funktioniert. Die Tabelle, die wir verwenden werden, ist wie folgt aufgebaut:

Verkauf
Kundenname
Transaktionsdatum
Transaktionswert
Kategorie

Natürlich ist dies eine stark vereinfachte Einrichtung, aber Sie haben die Idee.

Nun - der Code

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

Der Code - erklärt

VBA-CodeWie Sie sehen, ist der Code weitgehend selbsterklärend. Wir beginnen damit, mithilfe der angegebenen Parameter unsere Abfrage zu erstellen. Sobald die Abfragezeichenfolge erstellt ist, führen wir sie aus und durchlaufen die Ergebnisse, um sie zu der einzelnen Ergebniszeichenfolge zusammenzufügen, nach der wir suchen.

Sie werden feststellen, dass wir prüfen, ob wir der Zeichenfolge ein Trennzeichen hinzufügen sollen oder nicht - ohne diese Überprüfung würden Sie entweder eine schlecht formatierte Ergebniszeichenfolge erhalten oder Sie müssten Code hinzufügen, um unerwünschte Trennzeichen zu entfernen. Auf diese Weise bleiben die Dinge von Anfang an schön und ordentlich.

Die Funktion selbst kann natürlich innerhalb einer Abfrage, eines Berichts oder an einer beliebigen Stelle in Access aufgerufen werden.

Korrigierte Zugriffsdatenbank korrigieren

Wenn Sie begegnen beschädigte Access-Datenbanken Wenn Sie den obigen Code ausführen, ist es besser, ein spezielles Tool zu verwenden, um sie zu reparieren und alle Tabellen aus den beschädigten Datenbanken wiederherzustellen.

Einführung des Autors:

Mitchell Pond ist ein Datenrettungsexperte in DataNumen, Inc., das weltweit führend bei Datenwiederherstellungstechnologien ist, einschließlich SQL-Problem beheben und Excel-Wiederherstellungssoftwareprodukte. Für weitere Informationen besuchen Sie www.datanumen.com €XNUMX

Jetzt teilen:

Kommentare sind geschlossen.