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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Tabellenerstellung mit ADOX

Geschrieben von: Christoph Wille
Kategorie: Datenbank

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Daten aus CSV-Dateien in MDBs importieren
MS Access Datenbanken kompaktieren
Query Express für MSDE
Tabellenexistenz in Datenbanken überprüfen
Yet Another Access Database Administration Tool

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.