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:
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.
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 ;-)