Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks
Autor
Nachricht
ZiG_
Überflieger
Überflieger

Anmeldedatum: 07.03.2007
Beiträge: 1248

[Text] Datenbank per Laufzeit erstellen
Verfasst am: 03.05.2009, 12:38

Thema: Datenbank per Laufzeit erstellen
Autor: ZiG



Index:
1. Einleitung
2. Deklarationen
3. Datenbank erstellen
4. Tabellen und Felder
5. Index erstellen
6. Datenbank öffnen
7. Passwortschutz


1. Einleitung

Hallo alle miteinander. Hab doch mal wieder Lust auf tutorials schreiben und hab mir gedacht, ich werde euch mal beschreiben wie man eine Datenbank per Laufzeit erstellen kann.
Ist ja nicht sehr schön, wenn man die Datenbank vorher per "Visual Data Manager" erstellen muß um sie mitzuliefern.

Dieses tutorial ist als Ergänzung zum letzten Datenbank tutorial zu sehen und handelt wieder von DAO.
http://dbhost.info/vbx/viewtopic.php?t=746

Ich werde hier verschiedene Punkte ansprechen/behandeln und hoffe euch somit den Einstieg zu erleichtern.

Was wird benötigt?
1. Ein neues Projekt oder ein bestehendes von euch.
2. Einen Verweis auf "Microsoft DAO 3.6 Object Library"
Zu finden unter "Pojekt - Verweise"


So. Jetzt gehts los.


2. Deklarationen

Als erstes brauchen wir ein paar Deklarationen.
Fürs Datenbank bzw. Tabelle öffnen sind es wieder die selben wie im letzten tutorial, aber jetzt brauchen wir noch welche um Tabellen und die darin enthaltenen Felder erstellen zu können.

"TableDef" (Tabellendefinition) und "Field" (Feld).
"DAO.Index" brauchen wir später zum erstellen eines Indexes.

Deklarationen:
Code:
Private Db As DAO.Database
Private Tb As DAO.Recordset
Private nTableDef As New TableDef 'Tabellendefinition
Private nField As New Field 'Felder
Private nIndex As DAO.Index 'Zum erzeugen des Indexes


Damit hätten wir schonmal den Grundstein.


3. Datenbank erstellen


Code:
Set Db = DAO.Workspaces(0).CreateDatabase(Name, Connect, Option)


(Set Db)
Die erstellte Datenbank wird der Variable Db(Dao.Database) zugewiesen.

(Workspaces)
Man kann "Workspaces" auch als Variable wie Db oder Tb deklarieren, aber da man das eigentlich nur selten braucht, verzichte ich darauf.

(CreateDatabase)
Nunja. Sollte klar sein was hier passiert.

(Name)
Hier wird der komplette Pfad zur Datei erwartet, die erstellt werden soll.
Beispiel: App.Path & "\test.mdb"

(Connect)
Gibt die benutzte Sprache an.
Im Normalfall nimmt man "dbLangGeneral".
Beispiele:
Code:

dbLangGeneral:     Western European: English, German, French, Portuguese, Italian, and modern Spanish

dbLangArabic:             Arabic
dbLangChineseSimplified:    Simplified Chinese
dbLangChineseTraditional:    Traditional Chinese
dbLangCyrillic:          Russian
dbLangCzech:             Czech
dbLangDutch:             Dutch
dbLangGreek:             Greek
dbLangHebrew:             Hebrew
dbLangHungarian:          Hungarian
dbLangIcelandic:          Icelandic
dbLangJapanese:          Japanese
dbLangKorean:             Korean
dbLangNordic:             Nordic languages (Microsoft Jet database engine version 1.0 only)

dbLangNorwDan:             Norwegian and Danish
dbLangPolish:             Polish
dbLangSlovenian:          Slovenian
dbLangSpanish:             Traditional Spanish
dbLangSwedFin:             Swedish and Finnish
dbLangThai:             Thai
dbLangTurkish:             Turkish


(Option)
Dieser Wert ist optional. Man müßte hier also nichts angeben, da dbVersion30 der Default Wert ist.
Aber hier mal die Möglichen Optionen:

Code:
dbEncrypt:       Creates an encrypted database
dbVersion10:    Creates a database that uses the Microsoft Jet database engine version 1.0 file format

dbVersion11:    Creates a database that uses the Microsoft Jet database engine version 1.1 file format

dbVersion20:   Creates a database that uses the Microsoft Jet database engine version 2.0 file format

dbVersion30:    (Default) Creates a database that uses the Microsoft Jet database engine version 3.0 file format (compatible with version 3.51)


Auf dbEncrypt komm ich dann unter dem Punkt "Passwortschutz" zurück.

Nun müßte euer Aufruf etwa so aussehen.

Code:
Set Db = DAO.Workspaces(0).CreateDatabase(App.Path & "\test.mdb", dbLangGeneral)


Den Pfad solltet ihr aber eher in einer Variable übergeben.
So lässt sich das ganze auch schön in eine Function auslagern.


4. Tabellen und Felder

Dieser Teil gehört noch zum erstellen der Datenbank, also in die selbe Function/Sub.

Nun haben wir schonmal das Grundgerüst der Datenbank. Aber jetzt wollen wir natürlich noch Tabellen mit Feldern erstellen die wir dann füttern können.

Das funktioniert so, dass wir jetzt den Variablen nTableDef und nField erstmal die Namen und Eigenschaften übergeben und dann diese Variablen an die eigentliche Datenbank übergeben.
Code:

'Tablename
nTableDef.Name = "TestTable"


Und nun die erste Spalte. (Felder)
Bei dieser möchte ich euch gleich zeigen wie man eine eindeutige ID von der Db für jeden Eintrag erstellen lässt.

Tipp: Benutzt oft "with", dann bleibt der code schön übersichtlich.
Code:

'Erste Spalte
With nField
 .Name = "ID"
 .Type = dbLong
 .Attributes = dbAutoIncrField
 nTableDef.Fields.Append nField
 Set nField = Nothing
End With

(With nField)
Wir benutzen also die Variable nField um die Felder zu erstellen.

(.Name)
Hier weisen wir der Spalte einen eindeutigen Namen zu.

(.Type)
Hier geben wir den Typ an.
Optionen:
Code:
dbBinary:        BINARY
dbBoolean:       BIT
dbByte:          BYTE
dbCurrency:      CURRENCY
dbDate:       DATE
dbDecimal:       DECIMAL
dbDouble:        DOUBLE
dbGUID:         GUID
dbInteger:       SMALLINT
dbLong:         INT
dbLongBinary:    LONGBINARY
dbMemo:          MEMO
dbSingle:       SINGLE
dbText:          TEXT


dbLong in unserem Fall, da die Db für jeden Eintrag eine eindeutige Zahl erstellen soll.

(.Attributes)
Hier können wir Attribute angeben wie z.B. AutoIncrement oder FixedField.
Optionen:
Code:

dbAttachExclusive
dbAttachSavePWD
dbAttachedTable
dbAttachedODBC
dbAutoIncrField
dbFixedField
dbHyperlinkField
dbSystemField
dbUpdatableField
dbVariableField


In unserem Fall bei der ersten Spalte nehmen wir dbAutoIncrField.
Dadurch wird also die eindeutige Zahl automatisch inkrementiert.


(nTableDef.Fields.Append nField)
Und hier weisen wir die Variable "nField" mit unseren gesetzten Eigenschaften den Tabellendefinitionen zu.


Als nächstes erstellen wir noch eine Textspalte.
Code:
'Nächste Spalte
With nField
 .Name = "Text"
 .Type = dbText
 .AllowZeroLength = True
 .Size = 255
 nTableDef.Fields.Append nField
 Set nField = Nothing
End With


(.Type)
Wie ihr seht steht hier nun dbText. Sollte klar sein, dass dies hier nun eine Spalte für Text wird.

(.AllowZeroLength)
Das ist eine weiter Option von vielen.
Hiermit kann man bestimmen, dass ein Feld auch leer bleiben kann.
Ansonsten kommt es zu Fehlern, wenn der Benutzer für diese Spalte nichts eingibt.

(.Size)
Gibt die maximale Länge des zu speichernden strings an.
255 ist übrigens auch das Maximum.
Wenn man mehr speichern will, sollte man den Typ "dbMemo" nutzen.

Es gibt noch paar weiter Eigenschaften die man setzen kann.
Hier zwei davon, die iher sicher auch mal brauchen werdet:
Code:

.Required = True
.DefaultValue = "blabla"


(nTableDef.Fields.Append nField)
nField wird wieder den Tabellendefinitionen zugewiesen.

So. Wenn ihr soviel Spalten erstellt habt wie ihr wollt, dann machen wir jetzt weiter indem wir die Tabellendefinitionen in die Datenbank einfügen.
Code:

'In Db einfügen
Db.TableDefs.Append nTableDef


Somit ist die Datenbank eigentlich schon fertig.
Aber es wäre ja noch praktisch einen Index für eine Spalte zu erzeugen, damit man später bestimmte Einträge schneller wieder finden kann.


5. Index erstellen
Code:

Set nIndex = nTableDef.CreateIndex("TestIndex")
With nIndex
 .Primary = True
 .Required = True
 .Fields.Append nTableDef.CreateField("Text")
 nTableDef.Indexes.Append nIndex
End With
Set nIndex = Nothing
Set nTableDef = Nothing


(Set nIndex = nTableDef.CreateIndex("TestIndex"))
Ein Index mit dem Namen "TestIndex" wird erstellt.

(.Primary = True)
Jeder Eintrag muß eindeutig sein.

(.Required = True)
Es muß ein Wert gesetzt werden.

(.Fields.Append nTableDef.CreateField("Text"))
Hier erzeugen wir ein Feld in "nIndex" mit dem Namen der Spalte, für die wir einen Index erstellen wollen.

(nTableDef.Indexes.Append nIndex)
Und nun wird fügen wir "nIndex" den Tabellendefinitionen hinzu.
Womit wir nun einen eindeutigen Index auf die Spalte "Text" gesetzt haben. Somit kann man sehr schnell bestimmte Einträge per "Seek" aufspüren.


6. Datenbank öffnen

Code:
Set Db = Workspaces(0).OpenDatabase(Name, Option, ReadOnly, Connect)

(.OpenDatabase)
Zum öffnen der Datenbank.

(Name)
Hier den Pfad zu Datenbank angeben.

(Option)
Ist Optional.
Verlangt True oder False.
Bestimmt ob die Datenbank exklusiv geöffnet wird oder nicht. (Wenn ich mich richtig erinnere. "Option" sagt ja leider nicht viel aus.)
Mit exklusiv meine ich (Falls es jemand nicht versteht), dass nur das eigene Programm auf die Db zugreifen kann bis es beendet wird.

(ReadOnly)
Ist Optional.
Bestimmt ob man die Datei im Lesezugriff öffnen möchte oder nicht.
Verlangt True oder False.

(Connect)
Ist Optional.
Hier kann man ein Passwort angeben falls die Db Kennwortgeschützt ist.
Was man sonst noch angeben kann weiß ich nicht.
Aber wenn ich mich nicht täusche, kann man auch verschiedene Datenbanktypen angeben.


Also. Die einzige Zeile genügt um die Db zu öffnen.
Am besten in eine Function auslagern, die einen Boolean Wert zurückgibt.


7. Passwortschutz

Als Bonus zeige ich euch hier noch, wie man eine Passwortgeschützte Datenbank erstellen und diese auch öffnen kann.

Code:
Set Db = DAO.Workspaces(0).CreateDatabase(App.Path & "\test.mdb", dbLangGeneral & ";pwd=passwort", dbEncrypt)


Das ist also der erste Aufruf zum erstellen der Db.
Aber jetzt mit zwei Änderungen.

(dbLangGeneral & ";pwd=passwort")
Bei der Sprachangabe geben wir also per ";pwd=..." das Passwort an.

(dbEncrypt)
Hier unter "Option" geben wir "dbEncrypt" an, womit wir zeigen, dass es eine geschützte Db sein soll.

So wird sie also mit Kennwortschutz erstellt.
Jetzt müssen wir sie aber auch öffnen können.

Code:
Set Db = Workspaces(0).OpenDatabase(Filepath, True, False, ";pwd=passwort")


(";pwd=passwort")
Hier unter "Option" schreiben wir einfach wieder den selben ";pwd=..." Aufruf hinein und schon kann die Datenbank mit Passwort geöffnet werden.


Und das wars auch schon.
Hoffe ihr habt was gelernt und könnt eure Programme dadurch erweitern.


mfg, ZiG


Ps.: Falls Fehler entdeckt werden, dienen diese zur allgemeinen Belustigung und als C&P Protection.
_________________
Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks

Tags: datenbank erstellen, laufzeit erstellen

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 387 20.05.2002, 01:28
Keine neuen Beiträge Das passwort an die E-Mail von mir senden? 304 17.10.2007, 22:18
Keine neuen Beiträge Passwort Generator by sollniss 801 28.11.2008, 18:03
Keine neuen Beiträge Eine kleine Frage an euch.. 373 30.09.2007, 09:57
Keine neuen Beiträge TUT zur Passwort abfrage 650 10.08.2007, 16:06
 



[ Time: 0.2355s ][ Queries: 81 (0.0807s) ][ GZIP on - Debug on ]