Literaturverwaltung

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

Autor: Martin Hoffmann, Düsseldorf

Zur Organisation von Büchern und Zeitschriften in Unternehmen bietet sich eine Literaturverwaltung an, in der die Literatur nicht nur erfasst, sondern auch weiterverarbeitet werden kann. Dazu zählt beispielsweise das automatische Erstellen von Literatur- und Signaturlisten. Der folgende Beitrag beschreibt eine Datenbank, die besondere Zusatzfunktionen enthält, mit denen Sie den Nutzwert für die Anwender wesentlich erhöhen.

Die Literaturverwaltung, die in den folgenden Abschnitten beschrieben wird, soll Ihnen zeigen, wie Sie generell eine Literaturverwaltung aufbauen können. Dabei lernen Sie, wie Sie einfache und komplexe Suchfunktionen in die Datenbank integrieren, wie Sie die Eingabe und Anzeige von Rezensionen gestalten und die Literaturdaten in Form eines Literaturanhangs in Word ausgeben. Außerdem erfahren Sie, wie Sie benutzerabhängige Literaturlisten speichern.

Die folgende Abbildung (siehe Bild 1) zeigt die Hauptformulare der fertigen Literaturverwaltung. Das linke Formular dient der Erfassung der Literatur und das rechte der Verwaltung der Listen.

Bild 1: Die Hauptfenster des Literatur-Managers

Im Folgenden werden die wichtigsten Tabellen der Datenbank und deren Beziehungen kurz erläutert. Neben diesen Tabellen finden Sie in der Datenbank Detailtabellen wie tblDokumenttypen, tblVerlage oder tblBenutzer, deren Felder und Inhalte selbsterklärend sind.

Die Literatur-Tabelle

Die Tabelle tblLiteratur stellt das zentrale Element der Datenstruktur dar. In ihr werden alle Bücher und Zeitschriften mit den wichtigsten Feldern wie Titel, Verlag, Erscheinungsjahr und Dokumenttyp abgelegt. Ferner lassen sich Schlüsselwörter für die spätere Suche definieren. über das Feld IstInternerBestand kennzeichnen Sie ein Buch, das in der eigenen Bibliothek zu finden ist oder das Sie selbst angeschafft haben. Wenn Sie das Kennzeichen weglassen, handelt es sich um ein Buch an einem externen Standort, z. B. in einer Universitätsbibliothek. Bild 2 zeigt alle Felder der Tabelle tblLiteratur.

Autoren

Jedem Werk können mehrere Autoren mit verschiedenen Funktionen (z. B. Autor, Co-Autor etc.) zugewiesen werden. Alle Autoren werden zentral in der Tabelle tblAutoren mit Vor- und Nachnamen einmal gespeichert. Die Verknüpfung zu den Werken erfolgt über die Tabelle tblLiteraturAutoren. In dieser Tabelle wird auch die Funktion festgelegt.

Bild 2: Die Datenfelder der Tabelle tblLiteratur

Standorte und Signaturen

Die Datenbank ist so ausgelegt, dass jedes Werk an mehreren Standorten verfügbar sein kann. Wenn ein Werk zum Beispiel gerade in der hausinternen Bibliothek vergriffen ist, können Sie in der Datenbank die weiteren möglichen Standorte und die Signatur des Werks am jeweiligen Standort einsehen.

Bild 3: Das Datenmodell für Standorte und Signaturen

Die Standorte werden in der Tabelle tblStandorte mit den Feldern Standortname, Beschreibung und Ort gepflegt. In diese Tabelle können Sie auch Standorte eingeben, die sich in Ihrem Unternehmen befinden. Solche Standorte können beispielsweise Abteilungen sein. Die unternehmensinternen Standorte werden über das Feld IstInternerStandort gekennzeichnet.

Die Verknüpfung der Standorte mit den Werken erfolgt mit einer n:m-Beziehung über die Tabelle tblSignaturen (siehe Bild 3). In diese Tabelle geben Sie für jeden Standort eines Werks die Signatur ein.

über die Tabelle tblVerbleiborte können Sie für jedes Werk eine Verteilerliste anlegen. In dieser können für unterschiedliche Zeiträume die Standorte eines Werks abgelegt werden. So könnte eine Verteilerliste für die nächste Ergänzungslieferung oder eine PC-Zeitschrift wie in Tab. 1 aussehen.

Bild 4: Die Tabellenstruktur für Rezensionen

Bild 5: n:m-Beziehung für Verweise zwischen Werken

Standort

Von-Datum

Bis-Datum

EDV Abteilung

1.4.2002

5.4.2002

Vertrieb

8.4.2002

12.4.2002

Marketing

15.4.2002

19.4.2002

Bibliothek

20.4.2002

Tab. 1: Beispiel für Verbleiborte einer PC-Zeitschrift

Rezensionen

Die Literaturverwaltung sieht vor, dass jeder Benutzer der Datenbank eine Wertung zu einem Werk abgeben kann. Dazu werden in der Tabelle tblRezensionen die LiteraturID, die BenutzerID, das Anlagedatum mit Uhrzeit und der Rezensionstext gespeichert. Außerdem kann eine Wertung zwischen 1 (sehr schlecht) und 5 (sehr gut) im Feld WertungID eingegeben werden. Die Wertung wird in diesem Beispiel in einer eigenen Tabelle tblWertungen gespeichert, da nicht die Zahl selbst im Formular erscheinen soll, sondern eine Grafik, welche die Bewertung symbolisiert. Die Grafik wird im OLE-Feld WertungBild abgelegt (siehe Bild 4) und so mit der Wertungszahl verknüpft. Näheres zur Vorgehensweise und zur Formularprogrammierung finden Sie in Abschnitt 5.

Referenzen

Das Verlinken von Werken innerhalb der Datenbank oder das Zusammenfassen von Werken zu Gruppen oder Bänden (z. B. Zeitschriften-Jahrgänge) realisieren Sie über eine n:m-Beziehung der Tabelle tblLiteratur auf sich selbst. Als Zwischentabelle dient die Tabelle tblVerweise, in die die beiden Fremdschlüssel LiteraturID und VerweisLiteraturID sowie eine Bemerkung zu der Verknüpfung eingegeben werden können.

Der Aufbau der Beziehungen ist in Bild 5 dargestellt.

Eine n:m-Beziehung auf sich selbst legen Sie im Beziehungen-Fenster wie folgt an:

  • Fügen Sie die Tabellen tblLiteratur und tblVerweise im Beziehungen-Fenster hinzu.
  • Verknüpfen Sie die Tabellen über das jeweilige LiteraturID-Feld miteinander.
  • Da Sie den Primärschlüssel einer Tabelle nicht mit zwei Fremdschlüsseln der gleichen Tabelle verknüpfen können, fügen Sie die Tabelle tblLiteratur ein zweites Mal hinzu. Die Tabelle erhält im Beziehungen-Fenster den Namen tblLiteratur_1.
  • Bild 6: Aufbau der Literaturlisten-Tabellen

    Bild 7: Das Formular frmLiteratur in der Entwurfsansicht

  • Stellen Sie die Beziehung zwischen der Tabelle tblLiteratur_1 und der Tabelle tblVerweise über das Fremdschlüsselfeld VerweisLiteraturID her.
  • Literaturlisten

    Eine besondere Funktion stellen die benutzerabhängigen Literaturlisten dar. Mit diesen kann jeder Benutzer beliebig viele Liste unterschiedlichster Gruppierung zusammenstellen und verwalten.

    So könnte eine Liste interessante Artikel in PC-Zeitschriften enthalten und eine andere die Literatur für eine Veröffentlichung.

    Die Listen werden in der Tabelle tblLiteraturlisten mit einem Namen und der BenutzerID gespeichert.

    Zu jeder Liste lassen sich dann Positionen hinzufügen, die die Tabelle tblLiteraturlistenPositionen aufnimmt.

    Das Feld Sortierung ist für spätere Zwecke vorgesehen, um die Reihenfolge der Listenelemente manuell zu verändern.

    In dieser Version der Datenbank werden die Listenelemente zunächst alphabetisch nach Titeln sortiert. Bild 6 zeigt die Beziehungen zwischen den Tabellen.

    Nachdem Sie nun die Tabellenstruktur der Datenbank kennen, können Sie mit dem Entwurf des Literaturformulars zur Erfassung der Werke beginnen.

    Gehen Sie dazu wie folgt vor:

  • Legen Sie ein neues Formular mit dem Namen frmLiteratur an, das auf der Tabelle tblLiteratur basiert.
  • Fügen Sie im Detailbereich ein Registersteuerelement mit sechs Registerseiten ein und benennen Sie die Registerseiten gemäß Bild 7.
  • Fügen Sie im Register 1-Allgemein die Basisfelder der Tabelle sowie ein Unterformular für die Autoren ein.
  • Platzieren Sie die Felder Notizen und Bemerkung auf der Registerseite 2-Notizen.
  • Die wichtigsten Felder hätten Sie damit in das Formular aufgenommen.

    Bild 8: Die Literatur-Schnellsuche

    Private Sub btnSuchen_Click()
        Dim rstLiteratursuche As Recordset
        If Nz(txtTitelsuche, "") <> "" Then
            Set rstLiteratursuche = Me.RecordsetClone
            With rstLiteratursuche
                .FindFirst "Titel like ""*" & _                Me!txtTitelsuche & "*"""
                If Not .NoMatch Then
                    Me.Bookmark = .Bookmark
                End If
            End With
        End If
    End Sub

    Quellcode 1

    Hinweis

    Den Aufbau des Unterformulars für Rezensionen finden Sie weiter unten im Abschnitt 5.

    Unterformulare anlegen

    Für die Registerseiten 4, 5 und 6 legen Sie zunächst jeweils ein Formular auf Basis der Tabellen tblSignaturen, tblVerweise und tblVerbleiborte an. Stellen Sie dann die Formulareigenschaft der drei Formulare wie in Tab. 2 ein. Fügen Sie anschließend die Unterformulare auf den entsprechenden Registerseiten ein.

    Titelzeile einfügen

    Das Literaturformular wäre damit fast fertig gestellt. Damit Sie beim Umschalten zwischen den Registerseiten den aktuellen Titel immer im Blick haben, fügen Sie oberhalb des Registers noch ein Textfeld mit dem Namen txtTitel ein.

    Eigenschaft

    Wert

    Standardansicht

    Datenblatt

    Bildlaufleisten

    Nur vertikal

    Datensatzmarkierer

    Nein

    Navigationsschaltflächen

    Nein

    Tab. 2: Formulareigenschaften für die Unterformulare

    Damit das Formular immer den Titel des aktuell angezeigten Werkes anzeigt, fügen Sie beim Formular-Ereignis Beim Anzeigen die folgenden Code-Zeilen ein:

    If Me.NewRecord Then
        Me!txtTitel = "(Neuer Titel)"
    Else
        Me!txtTitel = Me!Titel
    End If

    Die Prozedur prüft, ob es sich um einen neuen Datensatz handelt, und zeigt in diesem Fall den Text (Neuer Titel) an. Wenn ein bestehender Datensatz vorliegt, wird der Inhalt des Feldes Titel im Textfeld angezeigt.

    In die Datenbank werden zwei Suchfunktionen integriert. Zum einen eine Schnellsuche, über die direkt im Formular nach einem bestimmten Titel gesucht werden kann. Zum anderen eine Detailsuche, bei der die unterschiedlichsten Felder wie Autor, Verlag oder Erscheinungsjahr als Suchkriterien eingegeben werden können.

    Schnellsuche

    Die Schnellsuche soll im Formularkopf erfolgen und wird mithilfe des Textfeldes txtTitelsuche und zwei Befehlsschaltflächen btnSuchen und btnWeitersuchen realisiert (siehe Bild 8).

    Um bei einer Suche den ersten Eintrag zu finden, der den eingegebenen Text enthält, hinterlegen Sie für das Beim Klicken-Ereignis der Schaltfläche btnSuchen den Programmcode aus Quell-code 1.

    Bild 9: Der Suchen-Dialog in der Entwurfsansicht

    Die Prozedur prüft zunächst, ob im Suchfeld ein Suchtext eingegeben wurde. Die NZ-Funktion testet dabei den Wert Null und Leerzeichenketten ab. Wenn ein Suchtext eingegeben ist, wird der Datenbestand des Formulars in die Variable rstLiteratursuche vom Typ Recordset kopiert. Anschließend führt die Prozedur eine Like-Suche mit der Methode FindFirst durch und ermittelt den ersten Datensatz, der dem Suchkriterium entspricht. über die Bookmark-Eigenschaft des Formulars wird schließlich auf den Datensatz positioniert.

    Um weitere Werke mit dem gleichen Kriterium zu finden, können Sie fast den identischen Quellcode bei der Schaltfläche btnWeitersuchen verwenden. Sie müssen lediglich die Methode FindFirst gegen die Methode FindNext austauschen.

    Suchen-Dialog

    Für die Detailsuche benötigen Sie ein eigenes Formular, in das Sie die Kriterien eingeben können und eine Ergebnisliste angezeigt bekommen. Gehen Sie dazu folgendermaßen vor:

  • Legen Sie ein neues Formular mit dem Namen frmSuchenDialog an.
  • Fügen Sie die Felder, nach denen Sie suchen möchten, als ungebundene Steuerelemente in das Formular ein. Die in der Beispieldatenbank verwendeten Felder sehen Sie in Bild 9.
  • Benennen Sie die Felder entsprechend den Namenskonventionen. Im Beispiel wurden die folgenden Felder verwendet: txtTitel, txtAutor, txtSchlagwörter, cmbVerlag, txtVonJahr, txtBisJahr, txtISBNISSN, cmbDokumentTyp und chkIstEigenerBestand.
  • Fügen Sie die Schaltflächen btnSuchen, btnöffnen und btnSchließen in das Formular ein.
  • Legen Sie ein Listenfeld mit dem Namen lstErgebnisliste an, in dem das Suchergebnis dargestellt wird.
  • Abfrage für die Ergebnisliste

    Als Datenherkunft für das Listenfeld legen Sie ein neue Abfrage mit dem Namen qrySuchergebnis auf Basis der Tabelle tblLiteratur an. Fügen Sie alle Felder hinzu, die Sie durchsuchen oder ggf. zusätzlich anzeigen möchten.

    In diesem Zusammenhang stellt die Detailsuche und die Anzeige von Autoren ein Problem dar. Da die Autoren nicht direkt in der Literaturtabelle, sondern in einer gesonderten Tabelle gespeichert sind, würde man bei einem Werk mit mehreren Autoren mehrere Ergebniseinträge erhalten, obwohl es sich um dasselbe Werk handelt.

    Um pro Literaturdatensatz alle Autoren des Werks in einem Feld darzustellen, bedient sich die Abfrage in der Beispieldatenbank eines Tricks. Anstatt die Tabelle tblAutoren zu verwenden und den Vor- und Nachnamen als Spalten aufzunehmen, ruft die Abfrage die Funktion getAutorenliste (s. Quellcode 2) auf.

    Public Function GetAutorenliste(LiteraturID As Long, Format As Integer) As String
        Dim db As Database
        Dim rstAutoren As Recordset
        Dim SQL As String
        Dim Autorenliste As String
        Autorenliste = ""
        SQL = "SELECT * FROM qryAutorenProLiteratur " _        & "WHERE LiteraturID=" & LiteraturID
        Set db = CurrentDb()
        Set rstAutoren = db.OpenRecordset(SQL)
        With rstAutoren
            If .RecordCount > 0 Then
                .MoveFirst
                While Not .EOF
                    Select Case Format
                        Case 1:
                            Autorenliste = Autorenliste _                            & !Nachname & ", " _                            & !Vorname & "; "
                        Case 2:
                            Autorenliste = Autorenliste _                            & !Vorname & " " _                            & !Nachname & ", "
                    End Select
                    .MoveNext
                Wend
            End If
        End With
        If Len(Autorenliste) > 2 Then
            Autorenliste = Left(Autorenliste, _            Len(Autorenliste) - 2)
        End If
        GetAutorenliste = Autorenliste
    End Function

    Quellcode 2

    Diese Funktion liefert eine Zeichenkette zurück, in der alle Autoren eines Werks nacheinander aufgeführt sind.

    über den Parameter LiteraturID teilen Sie der Funktion mit, für welchen Datensatz die Autorenliste zusammengestellt werden soll, während Sie über den Parameter Format das Ausgabeformat einstellen. Die Funktion kennt zwei Formate, die im Quellcode 2 im Funktionskopf dargestellt sind.

    Die Funktion ermittelt zunächst über die Abfrage qryAutorenProLiteratur alle Autoren einer bestimmten LiteraturID. Die Abfrage enthält die Felder LiteraturID, Vorname und Nachname.

    Anschließend durchläuft die Prozedur alle Ergebnisdatensätze in einer Schleife, liest die Namen der Autoren aus und fügt sie je nach gewähltem Format in der Variablen Autorenliste aneinander. Am Ende wird noch das überschüssige Komma bzw. Semikolon entfernt.

    In der Abfrage rufen Sie die Funktion dann wie folgt in einer neuen Spalte mit dem Namen Autoren auf:

    Autoren: getAutorenliste _    ([tblLiteratur].[LiteraturID];2)

    Als Datensatzherkunft für das Listenfeld tragen Sie nun die Abfrage ein. Damit beim öffnen des Suchen-Dialogs zunächst keine Titel angezeigt werden, verwenden Sie die folgende SQL-Anweisung als Datensatzherkunft:

    SELECT * FROM qrySuchergebnis WHERE LiteraturID = 0;

    Stellen Sie zum Schluss noch die Spaltenanzahl und die Spaltenbreiten des Listenfeldes ein.

    Private Sub btnSuchen_Click()
        Dim SQL As String
        Dim Condition As String
        If Nz(Me!txtTitel, "") <> "" Then Condition = Condition & "(Titel Like ""*" _        & Me!txtTitel & "*"" OR UnterTitel=""*" & Me!txtTitel & "*"") AND "
    ''... SQL-Anweisung um andere Kriterien erweitern
        If Right(Condition, 5) = " AND " Then
            Condition = Left(Condition, Len(Condition) - 5)
        End If
        SQL = "SELECT * FROM qrySuchergebnis"
        If Len(Condition) > 0 Then SQL = SQL & " WHERE " & Condition
        SQL = SQL & " ORDER BY Titel;"
        Me!lstErgebnisliste.RowSource = SQL
        Me!lstErgebnisliste.Requery
    End Sub

    Quellcode 3

    Bild 10: Das Suchergebnis

    Starten der Suche

    Die Suche wird über die Schaltfläche btnSuchen gestartet. Quellcode 3 zeigt deutlich, wie die Suche funktioniert.

    Hinweis

    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