Access hjælp?

  • Jeg har lavet en database i Access (version 2002 hvis det betyder noget).
    Jeg har lavet nogle tabeller med nogle lister med nogle navn, datoer og tider. Bagefter har jeg lavet nogle forespørgsler med navnet, datoen og tiden fra den hurtigste i hver tabel. Samme antal forespørgsler som der er tabeller.
    Nu skal jeg så ha' lagt alle forespørgslerne over i en rapport, så jeg kan printe dem ud, men det kan jeg ikke få den til. Nogen der kan hjælpe?


    mvh
    HAM

  • Quote

    Oprindeligt indlæg af HAM
    Jeg har lavet nogle tabeller med nogle lister med nogle navn, datoer og tider. Bagefter har jeg lavet nogle forespørgsler med navnet, datoen og tiden fra den hurtigste i hver tabel. Samme antal forespørgsler som der er tabeller.


    Siger du, at tabellerne er helt ens, bortset fra at du fylder forskellige datasæt i dem?


    I så fald bør du snarest muligt få alle dataene hældt over i een tabel. Ellers går du mod hele ideen med en database.


    Hvis du har brug for at kunne kende forskel på de data, du havde i forskellige tabeller, putter du bare et felt mere i tabellen og bruger værdien i dette felt til at kende forskel.


    Altså ikke:
    Tabelnavn: Løb 1
    Deltager | Tid
    Hans | 2:00:01
    Peter | 1:58:34
    Ole | 2:34:12


    Tabelnavn: Løb 2
    Deltager | Tid
    Hans | 2:02:12
    Peter | 1:59:23
    Jens | 1:44:12


    ... men i stedet:
    Tabelnavn: Tider
    Løb nr. | Deltager | Tid
    1 | Hans | 2:00:01
    1 | Peter | 1:58:34
    1 | Ole | 2:34:12
    2 | Hans | 2:02:12
    2 | Peter | 1:59:23
    2 | Jens | 1:44:12


    Når du har gjort det, kan du altid hive alle de data, du har brug for, ud af tabellen med en enkelt forespørgsel, uanset om du skal bruge data for eet løb, nogle løb eller alle løb.


    En enkelt forespørgsel vil du ikke få problemer med at få vist i en rapport. (Jeg går ud fra, at dit problem er, at du gerne vil have vist mange forespørgsler i samme rapport, men kun kan få lov at bruge en enkelt.)


    Prøv i øvrigt at lede lidt på Google efter "normalisering databaser". Link nr. 2 og 7 ser umiddelbart lovende ud. Jeg tror, det vil komme dig til gavn.


    (Mit eksempel ovenfor er i øvrigt ikke fuldt normaliseret. Tværtimod er det stadig det, man kalder en "flad" database. Men i det mindste er der ikke redundante tabeller.)

  • Jeg er begyndt på at flytte alle dataene over i én tabel. Men er ikke helt færdig endnu.
    Har dog leget lidt med rapporten, og jeg kan ikke få den til at tage den hurtigste tid i hvert løb med over, den tager alt. Har på fornemmelsen at jeg skal bruge den ja/nej (sand/falsk) funktion der er, men kan ikke få det til at virke.

  • Her gik jeg og troede, at jeg stadig snakkede flydende SQL efter mange år uden databaser. Det har jeg lige konstateret, at jeg ikke gør længere.


    Du kan få vist den hurtigste tid fra hvert løb med en opsummeringsforespørgsel. Jeg kan ikke huske, hvad den hedder i en engelsk Access, hvis du har sådan en.


    Hvis tabellen hedder tblTider, feltet med løbsnummer hedder idLoeb, og feltet med tiden hedder Tid, bliver SQL'en noget i retning af:
    SELECT DISTINCTROW
    tblTider.idLoeb,
    Min(tblTider.Tid) AS MinOfTid
    FROM tblTider
    GROUP BY tblTider.idLoeb;


    Men den vil kun vise løbets nummer og den laveste tid. Du kan ikke bare føje feltet med deltagernavn til forespørgslen og få det vist sammen med tiden, og det har du selvfølgelig brug for.


    Man kan oprette en forespørgsel mere, hvor man linker tabellen sammen med ovenstående forespørgsel via felterne Tid og idLoeb og på den måde trække alle øvrige data ud. Men det er en fuskerløsning. Hvis du døber ovenstående forespørgsel qryLavesteTidPrLoeb, vil sådan en forespørsel se således ud:
    SELECT
    tblTider.idLoeb,
    tblTider.Navn,
    tblTider.Tid
    FROM tblTider INNER JOIN qryLavesteTidPrLoeb
    ON (tblTider.Tid = qryLavesteTidPrLoeb.MinOfTid)
    AND (tblTider.idLoeb = qryLavesteTidPrLoeb.idLoeb);


    Bemærk, at den faktisk er i stand til at vise begge navne, hvis to deltagere deler bedste tid i et løb.


    Der er selvfølgelig også den nemme løsning:
    Tilføj et felt, hvor du angiver placeringen for hver deltager. Så skal du bare lade din forespørgsel udvælge de rækker, hvor dette felt har værdien 1. Men når du allerede har lavet et felt til tiderne, er det redundant at skulle angive placeringen, så det er ikke en særligt korrekt løsning.