Mit diesem Tipp brauchen Sie keine Dabtenbankanbindungen mehr zu konfigurieren oder zu installieren. Die Daten der Datenbank werden, mittels eines Klassenmoduls, einfach in eine Collection gespeichert. In einem Klassenmodul werden alle Daten bezüglich der Spalten angegeben. Für jeden Spalteneintrag eine Variable (String, Long, IPictureDisp etc.). Für jede Variable muss natürlich auch eine Property Get Funktion/Anweisung hinzugefügt werden, um die Daten später auslesen zu können. Wenn die Datenbankeinträge auch geändert werden sollen, muss natürlich auch eine Property Let Funktion/Anweisung her. Um einen Eintrag hinzufügen zu können benötigen wir alerdings noch eine Funktion in unserem Klassenmodul [DBadd]. Mehr dazu in meinem BeispielCode. Wenn das alles in einem Klassenmodul gespeichert wurde, ist das Grundgerüst der DB erstmal ferig. Um die Einträge in der DB speichern zu können, wird eine Collection benötig, welche später die gesamten Daten beinhaltet. Weiterhin wird kurzfristig eine Variable mit dem Verweis auf das Klassenmodul ersellt, in der mittels der DBadd-Funktion ein neuer Eintrag erstellt wird. Danach wird die kurzfristig erstellte Variable, welche nun den neuen Eintrag enthält, der oben genannten Collection hinzugefügt. Damit die Datenbankeinträge beim Beenden des Programmes nicht verloren gehen, habe ich schnell noch eine Funktion geschrieben, um die Daten in eine Datei zu schreiben. Diese Datei kann beim Programmstart wieder eingelesen werden. Das Lesen und Speichern der Daten erfolgt durch ein PropertyBag, da mir auf die schnelle nichts anderes eingefallen ist Sicherlich ist dieser Code noch zu verbessern, aber das Grundprinzip funktioniert. Über die Remove-Funktion der Collection könnten z.B. Datenbankeinträge gelöscht werden. Das Speichern der DB-Einträge könnte auch mittels Trennzeichen in eine TextDatei gespeichert werden usw. Für große Projekte sicherlich keine gute lösung, da für jede Tabelle ein neues Klassenmodul und eine neue Collection angelegt werden muss. Für kleinere Projekte allerding nützlich, da keine DB-Programme / DB-Anbindungen nötig sind. Das Klassenmodul: Option Explicit ' hier werden die Daten(Spalten) der Datenbank angegeben Private lVideoID As Long Private sVideoName As String Private sVideoLen As String Private sVideoGenre As String Private sVideoBeschr As String ' Folgende Funktionen dienen zum Auslesen und Ändern der Dantenbankeinträge Public Property Get vID() As Long vID = lVideoID End Property Public Property Get vName() As String vName = sVideoName End Property Public Property Let vName(vNewValue As String) sVideoName = vNewValue End Property Public Property Get vLen() As String vLen = sVideoLen End Property Public Property Let vLen(vNewValue As String) sVideoLen = vNewValue End Property Public Property Get vGenre() As String vGenre = sVideoGenre End Property Public Property Let vGenre(vNewValue As String) sVideoGenre = vNewValue End Property Public Property Get vBeschreibung() As String vBeschreibung = sVideoBeschr End Property Public Property Let vBeschreibung(vNewValue As String) sVideoBeschr = vNewValue End Property ' Fügt einen neuen Eintrag hinzu Public Function dbadd(nvID As Long, _ nvName As String, _ nvLen As String, _ nvGenre As String, _ nvBeschr As String) lVideoID = nvID sVideoName = nvName sVideoLen = nvLen sVideoGenre = nvGenre sVideoBeschr = nvBeschr End Function Fügen Sie dem Projekt nun eine Form mit folgenden Controls hinzu:
Und hier der Code der Form: Option Explicit ' Hier wird die Datenbank gespeichert Private VideoDB As New Collection Private Sub Form_Load() cmdAdd.Caption = "Hinzufügen" cmdRead.Caption = "Liste aktualisieren" End Sub ' einen Eintrag hinzufügen Private Sub cmdAdd_Click() ' Temporäre Datenbank erzeugen Dim TempDB As clsDataBase ' wenn nicht alle Felder ausgefüllt sind, nichts der DB hinzufügen If Len(Me.txtVBeschr) = 0 _ Or Len(Me.txtVgenre) = 0 _ Or Len(Me.txtVLen) = 0 _ Or Len(Me.txtVname) = 0 Then MsgBox "Bitte alle Felder ausfüllen" Exit Sub End If ' Neue Daten der TempDB hinzufügen Set TempDB = New clsDataBase TempDB.dbadd VideoDB.Count + 1, _ Me.txtVname, _ Me.txtVLen, _ Me.txtVgenre, _ Me.txtVBeschr ' Daten der TempDB zur Collection hinzufügen VideoDB.Add TempDB, CStr(TempDB.vID) ' TempDB-Klasse zerstören Set TempDB = Nothing End Sub ' Datenbank auslesen und die Einträge in der Liste anzeigen Private Sub cmdRead_Click() Dim i As Long List1.Clear For i = 1 To VideoDB.Count With VideoDB(i) List1.AddItem .vName & " | Spielzeit: " & .vLen & " | Genre: " & .vGenre End With Next i End Sub ' Alle Felder des markierten DB-Eintrages in einer MsgBox ausgeben Private Sub List1_DblClick() Dim sTemp As String Dim lID As Long ' markierten Listen eintrag lID = Me.List1.ListIndex + 1 ' Daten des markierten Eintrages aus der DB-Klasse holen With VideoDB(lID) sTemp = "Name: " & vbTab & vbTab & .vName & vbNewLine & _ "Länge: " & vbTab & vbTab & .vLen & vbNewLine & _ "Genre: " & vbTab & vbTab & .vGenre & vbNewLine & _ "Beschreibung: " & vbTab & .vBeschreibung End With ' und in einer MsgBox wiedergeben MsgBox sTemp End Sub ' Programm beenden Private Sub mnuExit_Click() Dim MsgBoxB As VbMsgBoxResult If VideoDB.Count > 0 Then ' Fragen, ob DB gespeichert werden soll MsgBoxB = MsgBox("Soll die aktuelle Datenbank gespeichert werden?", vbYesNoCancel) If MsgBoxB = vbYes Then ' DB speichern mnuSaveDB_Click ElseIf MsgBoxB = vbCancel Then ' Zum Programm zurück Exit Sub End If End If ' Beenden Unload Me End Sub ' Datenbank laden Private Sub mnuLoadDB_Click() Dim PBLoad As New PropertyBag Dim vInhalt As Variant Dim i As Integer Dim F As Integer Dim PrgCount As Long Dim TempDB As clsDataBase ' Prüfen, ob Datenbank vorhanden If Dir(App.Path & "\Video.db") = "" Then Exit Sub ' Datei einlesen F = FreeFile Open App.Path & "\Video.db" For Binary As #F Get #F, , vInhalt Close #F ' und in ein PropertyBag schreiben PBLoad.Contents = vInhalt ' DB-Collection löschen Set VideoDB = New Collection With PBLoad ' Anzahl der Eintrage für die Datenbank auslesen PrgCount = CLng(.ReadProperty("prgCount", 0)) For i = 1 To PrgCount ' neue Temporäre DB-Klasse erstellen Set TempDB = New clsDataBase ' Daten der TempDB-Klasse hinzufügen TempDB.dbadd .ReadProperty(i & "VideoID", i), _ .ReadProperty(i & "VideoName", ""), _ .ReadProperty(i & "VideoLen", ""), _ .ReadProperty(i & "VideoGenre", ""), _ .ReadProperty(i & "VideoBeschr", "") ' Daten der TempDB zur Collection hinzufügen VideoDB.Add TempDB, CStr(TempDB.vID) Next i End With ' TempDB-Klasse zerstören Set TempDB = Nothing End Sub ' Datenbank speichern Private Sub mnuSaveDB_Click() Dim PBSave As New PropertyBag Dim i As Integer Dim F As Integer With PBSave ' Anzahl der Einträge der DB in ProbertyBag schreiben .WriteProperty "prgCount", CStr(VideoDB.Count), "" ' Einträge der DB in ProbertyBag schreiben For i = 1 To VideoDB.Count .WriteProperty i & "VideoID", VideoDB(i).vID, "" .WriteProperty i & "VideoName", VideoDB(i).vName, "" .WriteProperty i & "VideoLen", VideoDB(i).vLen, "" .WriteProperty i & "VideoGenre", VideoDB(i).vGenre, "" .WriteProperty i & "VideoBeschr", VideoDB(i).vBeschreibung, "" Next i ' PropertyBag speichern If Dir(App.Path & "\Video.db") <> "" Then Kill App.Path & "\Video.db" F = FreeFile Open App.Path & "\Video.db" For Binary As #F Put #F, , .Contents Close #F End With End Sub Dieser Tipp wurde bereits 19.546 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |