Ako ste ikada trebali kreirati razgraničenu listu vrijednosti polja/upita zajedno s drugim informacijama iz vaše baze podataka, znate da to može biti u najboljem slučaju izazovno – i zadatak za koji većina ljudi misli da neće biti moguć. Ako ste, na primjer, zamoljeni da kreirate izvještaj o tome ko je bilo 5 najboljih prodavača – u opadajućem redoslijedu – za svaki mjesec u godini ili 3 najbliže trgovine svakom kupcu, onda vam potencijalno preostaje da se mučite s unakrsnim upitima ili ručno kombinujete rezultate izvan Accessa. Ali uz pomoć malo VBA koda, za nekoliko minuta ćete dobiti rezultate poput sljedećih…
| Jan | John, Sally, Bill |
| februar | Sally, Adam, John |
| Mar | Adam, Sally, Bill |
Mnogo puta bi bilo korisno da možete prikazati razgraničenu listu rezultata kao dio većeg upita – listu 3 najveća kupaca za svakog prodajnog predstavnika, najbližih 5 trgovina svakom od kupaca koji najviše troše. , lista se nastavlja.
Prestanite spajati svoj izvještaj
Iako je više nego moguće dobiti detalje za kreiranje takve vrste izvještaja, obično ćete morati ručno spajati rezultate izvan programa Access kao dio proračunske tablice ili izvještaja.
Sljedeći kod uklanja potrebu da se petljate s rezultatima upita izvan Accessa, i umjesto toga, omogućit će vam da s lakoćom proizvedete vrstu rezultata prikazanih gore.
Prvo, hajde da opišemo šta želimo da kod može da uradi:
“Dati upit, vrati x broj rezultata, kombinovanih u jedan niz koji je razgraničen sa y”
Pre nego što počnemo
Prije nego što pogledamo kod, važno je napomenuti da iako je moguće kreirati VBA funkciju koja je generičnija i sposobna za rukovanje bilo kojom kombinacijom upita, to bi rezultiralo prilično dugim kodom, tako da ćemo ono što ćemo učiniti u ovom članku. je definirati primjer slučaja i napisati funkciju za rukovanje tim slučajem. Ako to učinite na ovaj način, znatno će vam biti lakše da ponovo kreirate kod kako bi zadovoljio vaše specifične potrebe.
Primer slučaja
Imamo prodajnu bazu podataka koja pohranjuje detalje o kupovini kupaca, zajedno sa kategorijom proizvoda kojoj kupovina pripada. Želimo da napravimo izvještaj koji prikazuje, po mjesecima, 3 najbolje kategorije u opadajućem redoslijedu.
Radi jednostavnosti zadržat ćemo primjer na jednoj tablici, iako će principal raditi bez obzira na vaše postavke. Tabela koju ćemo koristiti je postavljena na sljedeći način:
| prodajni |
| CustomerName |
| TransactionDate |
| TransactionValue |
| kategorija |
Očigledno je ovo previše pojednostavljeno podešavanje, ali shvatili ste ideju.
Sada – šifra
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
Šifra – objašnjeno

Primijetit ćete da provjeravamo treba li ili ne treba dodati graničnik u niz ili ne – bez ove provjere završili biste ili sa loše formatiranim nizom rezultata ili biste morali dodati kod da uklonite neželjene graničnike – na ovaj način stvari održavaju lijepim i urednim od samog početka.
Sama funkcija se naravno može pozvati iz upita, izvještaja ili bilo gdje iz Accessa.
Popravite oštećenu bazu podataka pristupa
Ako naiđete oštećene Access baze podataka kada pokrenete gornji kod, onda je bolje koristiti neki specijalizirani alat da ih popravite i oporavite sve tablice iz oštećenih baza podataka.
Uvod za autora:
Mitchell Pond je stručnjak za oporavak podataka DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući popraviti SQL problem i Excel softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com