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] Source Codes
Autor
Nachricht
ZiG
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 421

Datenbankprogrammierung Teil 2 (DAO)
Verfasst am: 17.04.2008, 12:37

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<br />Private Tb As DAO.Recordset<br />Private nTableDef As New TableDef 'Tabellendefinition<br />Private nField As New Field 'Felder<br />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<br /><br />dbLangArabic:                 Arabic<br />dbLangChineseSimplified:     Simplified Chinese<br />dbLangChineseTraditional:     Traditional Chinese<br />dbLangCyrillic:             Russian<br />dbLangCzech:                 Czech<br />dbLangDutch:                 Dutch<br />dbLangGreek:                 Greek<br />dbLangHebrew:                 Hebrew<br />dbLangHungarian:             Hungarian<br />dbLangIcelandic:             Icelandic<br />dbLangJapanese:             Japanese<br />dbLangKorean:                 Korean<br />dbLangNordic:                 Nordic languages (Microsoft Jet database engine version 1.0 only)<br /><br />dbLangNorwDan:                 Norwegian and Danish<br />dbLangPolish:                 Polish<br />dbLangSlovenian:             Slovenian<br />dbLangSpanish:                 Traditional Spanish<br />dbLangSwedFin:                 Swedish and Finnish<br />dbLangThai:                 Thai<br />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<br />dbVersion10:     Creates a database that uses the Microsoft Jet database engine version 1.0 file format<br /><br />dbVersion11:     Creates a database that uses the Microsoft Jet database engine version 1.1 file format<br /><br />dbVersion20:    Creates a database that uses the Microsoft Jet database engine version 2.0 file format<br /><br />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<br />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<br />With nField<br /> .Name = "ID"<br /> .Type = dbLong<br /> .Attributes = dbAutoIncrField<br /> nTableDef.Fields.Append nField<br /> Set nField = Nothing<br />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<br />dbBoolean:         BIT<br />dbByte:             BYTE<br />dbCurrency:        CURRENCY<br />dbDate:         DATE<br />dbDecimal:         DECIMAL<br />dbDouble:          DOUBLE<br />dbGUID:            GUID<br />dbInteger:         SMALLINT<br />dbLong:            INT<br />dbLongBinary:     LONGBINARY<br />dbMemo:             MEMO<br />dbSingle:         SINGLE<br />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<br />dbAttachSavePWD<br />dbAttachedTable<br />dbAttachedODBC<br />dbAutoIncrField<br />dbFixedField<br />dbHyperlinkField<br />dbSystemField<br />dbUpdatableField<br />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<br />With nField<br /> .Name = "Text"<br /> .Type = dbText<br /> .AllowZeroLength = True<br /> .Size = 255<br /> nTableDef.Fields.Append nField<br /> Set nField = Nothing<br />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<br />.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<br />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")<br />With nIndex<br /> .Primary = True<br /> .Required = True<br /> .Fields.Append nTableDef.CreateField("Text")<br /> nTableDef.Indexes.Append nIndex<br />End With<br />Set nIndex = Nothing<br />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.
 
igoe
Gast





Verfasst am: 22.05.2008, 21:52

Wie IMMER Total Geil 10* ^^
 
LooneyToons
Poster
Poster

Anmeldedatum: 01.05.2008
Beiträge: 125


Verfasst am: 22.05.2008, 22:04

ich glaub ich bin verliebt Very Happy <3
hast dir viel mühe gegeben , und alles gut beschrieben (soweit ich die sachen überflogen hab ^^)

ich denke ich werde das mal gut gebrauchen =)
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Source Codes

Tags: datenbank tutorial, dao, mdb, visual

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


[ Time: 0.6219s ][ Queries: 86 (0.3705s) ][ GZIP on - Debug on ]