Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2008.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erstellen Sie Tabellen und passen Sie bestehende Tabellen mit SQL an.

Techniken

VBA, SQL, Datenmodellierung

Voraussetzungen

Access 2000 und höher

Beispieldateien

-

Shortlink

609

Datenbanken und Tabellen per SQL anpassen

André Minhorst, Duisburg

Datenbanken per SQL erstellen? Dazu gibt es doch die Access-Benutzeroberfläche! Das hilft Ihnen aber wenig weiter, wenn Sie eine Anwendung für einen Kunden entwickelt haben und Änderungen am Datenmodell vornehmen müssen, ohne vor Ort zu sein, oder den Kunden fernsteuern möchten. Es gibt doch auch noch die Fernwartung? Klar, aber wenn die Software nicht nur bei einem, sondern bei vielen Kunden in Betrieb ist ...

Am offenen Herzen

Es ist technisch kein Problem, einem Kunden eine neue Version der Benutzeroberfläche seiner Datenbank zukommen zu lassen, wenn diese sauber vom Backend getrennt ist. Altes Backend wegsichern, neues an die gewünschte Stelle kopieren, vielleicht noch automatisiert die Tabellen einbinden, fertig.

Aber was, wenn Änderungen am Datenmodell, also am Backend, notwendig werden? Das Backend austauschen? Wie denn? Dazu müsste man zum Beispiel das Backend umbenennen, das neue Backend hinzufügen, die Daten aus dem alten Backend in das neue Backend importieren oder das Backend mit den aktuellen Daten vom Kunden schicken lassen, die Änderungen in Windeseile vornehmen und das Backend wieder zurückschicken. Beides ist keine optimale Lösung. Viel schöner wäre es doch, wenn man einfach zum Kunden fährt und dort von Hand mal eben eine Tabelle hinzufügt, einen Felddatentyp ändert oder andere Anpassungen durchführt. Aber wie bereits erwähnt, macht das auf Dauer keinen Spaß, wenn Sie vielleicht mehrere Kopien der Software bei weit verstreuten Kunden laufen haben.

Da aber Access jede Aktion, die man mit der Benutzeroberfläche durchführt, genau wie Datenabfragen oder -änderungen auch irgendwie an die Jet Engine kommunizieren muss, scheint es logisch, dass es auch hierfür passende SQL-Abfragen gibt. Und genau das ist der Fall: SQL teilt sich in zwei Teile auf, nämlich in DML (Data Manipulation Language) und DDL (Data Definition Language). DML umfasst die Befehle zum Abfragen und zum Ändern der in den Tabellen enthaltenen Daten und DDL liefert die Anweisungen zum Manipulieren des Datenmodells - genau genommen können Sie damit sogar komplette Datenbanken anlegen (wobei das Anlegen selbst per DAO geschieht).

Datenbank anlegen

Sie werden nun zunächst von einer bestehenden Datenbank aus eine neue Datenbank anlegen (das könnten Sie theoretisch auch in einem VBScript oder von einer anderen Anwendung mit VBA-Entwicklungsumgebung erledigen, aber wir wollen ja kein Auswärtsspiel). Dies funktioniert unter Access für JET-Datenbanken nicht wie bei anderen Datenbanksystemen mit der CREATE DATABASE-Anweisung, sondern Sie müssen die CreateDatabase-Methode des DBEngine-Objekts zu Hilfe nehmen:

DBEngine.CreateDatabase CurrentProject.Path & "\Suedsturm.mdb", dbLangGeneral, dbVersion40

Diese Anweisung legt eine neue Datenbankdatei namens Suedsturm.mdb im Verzeichnis der aktuellen Datenbank an und legt mit ihren Optionen fest, dass die Spracheinstellungen für Deutschland und einige weitere Länder verwendet werden und eine Datenbank für die Verwendung mit Jet 4.0 erzeugt wird. dbLangGeneral ist eine Konstante mit dem Inhalt ;LANGID=0x0409;CP=1252;COUNTRY=0, der Sie beispielsweise noch einen Ausdruck wie pwd=kennwort hinzufügen können, um ein Kennwort festzulegen. Mit dem Wert dbEncrypt können Sie die Datenbank zusätzlich verschlüsseln.

Tabellen anlegen

Tabellen legen wir aber nun per SQL an. Dazu verwenden Sie die CREATE TABLE-Anweisung, die den Tabellennamen und zumindest die Angabe eines Felds erwartet (es funktioniert auch ohne Feld, aber diese Tabelle lässt sich anschließend nicht im Entwurf öffnen). Bauen wir eine Tabelle namens tblKategorien (s. Abb. 1). Das Grundgerüst erstellt die folgende SQL-Anweisung:

pic001.tif

Abb. 1: Die Tabelle tblKategorien der Südsturm-Datenbank

CREATE TABLE tblKategorien(

KategorieID INT,

Kategoriename VARCHAR(255),

Beschreibung LONGTEXT,

Abbildung IMAGE)

Neben dem Tabellennamen geben Sie also die Felder gefolgt vom Datentyp in Klammern in einer durch Kommata getrennten Liste an.

Die Datentypen finden Sie übrigens in Tab. 1, zusammen mit den jeweils entsprechenden Datentypen für den Tabellenentwurf.

Das Ergebnis ist noch nicht ganz befriedigend: Es fehlen noch die Primärschlüsseleigenschaften des Felds KategorieID. Was tun? Es gibt zwei Möglichkeiten: Entweder, Sie löschen die Tabelle noch einmal und geben die erforderlichen Informationen beim erneuten Anlegen mit ein, oder Sie reichen die Primärschlüssel-Eigenschaften so nach.

Tabelle löschen

Die erste Variante erfordert zunächst das Löschen der Tabelle, die dazu geschlossen sein muss:

DROP TABLE tblKategorien

Primärschlüssel einrichten

Anschließend statten Sie die CREATE TABLE-Anweisung so aus:

CREATE TABLE tblKategorien(

KategorieID INT CONSTRAINT PK PRIMARY KEY, ...

Alternativ fügen Sie diesen sogenannten CONSTRAINT an das bestehende Feld an, wobei PK der Name des dadurch erzeugten Index für das Feld KategorieID ist:

ALTER TABLE tblKategorien

ADD CONSTRAINT PK PRIMARY KEY (KategorieID)

Autowert einrichten

Fehlt noch die Autowert-Eigenschaft. Dafür brauchen Sie einfach nur das Schlüsselwort COUNTER statt des Datentyps INT anzugeben:

CREATE TABLE tblKategorien(

KategorieID COUNTER

CONSTRAINT PK PRIMARY KEY, ...

Indizes anlegen

Mit dem CONSTRAINT-Schlüsselwort lassen sich nicht nur Primärschlüssel, sondern auch sonstige Indexfelder festlegen. Sollte das Feld Kategoriename beispielsweise wie in Abb. 2 indiziert werden, fügt man einen Index wie folgt hinzu:

pic002.tif

Abb. 2: Feld mit einem einfachen Index

CREATE INDEX I ON tblKategorien(Kategoriename)

Einen einfachen Index können Sie nicht direkt beim Anlegen der Tabelle hinzufügen.

Eindeutige Indizes

Eine eindeutige Indizierung können Sie sowohl beim Anlegen der Tabelle als auch nachträglich festlegen. Die Version beim Anlegen sieht so aus:

CREATE TABLE tblKategorien(...,

Kategoriename VARCHAR(255)

CONSTRAINT U UNIQUE, ...)

Das nachträgliche Hinzufügen geschieht so:

CREATE UNIQUE INDEX U ON tblKategorien(Kategoriename)

Beide wirken sich wie in Abb. 3 aus.

pic003.tif

Abb. 3: Ein eindeutiger Index im Indizes-Fenster

Nullwerte verhindern

Darf ein Feld keine Nullwerte enthalten, fügen Sie ihm beim Anlegen die Klausel NOT NULL hinzu:

CREATE TABLE tblKategorien(...,

Kategoriename VARCHAR(255) NOT NULL, ...)

Auf diese Weise stellen Sie die Eigenschaft Eingabe erforderlich der Entwurfsansicht auf Ja ein.

Fremdschlüsselfelder festlegen

Beziehungen werden in relationalen Datenbanken durch Fremdschlüsselfelder definiert.

Daher legen Sie nun gleichzeitig eine neue Tabelle namens tblArtikel an und fügen dieser ein Fremdschlüsselfeld namens KategorieID hinzu, das mit dem Primärschlüsselfeld der Tabelle tblKategorien verknüpft werden soll:

CREATE TABLE tblArtikel(

ArtikelID COUNTER CONSTRAINT PK PRIMARY KEY,

Artikelname VARCHAR(255) NOT NULL,

KategorieID INT,

CONSTRAINT FK FOREIGN KEY(KategorieID)

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

SQL-Datenbankschema auslesen

DAO: Tabellen, Felder und Co. bearbeiten

Indizierung mit Access

Quellcode-Versionsverwaltung inside

Professionelle Datenmodellierung mit Access

Tabellen und Felder dokumentieren

Die Microsoft Data Engine (MSDE)

Daten archivieren und wiederherstellen

Datenhierarchien in Access

© 2003-2015 André Minhorst Alle Rechte vorbehalten.