vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück
Rubrik: Datenbanken · Sonstiges   |   VB-Versionen: VB5, VB603.12.04
Programminterne Datenbank

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

Autor:   NewpiperBewertung:     [ Jetzt bewerten ]Views:  18.475 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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:
Fügen Sie dem Projekt ein neues Klassenmodul hinzu und benennen es clsDataBase.

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:

  • Label1 (Caption=Viedeoname
  • Label2 (Caption=VideoLänge
  • Label3 (Caption=Genre
  • ListBox (Name=List1)
  • TextBox (Name=txtVBeschr, Multiline=True)
  • Textbox (Name=txtVgenre)
  • TextBox (Name=txtVLen)
  • TextBox (Name=txtVname)
  • CommandButton (Name=cmdAdd)
  • CommandButton (Name=cmdRead)
  • Menü (Name=mnuExit)
  • Menü (Name=mnuLoadDB)
  • Menü (Name=mnuSaveDB)

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 18.475 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (4 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2021 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel