Rapporter for soegeresultater, undgaa at gentage vaerdier.
Jeg er i faerd med at udvikle et databasesystem til et velfaerdscenter. (Centeret ligger i Antwerpen og jeg bruger en hollandsksproget Access 2007, derfor kommer der nogle maerkelige udtryk saasom "persoon" der er hollandsk for person.) Jeg er ved at udvikle nogle soegefunktioner for centerets medarbejdere. For eksempel skal man kunne soege og udskrive hvilke af centerets besoegende (med navn, telefonnummer, og email) der hoerer til hvilke aktivitetsgrupper. Fordi hver person kan have flere telefonnumre faar jeg saadanne resultater:Francoise de Jong 22/7/1957 0487/378952
Erna De Meester 24/04/1959 0484/436229
Erna De Meester 24/04/1959 0488/807691
Jeg ville gerne have det saaledes:
Francoise de Jong 22/7/1957 0487/378952
Erna De Meester 24/04/1959 0484/436229
0488/807691
altsaa kun vise navn og foedselsdag for det foerste telefonnummer.
Her er nogle oplysninger (forhaabenligt de noedvendige:)
Jeg har en tabel Persoon med navn, foedselsdag, o.s.v. Der er mange-til-mange relationer mellem personer og grupper/telefonnumre/emailadresser. For eksempel mand og kone kan have samme telefonnummer og derudover har konen en mobil telefon og manden en arbejdstelefon.) Derfor har jeg gruppenavne, telefonnumre, og emailadresser i tabellerne Groep, Telefoon, og Email, og jeg har kombinationstabellerne PersoonGroep, PersoonTelefoon, og PersoonEmail.
Jeg har saa lavet en formular Zoeken (som aabnes automatisk naar databasen aabnes) med soegemulighederne. For soegning efter personer i grupper har jeg en tabel EnkelGroep med de noedvendige felter, en Report der ogsaa hedder EnkelGroep der formatterer det for udskrift, og paa formularen Zoeken har jeg en combobox med navnene paa grupperne. Comboboxens AfterUpdate event sletter gamle oplysninger i tabellen EnkelGroep, fylder tabellen med nye vaerdier afhaengig af det valgte gruppenavn, og aabner rapporten.
Her er VBA koden:
Private Sub cmbGroep_AfterUpdate()
DoCmd.Close acReport, "EnkelGroep"
DoCmd.SetWarnings False
DoCmd.RunSQL "Delete * FROM EnkelGroep"
DoCmd.RunSQL "INSERT INTO EnkelGroep (persoonid, voornaam, achternaam, geboortedatum, telefoonnummer, email) SELECT persoonid, voornaam, achternaam, geboortedatum, telefoonnummer, e.email FROM ((((Persoon p INNER JOIN PersoonGroep pg ON p.persoonid = pg.persoon) INNER JOIN Groep g ON pg.groep = g.groepid) LEFT JOIN PersoonTelefoon pt ON p.persoonid = pt.persoon) LEFT JOIN PersoonEmail pe ON p.persoonid = pe.persoon) LEFT JOIN Email e ON pe.email = e.emailid WHERE g.naam = '" & Me.cmbGroep & "'"
DoCmd.OpenReport "EnkelGroep", acViewReport, , , acWindowNormal
DoCmd.SetWarnings True
End Sub
Som tillaegsspoergsmaal modtager jeg gerne kommentarer om fremgangsmaaden (en tabel med tilhoerende rapport for hver slags efterspoergsel (for eksempel har jeg ogsaa en forespoergsel hvor man for hver person faar en oversigt over alle grupper personen deltager i)).