Ako vo vašom prístupe zobraziť viac výsledkov v jednom dotazovacom poli

Ak ste niekedy potrebovali vytvoriť vymedzený zoznam hodnôt poľa / dotazu spolu s ďalšími informáciami z vašej databázy, budete vedieť, že to môže byť prinajlepšom náročné - a úlohaost ľudia si myslia, že to nebude možné. Ak vás napríklad požiadali o vypracovanie správy o tom, kto bol top 5 predajcov - v zostupnom poradí - za každý mesiac v roku alebo 3 najbližšie obchody každému zákazníkovi, potom potenciálne zostanete. hádkami s krížovými dotazmi alebo manuálnym kombinovaním výsledkov mimo programu Access. Ale s pomocou malého kódu VBA budete za pár minút produkovať výsledky ako nasledovné ...

Jan John, Sally, Bill
február Sally, Adam, John
Mar Adam, Sally, Bill

Existuje veľa prípadov, kedy by bolo užitočné zobraziť zoznam výsledkov s oddeľovačmi ako súčasť väčšieho dopytu - zoznam 3 najväčších zákazníkov pre každého obchodného zástupcu, 5 najbližších obchodov každému z vašich zákazníkov s najvyššou spotrebou. , zoznam pokračuje.

Prestaňte spájať správu

Pani AccessAj keď je viac ako možné získať podrobnosti na vytvorenie tohto druhu prehľadu, zvyčajne by ste nakoniec museli výsledky spojiť ručne mimo programu Access ako súčasť tabuľky alebo prehľadu.

Nasledujúci kód obmedzuje potrebu manipulovať s výsledkami dotazu mimo programu Access a namiesto toho vám umožní ľahko vytvoriť druh výsledkov zobrazených vyššie.

Najprv si načrtneme, čo chceme, aby kód dokázal:

„Pri zadaní dotazu vráti x počet výsledkov skombinovaných do jedného reťazca, ktorý je ohraničený znakom y“

Skôr ako začneme

Predtým, ako sa pozrieme na kód, je dôležité poznamenať, že aj keď je možné vytvoriť funkciu VBA, ktorá je všeobecnejšia a schopná spracovať ľubovoľnú kombináciu dotazov, výsledkom by bol dosť zdĺhavý kód, čo teda urobíme v tomto článku. je definovať ukážkový prípad a napísať funkciu, ktorá daný prípad zvládne. Ak to urobíte týmto spôsobom, bude pre vás oveľa jednoduchšie vytvoriť kód znova, aby vyhovoval vašim konkrétnym potrebám.

Ukážkový prípad

Máme databázu predaja, ktorá uchováva podrobnosti o nákupoch zákazníkov spolu s kategóriou produktu, do ktorej nákup patrí. Chceme vytvoriť správu, ktorá bude podľa mesiacov zobrazovať najvyššie 3 kategórie v zostupnom poradí.

Pre jednoduchosť si príklad necháme na jednu tabuľku, hoci principál bude fungovať bez ohľadu na vaše nastavenie. Tabuľka, ktorú budeme používať, je nastavená takto:

Predaj
Meno zákazníka
Dátum transakcie
Hodnota transakcie
kategórie

Je zrejmé, že ide o príliš zjednodušené nastavenie, ale máte predstavu.

Teraz - kód

Public Function CategoryList (mesiac ako reťazec, NumResults ako celé číslo, SortAscending ako Boolean, oddeľovač ako reťazec) ako reťazec Dim sSql, resultString ako reťazec Dim rst ako sada záznamov Dim firstLine ako Boolean 'Vytvorte náš reťazec SQL pomocou dodaných parametrov sSql = "SELECT TOP „& NumResults &“ [kategória] Z predaja GROUP BY Format ([TransactionDate], „„ mmm ““), sales.Category HAVING ((((Format ([TransactionDate], „„ mmm ““)) = „„ “ Mesiac & "" "))" Ak SortAscending Potom sSql = sSql & "OBJEDNAŤ PODĽA Súčtu (sales.TransactionValue) DESC;" Nastavte rst = CurrentDb.OpenRecordset (sSql) firstLine = True 'Prehrajte výsledky a vytvorte reťazec, ktorý sa má vrátiť S rst Do While Not .EOF Ak nie firstLine Then resultString = resultString & Delimiter & .Fields ("category") Else resultString = resultString & .Fields ("category") firstLine = False End If .MoveNext Loop End with Set rs = Nič CategoryList = resultString End Function

Kód - vysvetlené

Kód VBAAko vidíte, kód je dosť zrozumiteľný. My start pomocou zadaných parametrov na zostavenie nášho dotazu. Po vytvorení reťazca dotazu ho vykonáme a prechádzame medzi výsledkami, ktoré ich spájame do jedného jediného reťazca výsledkov, ktorý hľadáme.

Všimnete si, že kontrolujeme, či by sme do reťazca mali alebo nemali pridávať oddeľovač - bez tejto kontroly by ste nakoniec dostali buď zle naformátovaný výsledný reťazec, alebo by ste museli pridať kód na odstránenie nežiaducich oddeľovačov - takto budete mať veci hneď od začiatku pekné a upratané.

Samotnú funkciu je možné samozrejme vyvolať z dotazu, správy alebo z ľubovoľného miesta v rámci programu Access.

Opravte poškodenú databázu prístupu

Ak sa stretnete poškodené databázy Accessu keď spustíte vyššie uvedený kód, je lepšie použiť nejaký špecializovaný nástroj na ich opravu a obnovu všetkých tabuliek z poškodených databáz.

Úvod autora:

Mitchell Pond je expert na obnovu dát v DataNumen, Inc., ktorá je svetovým lídrom v oblasti technológií obnovy dát, vrátane opraviť problém s SQL a vynikajúce softvérové ​​produkty na obnovenie. Pre viac informácií navštívte www.datanumen. S

Komentáre sú uzavreté.