Literaturverwaltung, Teil 2

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.

Abb. 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.

Abb. 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.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar