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
Habang 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

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