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