Datenbank nutzen ohne MS-Access??
Hi, da bin ich wieder...Nun also wie versprochen Teil 2 zum Thema ich klau mir ein Access.
Nochmal ein wenig Resuming...
Wir haben also im 1. Teil ne Datenbank erstellt, Tabellen und Felder generiert und alles aus Word oder Excel heraus.
Nun kommt das nächste, DB öffnen, editieren, verwalten....
Wer es noch nicht hat, sollte sich nochmal das Makro aus Teil 1 (das letzte dort) besorgen und anschauen.
Aber da der Mensch ja faul ist, hier nochmal der aktuelle Stand:
--------------- Sample ---------------
Option Explicit
Const PFAD As String = "C:\MeineDB"
Sub Datenbank_Neu()
Dim WS As Workspace
Dim DB As Database
Set WS = DBEngine.Workspaces(0)
Set DB = WS.CreateDatabase(PFAD, dbLangGeneral)
Dim TBL As TableDef
Dim FELD As Object
'Tabellen definieren
Set TBL = DB.CreateTableDef()
TBL.Name = "Telefonliste"
Set FELD = TBL.CreateField("Name", dbText, 30)
TBL.Fields.Append FELD
Set FELD = TBL.CreateField("Vorname", dbText, 30)
TBL.Fields.Append FELD
Set FELD = TBL.CreateField("Telefon", dbText, 20)
TBL.Fields.Append FELD
'Erstellen der Tabelle in der Datenbank
DB.TableDefs.Append TBL
Dim RS As Recordset
Set RS = DB.OpenRecordset("Telefonliste", dbOpenTable)
With RS
Do
.AddNew
!Vorname = InputBox("Vorname:")
!Name = InputBox("Nachname:")
!Telefon = InputBox("Telefon:")
.Update
Loop Until MsgBox("Neuen Datensatz anlegen?", vbYesNo, "Neu..") = vbNo
End With
Set RS = Nothing
Set DB = Nothing
Set WS = Nothing
End Sub
--------------- Sample ---------------
Füge nun drei bis fünf Datensätze in die DB ein damit wir was zum spielen haben.
So, darauf wollen wir nun aufbauen. Es existiert also eine DB, die wir nun öffnen wollen.
1. Datenbank öffnen
-------------------
* Unter der schon bestehenden Prozedur (das Beispiel da oben, fängt mit Sub... an und hört mit End Sub auf)
fügst Du nun folgendes ein:
--------------- Sample ---------------
Sub Datenbank_Öffnen()
Dim WS As Workspace
Dim DB As Database
Set WS = DBEngine.Workspaces(0)
Set DB = WS.OpenDatabase(PFAD)
'Hier Zugriff auf die Daten
Set DB = Nothing
Set WS = Nothing
End Sub
--------------- Sample ---------------
Das wars schon. Wenn Du das nun laufen lässt sagst bestimmt: huuch..nix passiert. Kann auch nicht. Das ist
nur das öffnen der DB nix weiter, und danach wird sie gleich wieder geschlossen. Die Daten bearbeiten datt kommt nu....
2. Datensätze abrufen
---------------------
* Als erstes überlegen wir uns was wir abrufen wollen. Ist ja nicht ganz so schwer, steht ja bestimmt nicht
soviel drin in der DB, aber wir wollen mal alle Datensätze aus der Tabelle Telefonliste haben.
* Du nimmst wieder das obige Beispiel und da wo 'Hier Zugriff auf die Daten steht, fügst Du folgenden
Code ein:
--------------- Sample ---------------
Dim strSQL As String 'Variable für das Abfragestatement
Dim RS As Recordset 'Variable zum Aufnehmen der Daten
Dim NeuesDok As Document
strSQL = "SELECT * FROM Telefonliste"
Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
If RS.RecordCount = 0 Then 'Fehlerbehandlung falls keine Daten drin sind
MsgBox "Keine Daten gefunden"
Exit Sub
End If
Set NeuesDok = Documents.Add 'neues Worddokument, wo Ergebnisse reinkommen
Do While Not RS.EOF 'Auslesen aller Einträge bis nix mehr da is
NeuesDok.Content.InsertAfter RS.Fields("Name") & ", " & RS.Fields("Vorname") & RS.Fields("Telefon") & vbCrLf
RS.MoveNext
Loop
Set RS = Nothing
--------------- Sample ---------------
Wow!! Gut gemacht. Oder hat nicht geklappt? Sollte aber, wenns durchgelaufen ist, hast Du nun ein neues
Word-Dokument offen, in dem untereinander die Daten aus deiner Telefonliste aufgeführt sind. Cool oder?
Und alles ohne Access!
OK, das war schon mal gut. Nun ists aber so, das wir bei den hunderten von Buddys in der Liste nicht alle haben
wollen, sondern nur ganz bestimmte. Also müssen wir auch noch suchen...
3. Datensätzen suchen
---------------------
Wir wollen mal einen bestimmten Datensatz über den Vornamen rauskriegen.
* Dazu kopierst Du Dir wieder den Beispielcode ans Ende hinter die beiden bestehenden Prozeduren
--------------- Sample ---------------
Sub Datensatz_Suchen()
Dim WS As Workspace
Dim DB As Database
Set WS = DBEngine.Workspaces(0)
Set DB = WS.OpenDatabase(PFAD)
Dim RS As Recordset
Dim strSQL As String
Dim strSuche As String
strSQL = "SELECT * FROM Telefonliste"
Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
strSuche = InputBox("Suchbegriff Vorname:")
RS.FindFirst "Vorname= '" & strSuche & "'"
If Not RS.NoMatch Then
MsgBox "Suchergebnis für " & RS!Vorname & vbCrLf & vbCrLf & RS!Vorname & " " & RS!Name & ", " & RS!Telefon
Else
MsgBox "Vorname " & strSuche & " nicht gefunden"
End If
'Hier könnte weiterer Code stehen
Set RS = Nothing
Set DB = Nothing
Set WS = Nothing
End Sub
--------------- Sample ---------------
Nun sollte eine Nachricht mit dem gefunden Ergebnis kommen (Wenn Du denn so einen Vornamen in der DB drin hast) Man
kann das natürlich noch verfeinern mit Jokern und son Krams...
Möchtest Du vielleicht den/die gefundenen Datensätze löschen?? Kein Problem, es sind nur 2 Dinge zu beachten:
Du kannst das obere Beispiel dazu verwenden. Aus rechtlichen (DB-Zugriff) Gründen musst du dazu in der Zeile
Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
das dbOpenSnapshot durch dbOpenDynaset ersetzen.
Und die Zeile mit 'Hier könnte weiterer Code stehen überschreibst Du zum Beispiel mit RS.Delete
Und Schwupps, ist der Datensatz wech...Kannst Du überprüfen mit der Prozedur Datenbank_öffnen.
Tja, und was noch fehlt ist das ändern von Datensätzen, falls mal einer Deiner Buddys ne neue Telenummer hat...
4. Datensätze ändern
--------------------
Wir wollen also einen bestimmten Datensatz rauspicken und bei dem die Telefonnummer ändern.
Also fast so wie oben, nur das noch eine Kleinigkeit geändert werden muss.
* Dazu kopierst Du Dir wieder den Beispielcode ans Ende hinter die anderen bestehenden Prozeduren
--------------- Sample ---------------
Sub Datensatz_Ändern()
Dim WS As Workspace
Dim DB As Database
Set WS = DBEngine.Workspaces(0)
Set DB = WS.OpenDatabase(PFAD)
Dim RS As Recordset
Dim strSQL As String
Dim strDatensatz As String
strSQL = "SELECT * FROM Telefonliste"
Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset)
strDatensatz = InputBox("Welchen Datensatz möchtest Du ändern?" & vbCrLf & "(Nachname eingeben)")
RS.FindFirst "Name= '" & strDatensatz & "'"
If Not RS.NoMatch Then
MsgBox "Daten für " & RS!Name & vbCrLf & vbCrLf & RS!Vorname & " " & RS!Name & ", " & RS!Telefon
With RS
.Edit 'zum Bearbeiten öffnen
!Telefon = InputBox("Neue TelefonNummer:") 'Eintrag ändern
.Update 'aktualisieren
End With
Else
MsgBox "Name " & strDatensatz & " nicht gefunden"
End If
Set RS = Nothing
Set DB = Nothing
Set WS = Nothing
End Sub
--------------- Sample ---------------
Wenn Du nun nochmal eine DB-Abfrage machst, wirst Du sehen, das die Nummer geändert wurde.
Ist doch nicht so schwer oder? Und wie gesagt, das Gerüst ist immer gleich! Du brauchst nur die Parameter
der Datenbank (DB-Name, Pfad, Tabelle, Felder) anpassen und dann kannst Du das ganze auf alle Access-DB's
anwenden. Probiere es mal aus.
Demnächst gibts hier ein komplettes Word-Dok als Beispiel, wenn ich mal mehr Zeit hab.
Wer vorab schon was wissen will..entweder Eiskuh (69971168) oder PN
Bis bald und viel Spass....