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:
Bild 6: Aufbau der Literaturlisten-Tabellen
Bild 7: Das Formular frmLiteratur in der Entwurfsansicht
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:
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:
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