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.