window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Tabellen erstellen mit SQL und DDL

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Tabellen erstellen Sie normalerweise über die Entwurfsansicht für Tabellen. Dort fügen Sie Felder hinzu, legen Datentypen fest und wählen das Primärschlüsselfeld aus. Was aber, wenn Sie einmal eine änderung an einer Tabelle vornehmen müssen, ohne dass Sie Zugriff auf die Datenbank haben – beispielsweise, weil die Datenbank schon beim Kunden in Betrieb ist Oder Sie sogar komplette neue Tabellen anlegen wollen Dann können Sie dies auch per Code erledigen. Dieser Artikel zeigt, wie das per Data Definition Language (DDL) gelingt – dem Teil von SQL, der sich um das Definieren der Objekte der Datenbank kümmert.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1704_TabellenErstellenSQL.accdb.

Was ist DDL

Access-SQL besteht aus zwei Teilen: DML und DDL. DML ist die Data Manipulation Language, mit der Sie Daten auswählen und ändern können. Die Auswahl erfolgt dabei in der Regel durch die SELECT-Anweisung, das ändern durch die INSERT INTO-Anweisung zum Anlegen von Datensätzen, die UPDATE-Anweisung zum ändern vorhandener Daten und die DELETE-Anweisung zum Löschen von Daten.

Die DDL, also die Data Definition Language, dient dazu, die Tabellen, Felder, Indizes, Fremdschlüssel und so weiter anzulegen, zu ändern oder zu löschen. In diesem Artikel schauen wir uns den DDL-Teil von SQL an und werden beispielsweise neue Tabellen anlegen, Tabellen löschen, Felder hinzufügen, ändern und löschen oder die Indizes und die Beziehungen zwischen den Tabellen bearbeiten.

Parallel schauen wir uns an, wie sich die jeweiligen Anweisungen auf den Entwurf der entsprechenden Tabelle auswirken.

Anzulegende Tabellen

Um in der Entwurfsansicht eine neue Tabelle anzulegen, betätigen Sie den Ribbon-Eintrag Erstellen|Tabellen|Tabellenentwurf. Es erscheint dann der Entwurf der neuen, noch leeren Tabelle. Hier fügen Sie nun die gewünschten Felder hinzu und speichern die Tabelle unter dem gewünschten Namen, beispielsweise tblKunden. Das Ergebnis sieht dann etwa wie in Bild 1 aus. Diese Tabelle wollen wir nun komplett per VBA mit den entsprechenden SQL-Befehlen erstellen. Außerdem wollen wir eine weitere Tabelle namens tblAnreden hinzufügen, welche die beiden Felder AnredeID (als Primärschlüsselfeld) sowie Anrede enthält. Die Tabelle tblKunden soll dann über das Fremdschlüsselfeld AnredeID mit dem Primärschlüsselfeld der Tabelle tblAnreden verknüpft werden. Die Beziehung soll mit referenzieller Integrität definiert werden, damit in das Fremdschlüsselfeld AnredeID der Tabelle tblKunden nur Werte eingegeben werden können, die bereits im gleichnamigen Primärschlüsselfeld der Tabelle tblAnreden vorhanden sind.

Diese Tabelle wollen wir mit VBA und SQL nachbauen.

Bild 1: Diese Tabelle wollen wir mit VBA und SQL nachbauen.

Die Beziehung soll anschließend die Eigenschaften wie in Bild 2 aufweisen.

Beziehung zwischen den Tabellen tblKunden und tblAnreden

Bild 2: Beziehung zwischen den Tabellen tblKunden und tblAnreden

Die Primärschlüsselfelder der beiden Tabellen tblKunden und tblAnreden sollen außerdem als Autowert-Felder definiert werden.

Ausführen von DDL-Befehlen

Um einen DDL-Befehl auszuführen, benötigen Sie wenige Zeilen VBA-Code. Die einzige Methode, die wir anwenden, heißt Execute und gehört zum Database-Objekt der DAO-Bibliothek (Microsoft DAO 3.6 Object Library, in neueren Access-Versionen ACE, Microsoft Office x.0 Access database engine Object Library). Für dieses deklarieren wir zuvor eine entsprechende Objektvariable:

Dim db as DAO.Database

Mit der folgenden Anweisung füllen wir die Objektvariable, wobei die Funktion CurrentDb einen Verweis auf das aktuelle Database-Objekt liefert:

Set db = CurrentDb

Schließlich rufen wir die Methode Execute dieses Objekts auf:

db.Execute "CREATE TABLE ...", dbFailOnError

Wichtig ist hier, dass Sie neben der auszuführenden SQL-Anweisung als ersten Parameter noch einen zweiten Parameter übergeben, welcher die Konstante dbFailOnError enthält. Nur so löst eine fehlerhafte SQL-Anweisung auch einen Laufzeitfehler aus.

Diese Anweisung definieren Sie beispielsweise in einem Standardmodul, das Sie im VBA-Editor (zu öffnen mit Alt + F11) mit dem Menübefehl Einfügen|Modul hinzufügen. Hier können Sie die nachfolgend vorgestellten Anweisungen in jeweils eigenen Prozeduren hinzufügen. Zum testweisen Ausführen positionieren Sie die Einfügemarke irgendwo innerhalb der auszuführenden Prozedur und betätigen die Taste F5. Die Inhalte der Prozeduren können Sie natürlich auch etwa in die Prozeduren einfügen, die durch die Schaltflächen eines Formulars ausgelöst werden. Im Rahmen dieses Artikels wollen wir uns jedoch auf die Tests vom VBA-Editor aus beschränken.

Anlegen der Tabelle tblAnreden

Als Erstes legen wir die Tabelle tblAnreden an. Diese Tabelle hat nur zwei Felder, nämlich AnredeID und Anrede. Schon der erste Versuch, die Tabelle einfach mit der Anweisung CREATE TABLE tblAnreden anzulegen, führt zu einem Fehler. Aber nicht etwa, weil wir keine Felder angegeben haben, sondern weil die Tabelle schlicht und einfach bereits vorhanden ist – wir haben sie ja zum Veranschaulichen der üblicherweise verwendeten Vorgehensweise bereits über die Benutzeroberfläche angelegt (siehe Bild 3).

Fehler beim Versuch, eine bereits vorhandene Tabelle anzulegen

Bild 3: Fehler beim Versuch, eine bereits vorhandene Tabelle anzulegen

Tabelle löschen

Wir kümmern uns also bereits vor dem ersten Anlegen einer Tabelle per DDL um das Löschen einer bereits vorhandenen Tabelle gleichen Namens. Das ist zugegebenermaßen auch viel leichter, als die Tabelle zu erstellen und sieht wie folgt aus:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar