|
| Autor |
Nachricht |
ZiG Ü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

Anmeldedatum: 01.05.2008 Beiträge: 125
|
Verfasst am: 22.05.2008, 22:04 |
|
|
ich glaub ich bin verliebt <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 =) |
|
| |
|
 |
|
|