Literaturverwaltung, Teil 2

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Autor: Martin Hoffmann, Düsseldorf

!

In der letzten Ausgabe wurde eine Literaturverwaltung vorgestellt, mit der Sie Literatur erfassen, bewerten und suchen können. In diesem Beitrag ergänzen Sie diese Datenbank um benutzerabhängige Literaturlisten sowie um die Ausgabe einer Signaturliste und eines Literaturanhangs in Word.

Eine der wichtigsten Zusatzfunktionen des Literatur-Managers ist die Verwaltung von Literaturlisten. Diese versetzen den Anwender in die Lage, die bestehenden Literatur-Datensätze nach Belieben zu selektieren und zu gruppieren. Jeder Benutzer kann dabei seine eigenen Listen führen.

Neben dem Zusammenstellen der Literaturlisten kann die Datenbank aus diesen Listen eine Signaturübersicht erstellen. Auf diese Weise kann man sich alle Standorte der gewünschten Literatur übersichtlich ausgeben lassen. Außerdem kann für jede Liste ein Literaturanhang in Word generiert werden. So können Sie beispielsweise die Literatur für eine Publikation in der Datenbank sammeln und anschließend automatisch den Literaturanhang für diese Publikation erzeugen.

Bild 2: Die Datenbasis des Kombinationsfeldes cmbListe

Die folgenden Abschnitte zeigen Ihnen Schritt für Schritt die Entwicklung der oben aufgeführten Funktionen.

Zunächst soll die Verwaltung der Literaturlisten entwickelt werden. Legen Sie dazu ein neues Formular mit dem Namen frmLiteraturliste an. Fügen Sie in das Formular ein Kombinationsfeld mit dem Namen cmbListe ein. Dieses soll alle Listen eines Benutzers zur Auswahl stellen. zeigt den Aufbau der Datenherkunft für das Kombinationsfeld.

Die Funktion getCurrentUserID ermittelt den aktuell angemeldeten Benutzernamen und sucht anschließend in der Tabelle tblBenutzer die zugehörige BenutzerID heraus. Dadurch liefert das Abfrageergebnis nur die Listen des aktuellen Benutzers.

Die Elemente einer Liste sollen in einem Listenfeld angezeigt werden. Legen Sie dazu ein neues Listenfeld mit dem Namen lstPositionen an. Achten Sie darauf, dass die Datenherkunft das Datenfeld LiteraturID enthält, damit später per Doppelklick auf einen Eintrag das Literatur-Formular mit dem passenden Werk geöffnet werden kann. Ferner sollten Sie die Bedingung LiteraturListeID=0 einfügen, damit zunächst keine Listeneinträge angezeigt werden. Die Vorgehensweise entspricht derjenigen beim Suchen-Dialog.

Public Sub UpdatePositionen()
    Dim SQL As String
    Dim NeueListenID As Variant
    NeueListenID = Forms!frmLiteraturliste!cmbListe.Value
    If Nz(NeueListenID) <> "" Then
        SQL = "SELECT LiteraturListenPositionID, Titel, " _            & "tblLiteraturlistenPositionen.LiteraturID, getAutorenliste" _            & "([tblLiteratur].[LiteraturID],2) AS Autoren FROM tblLiteratur " _
            & "INNER JOIN tblLiteraturlistenPositionen " _            & "ON tblLiteratur.LiteraturID=tblLiteraturlistenPositionen.LiteraturID" _
            & " WHERE LiteraturListeID=" & NeueListenID & ";"
        Forms!frmLiteraturliste!lstPositionen.RowSource = SQL
        Forms!frmLiteraturliste!lstPositionen.Requery
    End If
End Sub

Quellcode 1

Verknüpfen von Kombinations- und Listenfeld

Damit das Listenfeld nur die zu einer Liste gehörenden Elemente anzeigt, muss nach Auswahl einer Literaturliste im Kombinationsfeld cmbListe die Datensatzherkunft des Listenfeldes lstPositionen geändert werden. Zu diesem Zweck legen Sie eine Prozedur beim Nach Aktualisierung-Ereignis des Kombinationsfeldes an. Tragen Sie dort den Aufruf der globalen Prozedur UpdatePositionen ein.

Die Prozedur (s. Quellcode 1) liest zunächst die LiteraturlistenID aus dem Kombinationsfeld aus. Anschließend verwendet sie die identische Datenherkunft des Listenfeldes und ergänzt diese um eine Bedingung, mit der die Datensätze auf die Positionen mit passender LiteraturlisteID gefiltert werden. Zum Schluss weist die Prozedur dem Listenfeld die neue Datensatzherkunft zu und fragt es erneut ab.

Nachdem Sie die Anzeige von Listen und Positionen geregelt haben, benötigen Sie noch Funktionen, um neue Listen hinzuzufügen, umzubenennen oder zu löschen.

Listen anlegen

Fügen Sie in das Formular die Schaltfläche btnNeu ein. Diese übernimmt die Neuanlage von Literaturlisten.

Bild 3: Die Schaltflächen btnNeu und btnLöschen

Die Ereignisprozedur der Schaltfläche enthält die folgenden zwei Prozeduraufrufe:

NeueLiteraturlisteAnlegen
UpdatePositionen

Mit dem ersten Aufruf wird ein neuer Datensatz angelegt. Der zweite, schon bekannte Aufruf aktualisiert lediglich das Listenfeld.

Die Anlage einer neuen Liste (s. Quellcode 2) gestaltet sich recht einfach. Zunächst wird der Name der neuen Liste über eine InputBox abgefragt. Gibt der Benutzer einen Namen ein, wird in der Tabelle tblLiteraturlisten ein neuer Datensatz mit dem Listennamen und der BenutzerID angelegt.

Public Sub NeueLiteraturlisteAnlegen()
    Dim SQL, NeuerName As String
    Dim db As Database
    Dim rstLiteraturlisten As Recordset
    Dim ListeID As Integer
    NeuerName = InputBox("Bitte geben Sie den neuen " _        & "Namen ein:", "Literaturliste eingeben", _        "<Neue Literaturliste>")
    If NeuerName <> "" Then
        Set db = CurrentDb()
        Set rstLiteraturlisten = _            db.OpenRecordset("tblLiteraturListen")
        With rstLiteraturlisten
            .AddNew
            !ListenName = NeuerName
            !BenutzerID = GetCurrentUserID()
            ListeID = !LiteraturlisteID
            .Update
        End With
        If IsLoaded("frmLiteraturliste") = True Then
            Forms!frmLiteraturliste!cmbListe.Requery
            Forms!frmLiteraturliste!cmbListe = ListeID
        End If
        If IsLoaded("frmLiteratur") = True Then
            Forms!frmLiteratur!cmbListe.Requery
        End If
    End If
End Sub

Quellcode 2

Damit nach der Anlage im Kombinationsfeld direkt die neue Liste angezeigt wird, muss sich die Prozedur die neue ID merken. Dazu wird die ID über die Zuweisung

ListeID = !LiteraturlisteID

in der Variablen ListeID gespeichert. Wichtig ist, dass dieser Ausdruck vor der Update-Anweisung des Recordsets steht, da sonst die neue ID verloren geht und später nicht mehr zugewiesen werden kann.

Da sich die Daten des Kombinationsfeldes geändert haben, muss dieses mit der Requery-Methode neu abgefragt werden. Danach wird dem Kombinationsfeld die neue ID zugewiesen.

Hinweis

Im Quellcode wird vor der Aktualisierung des Kombinationsfeldes über den Ausdruck IsLoaded(„frmLiteraturliste“) = True abgefragt, ob das Literaturlisten-Formular geöffnet ist. Diese Abfrage scheint hier überflüssig zu sein, da die Prozedur ja von genau diesem Formular aus aufgerufen wird. Der Vorteil dieser Methode ist jedoch, dass die Funktion zum Anlegen einer neuen Liste so von überall aus aufgerufen werden kann – zum Beispiel über einen Menübefehl; und in diesem Fall muss das Formular nicht geöffnet sein.

Am Ende der Prozedur wird noch ein Kombinationsfeld cmbListe aktualisiert, das sich im Literatur-Formular befindet. Dieses ist mit dem Kombinationsfeld im Literaturlisten-Formular identisch. Es dient dazu, Bücher direkt aus dem Literatur-Formular einer bestimmten Liste zuzuordnen (s. a. Abschnitt Listeneinträge hinzufügen).

Listen löschen

Zum Löschen einer Literaturliste fügen Sie die Schaltfläche btnLöschen in das Formular ein. Die Ereignisprozedur fragt zunächst über eine Msgbox ab, ob die Liste wirklich gelöscht werden soll. Diese Sicherheitsabfrage ist wichtig, da für die Beziehung zwischen den Tabellen tblLiteraturlisten und tblLiteraturlistenPositionen die Löschweitergabe aktiviert ist. Wenn also eine Liste gelöscht wird, werden automatisch auch alle Positionen entfernt.

Private Sub cmbListe_DblClick(Cancel As Integer)
    Dim AlterName As String
    Dim NeuerName As Variant
    Dim ListenID As Integer
    If Not IsNull(cmbListe.Value) Then
        ListenID = cmbListe.Value
        AlterName = cmbListe.Column(1)
        NeuerName = InputBox("Bitte geben Sie den neuen Namen ein:", _            "Literaturliste umbenennen", AlterName)
        If NeuerName <> "" And NeuerName <> AlterName Then
            SQL = "UPDATE tblLiteraturListen SET ListenName=""" & NeuerName _                & """ WHERE LiteraturListeID=" & ListenID
            CurrentDb().Execute SQL
            cmbListe.Requery
            cmbListe.Value = ListenID
        End If
    End If
End Sub

Quellcode 3

Bestätigt der Anwender die Meldung mit Ja, führt die Prozedur die folgende DELETE-SQL-Anweisung aus:

Set db = CurrentDb()
SQL = "DELETE * " _    & "FROM tblLiteraturListen " _    & "WHERE LiteraturListeID = "     & Me!cmbListe
db.Execute SQL

Da die Liste inklusive aller Positionen nach dieser Anweisung nicht mehr existiert, müssen sowohl das Kombinations- als auch das Listenfeld aktualisiert werden. Außerdem wird die Auswahl im Kombinationsfeld aufgehoben:

Me!cmbListe.Requery
UpdatePositionen
Me!cmbListe = Null

Auch nach dem Löschen muss wieder das Kombinationsfeld cmbListe im Literatur-Formular aktualisiert werden:

If IsLoaded("frmLiteratur") = True Then
    Forms!frmLiteratur!cmbListe.Requery
End If

Listen umbenennen

Das Umbenennen einer Liste könnte ebenfalls über eine Schaltfläche ausgeführt werden. In der Beispieldatenbank wird ein Eintrag jedoch per Doppelklick auf das Kombinationsfeld umbenannt.

Bild 4: Umbenennen einer Liste per Doppelklick

Legen Sie dazu die Prozedur aus Quellcode 3 im Ereignis Beim Doppelklicken an.

Die Prozedur liest zunächst die LiteraturlistenID und den Namen der Liste aus dem Kombinationsfeld aus. Anschließend wird der neue Name über eine InputBox abgefragt. Gibt der Benutzer einen neuen Namen ein, führt die Prozedur die folgende Aktualisierungsabfrage aus und fragt alle Kombinationsfelder neu ab:

UPDATE tblLiteraturListen SET ListenName=""" & NeuerName & """ WHERE LiteraturListeID=" & ListenID

Listeneinträge hinzufügen

Neue Listeneinträge gelangen nicht über das Literaturlisten-Formular in die Listen, sondern direkt über das Literatur-Formular. Die Benutzerführung sieht vor, dass man zunächst ein Werk sucht und anschließend die Liste auswählt, in die das Werk übernommen werden soll. Die übernahme erfolgt dabei automatisch nach Auswahl der Liste.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar