Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Tabellenerstellung mit ADOX

Geschrieben von: Christoph Wille
Kategorie: Datenbank

This printed page brought to you by AlphaSierraPapa

ADOX ist das Kürzel für Microsoft ADO Ext. 2.5 for DDL and Security - auf gut Deutsch die "ADO Erweiterungen für Datendefinition und Sicherheit". Damit kann man Access Datenbanken vollständig von Code aus managen, inklusive der Erstellung von Tabellen.

In diesem Artikel möchte ich mich ganz auf die Tabellenerstellungsfunktionen von ADOX konzentrieren. Normalerweise erstellt man sich eine Access Datenbank direkt in MS Access um sie dann in ASP Seiten zu verwenden. Sehr wenige wissen allerdings, daß man diese Tabellenerstellung (als auch Datenbankerstellung) ohne MS Access abwicklen kann.

Anlegen einer neuen Datenbank

Der erste Schritt zur neuen Tabelle könnte das Anlegen einer völlig neuen Datenbank sein (muß es allerdings nicht). Dazu benötigt man nicht mehr als eine Zeile ADOX Code:

<%
   Set cat = CreateObject("ADOX.Catalog")
   cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
   		"Data Source=C:\MyDb.mdb"
%>

Das Catalog Objekt erlaubt es, sowohl neue Datenbanken anzulegen, als auch bestehende zu öffnen. In diesem Fall hat uns die Create Methode eine neue Datenbank mit dem Namen MyDb.mdb angelegt (entsprechende Schreibrechte vorausgesetzt!).

Anlegen einer Tabelle

Um eine Tabelle in der neuen Datenbank anzulegen, stellt uns ADOX das Table Objekt zur Verfügung. Der folgende Code demonstriert, daß man auch leere Tabellen (ohne Felder) in eine Datenbank einfügen kann, ohne daß sich Access beschwert.

<%
    Set cat = CreateObject("ADOX.Catalog")
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
			"Data Source=C:\MyDb.mdb"

    Set tbl = CreateObject("ADOX.Table")
    tbl.Name = "tBeispielTabelle"
    cat.Tables.Append tbl
%>

Man muß nur ein Table Objekt erstellen, einen Namen zuweisen (eindeutig), und die Tabelle dann an die Tables Collection anfügen. Schon hat die Datenbank eine Tabelle mehr.

Hinzufügen von Feldern

Für das Hinzufügen von Feldern sollte man sich doch etwas mehr Zeit nehmen, da man sehr viele Eigenschaften setzen kann. Und da auch bei ADOX viele Wege nach Rom führen, habe ich in dem folgenden Beispiel 5 Felder in die Tabelle eingefügt, jeweils mit unterschiedlichen Eigenschaften.

<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" 
	TYPE="TypeLib" 
	UUID="{00000205-0000-0010-8000-00AA006D2EA4}"
-->
<!--METADATA NAME="Microsoft ADO Ext. 2.5 for DDL and Security" 
	TYPE="TypeLib" UUID="{00000600-0000-0010-8000-00AA006D2EA4}"
-->
<%
    Set cat = CreateObject("ADOX.Catalog")
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=c:\MyDb.mdb"
    Set tbl = cat.Tables("tBeispielTabelle")

    Set col = CreateObject("ADOX.Column")
    With col
        .Name = "Benutzername"
        .Type = adVarWChar
        .DefinedSize = 64
    End With
    tbl.Columns.Append col

    tbl.Columns.Append "Passwort", adVarWChar, 12
    tbl.Columns.Append "EmailAdresse", , 96
    tbl.Columns.Append "Alter", adInteger, 4

    Set col = CreateObject("ADOX.Column")
    With col
        .Name = "AutoWertFeld"
        .Type = adInteger
    End With
    Set col.ParentCatalog = cat
    col.Properties("Autoincrement") = True
    tbl.Columns.Append col
%>

Die beiden METADATA Statements dienen dazu, sowohl die Typenbibliothek von ADO als auch ADOX einzubinden. Der Zweck der Übung ist, die benannten Konstanten verwenden zu können, ohne diese mühsam als const definieren zu müssen.

Das erste Feld, das ich einfüge, nennt sich Benutzername. Es ist ein Textfeld, ist 64 Zeichen lang, und nimmt sonst alle Standardwerte an. Obwohl es umständlich aussieht, ist es die bevorzugte Feldhinzufügevariante, weil man bequem alle Feldeigenschaften in einem With Block setzen kann.

Die folgenden drei Felder werden mit der Append Method angefügt. Diese ist die schnellste Variante, erlaubt aber nicht alle Einstellungen des Column Objekts. Läßt man Parameter aus (wie für EmailAdresse), werden die Standardwerte eingesetzt (für Jet Datenbanken ist der Standardfeldtyp immer String).

Zum Abschluß füge ich das Feld AutoWertFeld ein. Grundsätzlich nichts besonderes, allerdings verändere ich auch noch eine Nicht-Standardeigenschaft: Autoincrement. Diese Nicht-Standardeigenschaften werden vom OLE-DB Provider zur Verfügung gestellt, und in diesem Falle ist es die Autowert Funktionalität von Jet Datenbanken.

Anlegen eines Primärschlüssels

Tja, wir haben zwar jetzt ein Feld mit dem Typ Autowert, allerdings fehlt uns noch der Primärschlüssel auf dieses Feld (Jet Tabellen ohne Primärschlüssel sind problematisch...). Mit Hilfe des Index Objekts ist das Hinzufügen allerdings nicht wirklich ein Problem:

<!--METADATA NAME="Microsoft ADO Ext. 2.5 for DDL and Security" 
	TYPE="TypeLib" UUID="{00000600-0000-0010-8000-00AA006D2EA4}"
-->
<%
    Set cat = CreateObject("ADOX.Catalog")
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
		 "Data Source=c:\MyDb.mdb"

    Set idx = CreateObject("ADOX.Index")
    With idx
        .Name = "PrimaryKey"
        .IndexNulls = adIndexNullsDisallow
        .PrimaryKey = True
        .Unique = True
        .Columns.Append "AutoWertFeld"
    End With

    Set tbl = cat.Tables("tBeispielTabelle")
    tbl.Indexes.Append idx
%>

Wer in Access schon Primärschlüssel angelegt hat, wird die üblichen Einstellungen sofort erkennen: keine Nullwerte erlaubt, Uniqueness sowie primary key Einstellung. Dann wird noch das Feld AutoWertFeld in die Collection Columns angefügt, und der Index dann der entsprechenden Tabelle zugeordnet.

Ich möchte darauf hinweisen, daß man Indizes auch über mehrere Felder anlegen kann. Man muß nur Columns.Append mehrfach mit den gewünschten Feldern aufrufen.

Schlußbemerkung

In dieser Kurztour durch ADOX haben wir eine Datenbank erstellt, eine Tabelle angelegt, Felder eingefügt, sowie einen Index kreiert. Dies ist allerdings Bruchteil dessen, was ADOX alles kann. Weitere Artikel beschäftigen sich mit Sicherheit, Management und weiteren Tabellenerstellungsaktivitäten.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000626.zip

Verwandte Artikel

Daten aus CSV-Dateien in MDBs importieren
http:/www.aspheute.com/artikel/20010607.htm
MS Access Datenbanken kompaktieren
http:/www.aspheute.com/artikel/20010321.htm
Query Express für MSDE
http:/www.aspheute.com/artikel/20020322.htm
Tabellenexistenz in Datenbanken überprüfen
http:/www.aspheute.com/artikel/20010511.htm
Yet Another Access Database Administration Tool
http:/www.aspheute.com/artikel/20020410.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.