Paano Ipakita ang Maramihang Mga Resulta sa isang solong Patlang ng Query sa Iyong Pag-access

Ipamahagi ngayon:

Kung kinailangan mong gumawa ng isang delimited na listahan ng mga field/query value kasama ng iba pang impormasyon mula sa iyong database, malalaman mong maaaring maging mahirap ito – at isang gawaing iniisip ng karamihan na hindi posible. Halimbawa, kung hiniling sa iyo na gumawa ng ulat kung sino ang nangungunang 5 sales person – sa pababang pagkakasunud-sunod – para sa bawat buwan ng taon, o ang pinakamalapit na 3 tindahan sa bawat customer, posibleng kailanganin mong mag-isip tungkol sa mga crosstab query o manu-manong pagsamahin ang mga resulta sa labas ng Access. Ngunit sa tulong ng isang maliit na VBA code, makakagawa ka ng mga resulta tulad ng sumusunod sa loob ng ilang minuto…

Jan John, Sally, Bill
Pebrero Sally, Adam, John
magpapangit Adam, Sally, Bill

Maraming mga oras kung kailan magiging kapaki-pakinabang upang maipakita ang isang na-delimit na listahan ng mga resulta bilang bahagi ng isang mas malaking query - isang listahan ng nangungunang 3 pinakamalaking mga customer para sa bawat sales rep, ang pinakamalapit na 5 mga tindahan sa bawat isa sa iyong pinakamataas na customer sa paggastos , tuloy ang listahan.

Itigil ang tahi ng iyong ulat nang magkasama

Ms AccessHabang higit sa posible upang makuha ang detalye upang likhain ang ganoong uri ng ulat, karaniwang magtatapos ka na kailangang manu-manong mag-stitch ng mga resulta sa labas ng Access bilang bahagi ng isang spreadsheet o ulat.

Pinapuputol ng sumusunod na code ang pangangailangan na makalikot sa mga resulta ng query sa labas ng Access, at sa halip, papayagan kang makagawa ng uri ng mga resulta na ipinakita sa itaas nang madali.

Una, balangkas natin kung ano ang nais nating magawa ng code:

"Dahil sa isang query, ibalik x bilang ng mga resulta, na pinagsama sa isang solong string na nililimitahan ng y"

Bago tayo magsimula

Bago namin tingnan ang code, mahalagang tandaan na habang posible na lumikha ng isang function ng VBA na mas generic, at may kakayahang hawakan ang anumang kumbinasyon ng query, ang paggawa nito ay magreresulta sa napakahabang code kaya kung ano ang gagawin namin sa artikulong ito ay upang tukuyin ang isang halimbawa ng kaso at isulat ang pagpapaandar upang hawakan ang kaso na iyon. Ang paggawa nito sa ganitong paraan ay magiging mas madali para sa iyo na muling likhain ang code upang matugunan ang iyong mga partikular na pangangailangan.

Ang sample na kaso

Mayroon kaming isang database ng benta na nag-iimbak ng mga detalye ng mga pagbili ng customer, kasama ang kategorya ng produkto kung saan kabilang ang pagbili. Nais naming gumawa ng isang ulat na nagpapakita, ayon sa buwan, ang nangungunang 3 mga kategorya sa pababang pagkakasunud-sunod.

Para sa pagiging simple ay panatilihin namin ang halimbawa sa isang solong talahanayan, kahit na gagana ang prinsipal anuman ang iyong pag-set up. Ang talahanayan na gagamitin namin ay naka-set up tulad ng sumusunod:

Bintahan
Pangalan ng Customer
Petsa ng transaksyon
TransactionValue
kategorya

Malinaw na ito ay isang labis na pinasimple na pag-setup, ngunit nakukuha mo ang ideya.

Ngayon - ang 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

Ang code - ipinaliwanag

VBA codeGaya ng nakikita mo, ang code ay medyo madaling maunawaan. Magsisimula tayo sa pamamagitan ng paggamit ng mga parameter na ibinigay upang buuin ang ating query. Kapag nalikha na ang query string, isasagawa natin ito at iuulit ang mga resulta, pinagsasama-sama ang mga ito upang mabuo ang iisang result string na ating hinahanap.

Mapapansin mo na suriin namin kung dapat o hindi dapat kaming nagdaragdag ng isang delimiter sa string o hindi - nang walang tsek na ito magwawakas ka sa alinman sa isang hindi maganda na nai-format na string ng resulta, o kakailanganin mong magdagdag ng code upang alisin ang mga hindi ginustong mga delimiter - sa ganitong paraan pinapanatili ang mga bagay na maganda at malinis mula sa umpisa.

Ang pagpapaandar mismo ay syempre maaaring tawaging mula sa loob ng isang query, isang ulat, o kahit saan mo gusto mula sa loob ng Access.

Ayusin ang Nasirang Database ng Pag-access

Kung magkasalubong kayo nasira ang mga database ng Access kapag pinatakbo mo ang code sa itaas, pagkatapos ay mas mahusay na gumamit ng ilang dalubhasang tool upang ayusin ang mga ito at mabawi ang lahat ng mga talahanayan mula sa mga sira na database.

Panimula ng May-akda:

Ang Mitchell Pond ay isang dalubhasa sa pagbawi ng data sa DataNumen, Inc., na pinuno ng mundo sa mga teknolohiya sa pagbawi ng data, kasama ang ayusin ang problema sa SQL at excel mga produkto ng pagbawi ng software. Para sa karagdagang impormasyon pagbisita www.datanumen. Sa

Ipamahagi ngayon:

Mga komento ay sarado.