Navigation

Access vs. Excel

Was unterscheidet Access von Excel in Bezug auf das Tabellendesign?


Ganz einfach Excel ist zeilenorientiert, Access ist spaltenorientiert. Und dieses sollte man bei der Arbeit mit Access immer im Hinterkopf bewahren!
Nehmen wir mal an, wir möchten eine Produktionsstatistik erstellen. Wir haben also Artikel, Produktionsmengen und Jahre.
In Excel würde wir dahergehen und in die 1. Spalte die Artikel schreiben und für jedes Jahr eine Spalte anhängen, in der wir die produzierte Menge festhalten.



Das kann man auch in Access machen, aber man sollte es nicht! Denn für jedes
Jahr müsste man an das Tabellendesign, Formulare und Abfragen und dieses Feld hinzufügen.
Macht das Sinn? Aus meiner Sicht eher weniger. Man erstellt viel eher eine Tabelle
mit 3 Spalten:


  • Artikel
  • Produktionsmenge
  • Produktionsdatum





  • Nun kann man sich mittels einer recht einfachen Abfrage die Summe, der Artikel jeden Jahres ausgeben.

    tblACC:

    SELECT
    	tblACC.ArtikelID,
    	Sum(tblACC.Produziert) AS SummeProduziert
    FROM
    	tblACC
    GROUP BY
    	tblACC.ArtikelID;




    Die gleiche Abfrage für die Exceltabelle sähe so aus:

    SELECT
    	tblXLS.ArtikelID,
    	[2000]+[2001]+[2002]+[2003] AS SummeProduziert
    FROM
    	tblXLS;




    Jetzt könnte man sagen, die 2. Abfrage wäre ja kürzer...stimmt. Aber
    nur, weil es hier 4 Jahre sind und nicht 10! Außerdem muss man diese Abfrage
    jedes mal neu erstellen, wenn man nur bestimmte Jahre haben möchte oder ein Jahr
    mehr oder weniger hinzukommt.

    Abfragen für das Jahr 2001 und 2002:

    tblACC:

    SELECT
    	tblACC.ArtikelID,
    	Sum(tblACC.Produziert) AS SummeProduziert
    FROM
    	tblACC
    WHERE
    	Year(tblACC.Produktionsdatum) In (2001, 2002)
    GROUP BY
    	tblACC.ArtikelID;




    tblXLS

    SELECT
    	tblXLS.ArtikelID,
    	[2001]+[2002] AS SummeProduziert
    FROM
    	tblXLS;




    Der Unterschied ist, dass man einmal die Spalten ändern muss (also die eigentliche
    SQL-Syntax) und im anderen Fall auch mit Formularbezügen arbeiten kann oder
    sich nur um die WhereCondition Gedanken machen muss.

    Nun möchte aber jemand gerne die Produktionszahlen nach Jahren aufgeschlüsselt
    haben...auch das geht. Für die Exceltabelle braucht man ja nur die Felder in
    eine Abfrage zu stecken. Für die Accesstabelle bedient man sich hier einer Kreuztabellenabfrage:

    TRANSFORM
    	Sum(tblACC.Produziert) AS SummeProduziert
    SELECT
    	tblACC.ArtikelID
    FROM
    	tblACC
    GROUP BY
    	tblACC.ArtikelID
    PIVOT
    	tblACC.Produktionsdatum;




    Ein kleines Beispiel, mit den angesprochenen Abfragen findet ihr
    hier.




    Um es einmal zu überspitzen nehme ich ein anderes Beispiel:

    Es gibt Mitarbeiter mit zugehöriger Hardware und Software. Für Excel würde
    man nun für jeden Mitarbeiter eine Zeile anlegen und für jede Hardware oder
    Software eine Spalte anlegen und dort zum Beispiel eine Checkbox reinsetzen.
    In Access nimmt man wieder nur 3 Spalten, Mitarbeiter, Hardware, Software. Die
    Abfrage soll mir nun aufzeigen, welcher Mitarbeiter, Windows 2000, Office 2000,
    den Internet Explorer und einen Zugang zum Intranet hat. Diese Mitarbeiter sollen über
    einen 15" TFT, ein Notebook, einen Drucker und Scanner verfügen:

    tblACC:

    SELECT
    	Mitarbeiter
    FROM
    	tblHardSoftware
    WHERE
    	Hardware In ('15" TFT', 'Notebook', 'Drucker', 'Scanner')
      AND
    	Software In ('Windows 2000', 'Office 2000', 'Internet Explorer', 'Intranet');




    tblXLS:

    SELECT
    	Mitarbeiter
    FROM
    	tblHardSoftware
    WHERE
    	Not [15" TFT] Is Null
      AND
    	Not Notebook Is Null
      AND
    	Not Drucker Is Null
      AND
    	Not Scanner Is Null
      AND
    	Not [Windows 2000] Is Null
      AND
    	Not [Office 2000] Is Null
      AND
    	Not [Internet Explorer] Is Null
      AND
    	Not Intranet Is Null;




    Viel Spaß, wenn man so eine Abfrage dynamisch gestalten will ;-)