Entwicklung einer Datenbank zur Verwaltung der Bibliothek des Instituts für Mathematik Studienarbeit von Marcus Möhle Matrikelnummer: 1686164 und Jan Opitz Matrikelnummer: 1686054 im Rahmen des Studienganges Mathematik mit Studienrichtung Informatik an der Universität Hannover Betreuer: Prof. Dr. Udo Lipeck Institut für Informatik Hannover, den 8. Februar 1999 2 Inhaltsverzeichnis 1. Einleitung.......................................................................................................5 1.1 Beschreibung der Bibliothek.....................................................................5 1.2 Aufgabenstellung......................................................................................6 1.3 Benutzte Programme ................................................................................7 1.3.1 Der Server .........................................................................................7 1.3.2 Die Clients.........................................................................................7 1.3.3 Das Entwicklungssystem....................................................................7 1.3.4 Der Webserver......................................................................................... 13 2. Entwurf der Datenbank................................................................................. 15 2.1 Analyse der vorhandenen Daten.............................................................. 15 2.1.1 Der Gesamtkatalog .......................................................................... 15 2.1.2 Die Ausleihbibliothek ...................................................................... 17 2.1.3 Analyse der Adressdaten.................................................................. 18 2.2 Erstellung eines ER-Modells................................................................... 19 2.3 Umsetzung des ER-Schemas in ein Relationen-Schemas ........................ 22 3. Benutzerhandbuch der Programme ............................................................... 27 3.1 Systemanforderungen und Hinweise zur Installation............................... 27 3.1.1 Der Server ....................................................................................... 27 3.1.2 Die Clients....................................................................................... 30 3.2 Die Konvertierungsprogramme............................................................... 31 3.2.1 Der Bibliothekskonverter ................................................................. 32 3.2.2 Der Ausleihkonverter....................................................................... 33 3.3 Die Bestandsverwaltung ......................................................................... 34 3.4 Das Leihprogramm ................................................................................. 36 3.5 Das Programm zum löschen eines Entleihers .......................................... 39 3.6 Das Mahnprogramm ............................................................................... 40 4. Entwicklung und Realisierung der Programme ............................................. 41 4.1 Benötigte Programme ............................................................................. 41 4.2 Benutzerschnittstellen und Funktionsbeschreibung ................................. 41 4.3 Realisierung der Programme................................................................... 43 4.3.1 Die Bestandsverwaltung................................................................... 43 4.3.2 Das Leihprogramm .......................................................................... 45 3 4.3.3 Das „Entleiher löschen“ Programm .................................................. 46 4.3.4 Das Mahnprogramm ........................................................................ 47 5. Entwurf der WWW-Schnittstelle .................................................................. 49 5.1 Die Benutzerschnittstelle ........................................................................ 49 5.2 Realisierung............................................................................................ 51 5.2.1 Die Standardsuche ........................................................................... 51 5.2.2 Die Sachgebietssuche....................................................................... 58 6. Ausblicke und Anmerkungen ....................................................................... 62 6.1 Mögliche Erweiterungen der Datenbank und Schnittstellen..................... 62 6.2 Erfahrungen mit dem Microsoft SQL-Server 6.5..................................... 62 Anhang A: Beschreibung der einzelnen Prozeduren ......................................... 64 A.1 Die Konvertierungsprogramme ............................................................. 64 A.1.1 Der Bibliothekskonverter (main.pas) ............................................... 64 A.1.2 Der Ausleihkonverter (mainkonv.pas) ............................................. 64 A.3 Die Bibliotheksverwaltung..................................................................... 65 A.3.1 (datamodule1.pas)........................................................................... 65 A.3.2 (bibverw1.pas) ................................................................................ 66 A.4 Das Leihprogramm ................................................................................ 68 A.4.1 (main.pas) ....................................................................................... 68 A.4.2 (cref.pas)......................................................................................... 69 A.5 Das „Entleiher löschen“ Programm (main.pas) ...................................... 69 A.6 Das Mahnprogramm (Mahnen.pas) ........................................................ 70 Abbildungsverzeichnis ..................................................................................... 71 Literaturverzeichnis.......................................................................................... 72 4 1. Einleitung In diesem Kapitel wird eine Übersicht über die Bibliothek des Instituts für Mathematik gegeben. Weiterhin soll die Aufgabenstellung der Studienarbeit dargestellt werden sowie ein Überblick der zur Realisierung benutzten Programme gegeben werden. 1.1 Beschreibung der Bibliothek Die Bibliothek des Instituts für Mathematik besteht aus drei Teilen: • Ausleihbibliothek Dies ist der für jeden Studierenden zugängliche Bereich der Bibliothek. Hier befinden sich Standardwerke und Lehrbücher die während des Studiums für Seminare und zum Anfertigen von Arbeiten benötigt werden. • Präsenzbibliothek Dieser Bereich der Bibliothek ist nur für Mitarbeiter vorgesehen. Studenten können sich hier nach Absprache während ihrer Diplomarbeit ebenfalls Bücher entleihen. • Kongreßbibliothek Hier werden Kongreßberichte nach Jahrgängen sortiert aufbewahrt. Der Gesamtbestand beläuft sich auf ca. 26000 Bücher und wächst jährlich um etwa 300 Stück an. Zur Zeit werden lediglich die Ausleihen der für Studenten zugänglichen Ausleihbibliothek erfaßt. In den anderen Teilen der Bibliothek tragen sich die Entleiher selbständig auf der zum Buch gehörigen Stellvertreterkarte ein. Zur Zeit werden zwei Programme zur Eingabe der Verwaltungsdaten des Buchbestandes eingesetzt. Die Software wurde Anfang der siebziger Jahre von Studenten unter Leitung von Herrn Dr. Heinermann entwickelt. Als Programmiersprache kam damals FORTRAN zum Einsatz. In dem einen Programm werden neue Bücher erfaßt. Dieses Programm erstellt eine Textdatei mit der einmal jährlich der Gesamtbestand aktualisiert wird. Das zweite Programm dient der Erfassung von Leihvorgängen in der Ausleihbibliothek. Dieses Programm erzeugt ebenfalls eine Textdatei mit der jeweils zum Mahnen die Ausleihdaten aktuali- 5 siert werden. Das Aktualisieren der Dateien erfolgt mit der Hilfe von Shellskripten die mehrere FORTRAN-Programme, die leider nicht dokumentiert wurden, aufrufen. Auf dieselbe Art werden die Mahnungen und die gedruckten Kataloge, die in den Bibliothek ausliegen, erstellt. Folgende Kataloge liegen in den Bibliothek zur Recherche: • Verfasserkatalog Der Bestand der Bibliothek nach Verfassern sortiert. • Inventarnummernkatalog Der Bestand der Bibliothek nach Inventarnummern sortiert. • Sachgebietskatalog Der Bestand der Bibliothek nach Sachgebieten sortiert. Auf Grund der damaligen Knappheit an Speicherplatz wurden Datumsinformationen nur zweistellig gespeichert. Dieses führt heute zum bekannten Jahr 2000 Problem. Da die Programme nicht mehr den Ansprüchen an eine moderne Benutzerschnittstelle entsprechen, bietet es sich an, die Software neu zu entwickeln, anstatt die alten Programme aufwendig anzupassen. 1.2 Aufgabenstellung Im Rahmen der Studienarbeit soll eine neue Software in Client/Serverarchitektur zur Verwaltung der Bibliothek entwickelt werden. Zum einen soll hiermit der Buchbestand erfaßt und aktualisiert werden. Zum anderen sollen nun auch die Ausleihvorgänge in den beiden anderen Bibliotheksteilen erfaßt werden. Dazu ist es nötig, unter Berücksichtigung der vorhandenen Daten ein neues Datenmodell zu entwerfen. Dieses soll mit Hilfe eines relationalen Datenbanksystems implementiert werden. Weiterhin müssen Programme zur Konvertierung der Daten entwickelt werden. Als Ersatz für die alten Kataloge soll eine WWW-Recherche angeboten werden. 6 1.3 Benutzte Programme 1.3.1 Der Server Auf dem Server soll das Betriebssystem Microsoft Windows NT 4.0 Server (Service Release 4), das Datenbankmanagementsystem Microsoft SQL-Server 6.50.252 (Service Release 4) sowie der WWW-Server Microsoft Internet Information Server 4.0 (IIS) zum Einsatz kommen. Für die Darstellung interaktiver Inhalte, also zur Recherche über die WWWSchnittstelle, kommen Active-Server-Pages (ASP) zum Einsatz. Dies ist eine von Microsoft entwickelte Skriptingtechnologie, die mit CGI-Skripten vergleichbar ist. Sie werden jedoch wesentlich schneller als CGI-Skripte ausgeführt, so daß sie in einer Windows-Serverumgebung den Vorzug gegenüber CGI erhalten haben. 1.3.2 Die Clients Auf den Clients wird eine Win32-Umgebung benötigt (Windows 3.11 mit der 32Bit-Erweiterung Win32s, Windows 9x oder Windows NT) sowie die ODBCSchnittstelle (Open Database Connection) für den Zugriff auf den Server. Zur Recherche über das WWW wird darüber hinaus ein beliebiger WWW-Browser benötigt. 1.3.3 Das Entwicklungssystem Zur Entwicklung der Programme kommt das Entwicklungssystem Delphi 3.02 Client/Server von Borland zum Einsatz. Es nutzt eine aus Turbo Pascal weiterentwickelte Programmiersprache namens Object-Pascal. Das IDE (Integrated Development Environment / Integrierte Entwickungsumgebung) von Delphi setzt sich aus einem Fenster für den Programmquelltext der einzelnen Units, den einzelnen Formularen sowie dem Objektinspektor zusammen. Die Eigenschaften 7 der Objekte können zur Entwicklungszeit im Objektinspektor eingestellt und geändert werden (siehe Abb. 1). Abb. 1: Die Delphi-Oberfläche 1: Der Objektinspektor 2: Der Quelltexteditor 3: Ein Formular 4: Die Komponentensammlung Das Entwicklungssystem besteht aus einer Entwicklungsumgebung, in der die Formulare durch Hinzufügen von Objekten aus der Komponentensammlung erstellt werden können. Es gibt sichtbare Formulare, sie sind das, was der Benutzter später als Fenster sieht. Außerdem gibt es unsichtbare Formulare, in denen programminterne Objekte, wie zum Beispiel die Datenbankobjekte (s.u.), abgelegt werden. Zu jedem Formular gehört eine eigene Unit. In dieser sind die Ereignisbehandlungsroutinen zu allen im Formular enthaltenen Komponenten (s.u.) abgelegt. Weiterhin gehört ein Datenbankexplorer zum Entwickungssystem, mit dessen Hilfe man sich den Inhalt beliebiger Datenbanken, die über 8 die Windows-ODBC-Schnittstelle ansprechbar sind, anzeigen lassen kann. In ihm kann man SQL Anfragen testen, bevor man sie im Programm verwendet (siehe Abb. 2). Abb. 2: Der SQL-Explorer Die in der Komponentensammlung mitgelieferten Objekte bieten alle Grundfunktionen. Die vom Programmierer gewünschte Funktionalität wird durch Ereignisbehandlungsroutinen erreicht. Jedes Objekt reagiert dabei auf eine zu ihm passende Menge von Ereignissen, ein Editorobjekt beispielsweise auf einen Tastendruck. Wenn nun der Programmierer eine spezielle Reaktion auf diesen Tastendruck erreichen möchte, so muß er diese in der zu diesem Ereignis gehörenden Routine ausprogrammieren. Die im Rahmen der Studienarbeit verwendeten Komponenten stammen aus den drei folgenden Kategorien: 9 Die Steuerungs-Objekte von Delphi: Delphi bringt alle benötigten Steuerelemente für die Programmsteuerung durch den Benutzer mit. Ein Fenster mit funktionierendem Minimize, Maximize und Close-Button ist bereits vorhanden. Die Buttons sind ebenfalls vorhanden, man muß sie nur noch mit einer Beschriftung versehen und ihr OnClick-Ereignis ausprogrammieren, zumeist mit dem Aufruf einer weiteren Funktion. Darüber hinaus bietet Delphi auch noch Objekte wie Menüleisten und Popupmenüs, die jedoch im Rahmen der Studienarbeit keine Verwendung gefunden haben. Die Eingabe-Objekte von Delphi: Delphi bietet alle erdenklichen Eingabeobjekte, vom Label, also einfach angezeigten Text, bis hin zum mehrzeiligen Editor. Darüber hinaus sind natürlich auch RadioButton, CheckBoxes und alle anderen von graphischen Oberflächen bekannten Eingabeelemente vorhanden. In der Studienarbeit werden vor allem einfache Objekte, wie zum Beispiel das TEdit-Objekt, ein einzeiliger Editor, verwendet. Zusätzlich kommen noch Eingabe-Objekte zum Einsatz, die direkt mit der Datenbank verbunden werden, und mit deren Hilfe sich der aktuelle Datensatz anzeigen bzw. bearbeiten läßt. Die Datenbank-Objekte von Delphi: Borland liefert mit Delphi die „Borland Database Engine“ (BDE) aus, eine von Borland entwickelte Lösung zur Anbindung der Anwendungen an die ODBCSchnittstelle von Windows. In ihr wird zum Beispiel das Ergebnis von SQLAnfragen zwischengespeichert. Zusätzlich kann die BDE bei Datenbanken, die selbst nicht über eine Transaktionskontrolle verfügen, diese übernehmen. Der Zugriffsweg von Delphi-Programmen auf auf den SQL-Server hat also folgendes Aussehen: 10 Anwendungsprogramm Borland Database Engine ODBC - Schnittstelle Microsoft SQL Server 6.5 Abb. 3: Zugriffsweg vom Anwendungsprogramm auf den SQL-Server Zum Lieferumfang von Delphi gehören Objekte, die dem Zugriff auf Datenbanken dienen. Hier sind vor allem das Objekt TDataBase sowie die Objekte TTable und TQuerySQL zu nennen. Das TDataBase-Objekt bildet die Verbindung zur Datenbank. Über dieses Objekt kann eine Transaktionskontrolle erfolgen (StartTransaction, Rollback, Commit). Wird diese Möglichkeit nicht genutzt, so erfolgt jede Änderung an der Datenbank von Delphi aus als einzelne Transaktion. Die Objekte TTable und TQuerySQL bilden die Schnittstelle zur Abfrage der Datenbank, wobei TTable jeweils genau eine Tabelle der Datenbank nachbildet, TQuerySQL das Ergebnis einer SQL-Anfrage liefert. Bei relationalen Datenbanken erfolgt die Abfrage der Tabellen bei TTable natürlich auch mit Hilfe von SQL-Befehlen, diese sind jedoch für den Entwickler nicht sichtbar. Es können beliebig viele Instanzen der Objekte generiert werden. Bei TTable wird üblicherweise für jede genutzt Tabelle eine Instanz generiert, die bereits zur Entwicklungszeit des Programms fest mit einer Tabelle verbunden wird (siehe 11 Abb. 4). Für die wichtigsten SQL-Anfragen werden ebenfalls einzelne Instanzen von TQuerySQL generiert, für einzelne Updates oder ähnliches verwendet man eine zusätzliche Instanz, der man zur Laufzeit den jeweils benötigten SQL-String zuweist. Abb. 4: Ein TTable-Objekt, verbunden mit der Tabelle „Buch“ in der Datenbank „Institutsbibliothek“ Bei beiden Objekten steht das Resultat der SQL-Abfrage, bzw. die Tabelle, nach einem Aufruf der Methode Open zur Verfügung. Mit Hilfe der Methoden Prior und Next man kann darin vor- und zurückgehen. Änderungen an den Tabellen schreibt Delphi sofort in die Datenbank zurück. Wenn die Transaktionkontrolle vom Programm selbst übernommen wurde, ist danach allerdings noch ein Commit nötig. Zugriff auf die einzelnen Felder des Ergebnisses hat man über die Methoden FieldByName(Name:String) oder FieldByNumber(Number:Integer). Wurde das Objekt bereits während der Programmentwicklung fest mit einer Tabelle oder einer SQL-Anfrage verbunden, so fragt Delphi auf Wunsch ein Testergebnis an 12 und generiert für die zurückgelieferten Felder eigene Instanzen des TFieldObjekts, so daß ein direkter Zugriff auf die Felder möglich wird. Dies erhöht in erster Linie die Lesbarkeit des Quelltextes und sorgt dafür, daß man nicht versehentlich auf nicht vorhandene Felder zugreift. 1.3.4 Der Webserver Der Microsoft Internet Information Server 4.0 (IIS 4.0) ist ein Bestandteil des Option Pack 4 für Windows NT 4. Dieses Packet ist frei verfügbar und von der Microsoft Homepage zu beziehen. Der Webservers wir durch die Microsoft Management Konsole gesteuert (siehe Abb. 5 ). Abb. 5: Die Microsoft Management Konsole Standardmäßig wir die Datei „default.htm“ bzw. „default.asp“ beim Aufruf des Webservers an die Clients geschickt. Die Active Server Pages (ASP) bestehen aus HTML-Code mit eingebettetem VisualBasic-Script (VB-Script) oder JavaScript. 13 An den Dateiendung „.ASP“ erkennt der IIS, das die Datei auf mögliche SkriptKomponenten zu durchsuchen ist. Die jeweilig genutze Script-Sprache wird in der ersten Zeile des ASP-Dokuments festgelegt. <%@ Language=VBScript %> Innerhalb einer ASP werden die VB-Script-Teile durch die Trennzeichen „<%“ und „%>“ vom eigentlichen HTML-Code getrennt. Der HTML-Code wird hierbei direkt an den Webbrowser weitergeleitet. Nur die Skripte werden vom IIS ausgeführt. In diese Skript-Abschnitte kann weiterer HTML-Code eingefügt werden, der bei bestimmten Laufzeitbedingungen (IF und CASE-Anweisungen) auch an der Browser weitergereicht werden kann. An den Webbrowser wird also nur reiner HTML-Code geschickt. Es ist hiermit möglich, auch mit Browsern die nicht Java, Javascript oder VBScript beherrschen, diese Webseiten zu besuchen. In VBScript gibt es nur einen Variablentyp (Variant), der automatisch den benötigten Datentyp erkennt. Man kann so Integer, Strings oder ganze Arrays in Variablen speichern. Mit diesen Variablen läßt sich rechnen oder Stringverarbeitung durchführen. Informationen die mittels der Method POST an eine ASP-Dokument weitergereicht wurde, kann mit einem REQUEST.FORM abgefragt und z.B. in Variablen gespeichert werden. Außerdem können Datenbankabfragen über die ODBC-Schnittstelle durchgeführt werden (siehe 5.2.1). Das Anfrageergebnis wird in einer Liste zurückgegeben, die man über eine Variable ansprechen kann. In dieser Liste kann man mit dem MOVENEXT bzw. MOVEPREVIOUS durchlaufen. Nähere Erläuterungen zum Quelltext sind noch unter 5.2 zu finden. 14 2. Entwurf der Datenbank In diesem Kapitel wird zunächst eine Analyse der schon im Computer erfaßten Daten der Bibliothek erstellt. Unter Berücksichtigung dieser Daten wird ein Entity-Relationship-Modell für eine neue Datenbank entwickelt sowie ein dazugehöriges Relationen-Modell erstellt. 2.1 Analyse der vorhandenen Daten 2.1.1 Der Gesamtkatalog Der Gesamtkatalog (PCB_xx) enthält alle erfaßten Daten zum Bestand der Bibliothek. Erfaßt wurden mindestens Verfasser/Titel, Standort und Inventarnummer. Er besteht aus 103 Zeichen langen Zeilen, die den folgenden Aufbau besitzen: Spalten: 01 – 56 57 – 58 59 – 61 62 – 65 66 – 85 86 – 95 96 97 98 99 – 103 Inhalt: Verfasser, Titel Auflagenzahl Erscheinungsjahr (2-3stellig) Seitenzahl 5x 4stellige Sachgebiete ISBN Institutskennzeichen: M Standort Leer Inventarnummer Der Eintrag „Verfasser, Titel“ ist nach den alten Unterlagen wie folgt zu interpretieren (Quelle: Originaldokumentation der Bibliotheksverwaltung, Stand 1988): 15 Verfasser mit nachgestellten Anfangsbuchstaben der Vornamen ohne Punkte für Abkürzungen, bei mehreren Verfassern nur deren Nachnamen, bei mehr als 3 Verfassern nur höchstens 3 nennen mit „ua“ oder „et al“ , keine Verwendung von Kommas im Namensteil, das erste Komma schließt den Namensteil ab! nach diesem Abschlußkomma ein Leerzeichen, dann folgt bis Spalte 56 der Titel des Buches, ggf. unter Verwendung möglichst verständlicher Abkürzungen. Leider wurde versäumt, dieses Eingabeformat zu erzwingen, so daß ein Teil der Datensätze nicht dieser Vorgabe entspricht und Probleme bei der Konvertierung bereitet. Beispiel einer korrekten Autor-/Titeleintrags: VARADARAJAN V S, GEOMETRY OF QUANTUM THEORY Autor: Varadarajan V S Titel: Geometry of quantum theory Beispiel für einen falschen Eintrag: CARRIER, KROOK,PEARSON,FUNCT OF A COMPLEX VARIABLE Eine Umsetzung entsprechend der Dokumentation ergibt: Autor: Carrier Titel: Krook,Pearson,Funct of a complex variable Da in der Datenbank durchaus Titel, die ein Komma enthalten, vorkommen, ist es nicht möglich, solche Einträge automatisch zu erkennen. Als Standort sind die folgenden Kennziffern möglich: Kennziffer: 1 oder Leerzeichen 2 3 4 Standort: Präsenzbibliothek Ausleihbibliothek unbenutzt Großformate der Präsenzbibliothek 16 5 6 7 8 9 = „ A B bis Z Dauerentleihungen Lexika und Nachschlagewerke allgemein Seminarberichte Kongreßberichte Verweiszeilen Standexemplar, d.h. nicht entleihbar Standexemplar Großformat Angewandte Mathematik Aufgliederung des Standortes „Lex“ Die Verweiszeilen enthalten alternative Titel oder zusätzliche Autoren zu einem Buch. Diese Verweiszeilen sind bisher nötig gewesen, um das Buch an verschiedenen Stellen in den alphabethisch sortierten Katalogen erscheinen zu lassen. Die Angabe des Erscheinungsjahres erfolgt normalerweise zweistellig, bei älteren Büchern dreistellig, so wird z.B. aus 1985 der Eintrag 85, aus 1885 der Eintrag 885. 2.1.2 Die Ausleihbibliothek Die Datei (PCBEB_xxx) enthält die Ausleihdaten zum Bestand der Ausleihbibliothek. Da die Bearbeiter keinen Zugriff auf den obigen Gesamtkatalog hatten, enthält die Datei (PCBEB_xxx) zusätzlich noch einmal den Eintrag Verfasser/Titel. Sie besteht aus 109 Zeichen langen Zeilen, die den folgenden Aufbau besitzen: Spalten: 01 – 56 57 – 63 64 65 66 – 73 74 – 81 82 – 89 90 – 109 Inhalt: Verfasser, Titel Inventarnummer leer Standort Ausleihdatum letztes Ansprechdatum Mahndatum Crossreferenz 17 Der Eintrag „Verfasser, Titel“ entspricht dem des Gesamtkatalogs. Die „Crossreferenz“ ist ein Namenskürzel, durch das der Ausleiher identifiziert wird. In dem Eintrag „letztes Ansprechdatum“ wird vermerkt, wann die letzte Änderung an dem Datensatz erfolgte. So läßt sich zum Beispiel erkennen, wann ein Buch zurückgegeben wurde. 2.1.3 Analyse der Adressdaten Die Adressen (PCBEADR) enthält die Entleiherdaten. Sie besteht aus 96 Zeichen langen Zeilen, die den folgenden Aufbau besitzen: Spalten: 01 – 20 21 – 22 23 – 26 27 – 51 52 – 56 57 – 71 72 – 96 Inhalt: Crossreferenz Aufnahmemonat Aufnahmejahr (Titel), Vorname, Name PLZ Ort Straße, Hausnummer Alternativ enthalten die Stellen 52 ff. bei Mitarbeitern den Eintrag „Universität Hannover“ mit dem Zusatz „Institut für ...“. 18 2.2 Erstellung eines ER-Modells Verweisnummer Verweis Titel geh. zu Obergebiet verweist auf Autornr. Autor hat geschrieben geh. zu Sachgebiet Name Sachgebietsschlüssel Sachgebietsnummer Buch geh.zu Buch Status Ausleihdatum Letztes Anspr.Dat. Sachgebietsname Ausleihart Ausleihe Mahndatum Gültig? Entleiher Abb. 6: ER-Schema Übersicht 19 Inventur Änderungsdatum Es gibt zwei zentrale Objekttypen, dies sind das Buch (siehe Abb. 7) und der Entleiher (siehe Abb. 8). Sie werden durch den Bezeihungstyp Ausleihe verbunden (siehe Abb. 6). Dieser Bezeihungstyp enthält alle die Ausleihe betreffenden Daten als Attribute. Sie entsprechen den Informationen, die auch in der alten Datenbank gespeichert wurden und sich als sinnvoll erwiesen haben. Das Ausleihdatum dient der Kontrolle, wann das Buch zuletzt entliehen wurde, das letzte Ansprechdatum wird auch bei einer Verlängerung sowie einer Rückgabe mitaktualisiert, so daß festgestellt werden kann, wann die Ausleihe des Buches zuletzt geändert wurde. Das Mahndatum schließlich dient dazu, festzustellen, wann das Buch zurückgegeben werden muß. In dem Attribut Ausleihart wird festgehalten, ob es sich um eine normale Leihe (6 Wochen), eine Semesterleihe (bis zum nächsten 15.2. / 15.8.) oder eine Dauerleihe handelt. Gültig? schließlich dient der Anzeige, ob das Buch tatsächlich noch entliehen ist. Auf diese einfache Art ist es möglich, bis zur nächsten Ausleihe den letzten Entleiher des Buches festzustellen. Der Beziehungstyp „hat geschrieben“ dient dazu, ein Buch mit mehreren Autoren zu verknüpfen. Damit die Reihenfolge eindeutig ist, hat der Objekttyp Autor ein Attribut Autornummer. Dasselbe gilt für den Beziehungstyp „verweist auf“. Sie wird benötigt, um alternative Titel zum Suchen des Buches zu ermöglichen. „Gehört zu Sachgebiet“ verbindet das Buch mit einem Sachgebietsschlüssel, der seinerseits über „gehört zu Obergebiet“ wiederum mit einem Sachgebiet verbunden sein kann. Schließlich gehören zu einem Buch noch die für die Inventur benötigten Informationen, die mit „gehört zu Buch“ an das Buch angebunden sind. Inventarnummer Auflage Erscheinungsjahr Erscheinungsort Buch Seitenzahl Weitere Autoren? Standort ISBN Abb. 7: Der Entitytyp Buch 20 Die Attribute des Objekttyps Buch stimmen im wesentlich mit den vorhandenen Informationen überein, neu hinzugekommen sind der Erscheinungsort, der beim Konvertieren der alten Daten einfach offen gelassen wird, sowie das Attribut „Weitere Autoren?“, in dem vermerkt werden kann, daß es weitere in der Datenbank nicht aufgenommene Autoren zu diesem Buch gibt. Mitarbeiter? Institut Crossreferenz Straße Vorname Postleitzahl Entleiher Name Ort Titel E-Mailadresse Mahnsumme Abb. 8: Der Entitytyp Entleiher Die Attribute des Objektyps Entleiher sind ebenfalls in erster Linie die aus dem alten Datenbestand übernommenen Informationen, wobei hier beim Konvertieren der bisherige Eintrag Name in Titel, Vorname, Name zerlegt wird. Neu hinzugekommen ist das Attribut E-Mailadresse sowie die Mahnsumme, die beim Mahnen hier zukünftig automatisch aufgenommen werden soll. Das Feld „Crossreferenz“ dient der Identifikation des Entleihers. Es hat sich hierbei bewährt, nicht mit abstrakten Nummern zu arbeiten, sondern ein aus dem Namen des Entleihers abgeleitetes Kürzel zu verwenden, da bei der Eingabe der Ausleihen die Crossreferenz direkt eingegeben wird, um ein schnelles Arbeiten zu ermöglichen. Bei Mitarbeitern wird hierzu normalerweise der Nachname verwendet, bei Studenten der Nachname sowie den 1. Buchstaben des Vornamen. „Mitarbeiter?“ schließlich dient der Unterscheidung zwischen Mitarbeitern und Studenten, da nur letztere Mahngebühren zahlen müssen. 21 Da das Institut bei Mitarbeitern ein eigenes Attribut erhält, können zukünftig bei Bedarf auch die Adressen der Mitarbeiter gespeichert werden. Als Integritätsbedingen sind zu nennen: • Ausleihart „D(auerleihe)“ nur für Mitarbeiter möglich. • Ausleihdatum ≤Letztes Ansprechdatum. • Entliehene Bücher können nur verlängert oder zurückgegeben werden. • Mahnsumme ≥ 0. • Bei Mitarbeitern muß das Institut, bei Studenten die Adresse eingegeben werden. • Übergeordnete Sachgebiete haben durch 100 teilbare Sachgebietsnummern, diese dürfen anderen Sachgebieten nicht untergeordnet werden. • Ist ein Sachgebiet einem anderen untergeordnet, so unterscheidet sich die Sachgebietsnummer nur in den letzten beiden Ziffern. 2.3 Umsetzung des ER-Schemas in ein Relationen-Schemas Die neue Datenbank wird aus 8 Relationen bestehen. Bei der Realisierung wurde darauf geachtet, daß das Schema mit dem Microsoft SQL-Server realisiert werden kann. Die Relation „Buch“: Attribut Datentyp NN* Inventarnummer WeitereAutoren ISBN Auflage Seitenzahl Erscheinungsjahr Erscheinungsort Standort INTEGER BIT(1) VARCHAR(10) INTEGER INTEGER DATETIME VARCHAR(50) VARCHAR(20) *NN= NOT NULL / Defaultwert. 22 ü ü ü Fremdschlüssel Die Relation „Verweise“: Attribut Datentyp NN* Inventarnummer Verweisnummer Titel INTEGER INTEGER VARCHAR(255) ü ü ü Fremdschlüssel Buch.Inventarnummer *NN= NOT NULL / Defaultwert. Der „Titel“ mit der „Verweisnummer“ 1 ist der tatsächliche Titel des Buches, die weiteren Einträge stellen Verweise dar. Zum Relationship „verweist auf“ wird keine Relation erstellt (Verknüpfung von Buch und Verweise), da diese durch einen Fremdschlüssel realisiert wird. (Verweise.Inventarnummer ó Buch.Inventarnummer) Die Relation „Autoren“: Attribut Datentyp NN* Inventarnummer Autornummer Name INTEGER INTEGER VARCHAR(50) ü ü ü Fremdschlüssel Buch.Inventarnummer *NN= NOT NULL / Defaultwert. Die Autoren werden in der Reihenfolge ihrer Nennung auf dem Buch durchnumeriert. Zum Relationship „hat geschrieben“ wird keine Relation erstellt (Verknüpfung von Buch und Autoren), da diese durch einen Fremdschlüssel realisiert wird. (Autoren.Inventarnummer ó Buch.Inventarnummer) Die Relation „Sachgebieteschluessel“: Attribut Sachgebietsnummer Sachgebietsname Datentyp NN* INTEGER VARCHAR(255) *NN= NOT NULL / Defaultwert. 23 ü ü Fremdschlüssel Buch.Inventarnummer In der Sachgebietstabelle haben Sachgebiete 4-stellige Nummern. Das linke Ziffernpaar entspricht dem Obergebiet, das rechte dem Untergebiet. So ist das Sachgebiet 0000 das Obergebiet der Sachgebiete 0001-0099. Da die Sachgebietsnummern als Zahl gespeichert werden, entspricht die 0 der 0000. Die Relation „GehoertZuObergebiet“ wurde nicht implementiert, das diese Beziehung aus den Sachgebietsnummer erkennbar ist. Die Relation „GehoertZuSachgebiet“: Attribut Datentyp Inventarnummer Sachgebietsnummer INTEGER INTEGER NN* ü ü Fremdschlüssel Buch.Inventarnummer Sachgebietssschluessel. Sachgebietsnummer *NN= NOT NULL oder Defaultwert. Die Relation „Inventur“: Attribut Datentyp Inventarnummer Status Aenderungsdatum INTEGER CHAR(1) DATETIME NN* Fremdschlüssel ü Buch.Inventarnummer ü(N) ü *NN= NOT NULL oder Defaultwert. Zur Relationship „gehoert zu Buch“ wird keine Relation erstellt (Verknüpfung von Buch und Inventur), da diese durch einen Fremdschlüssel realisiert wird. (Inventur.Inventarnummer ó Buch.Inventarnummer) Die Bedeutungen des Feldes „Status“: N E V A S Unbekannt entliehen verloren angeblich verloren am Standort 24 Die Relation „Entleiher“: Attribut Datentyp NN* Cref Name Vorname Titel Strasse PLZ Ort Mitarbeiter Institut Email Mahnsumme VARCHAR(20) VARCHAR(40) VARCHAR(40) VARCHAR(25) VARCHAR(40) INTEGER VARCHAR(50) BIT(1) VARCHAR(80) VARCHAR(80) MONEY Fremdschlüssel ü ü ü(0) ü(0,0) *NN= NOT NULL / Defaultwert. Die Relation „Ausleihe“: Attribut Datentyp NN* Inventarnummer Cref Ausleihdatum Mahndatum LetztesAnsprechdatum Ausleihart Gueltig INTEGER VARCHAR(20) DATETIME DATETIME DATETIME CHAR(1) BIT(1) Fremdschlüssel ü Buch.Inventarnummer ü Entleiher.Crossreferenz ü ü ü ü(N) ü(1) *NN= NOT NULL / Defaultwert. Die Bedeutungen des Feldes „Ausleihart“: N S D Normal (6 Wochen) Semesterleihe (bis zum nächsten 15.2. bzw. 15.8) Dauerleihe 25 Der folgende Trigger wird benutzt um das letzte Ansprechdatum bei Änderungen der Ausleihe automatisch auf das Tagesdatum zu setzen: CREATE TRIGGER T_LAD_Update ON dbo.Ausleihe FOR INSERT,UPDATE AS DECLARE @invnr INT SELECT @invnr=Inventarnummer FROM INSERTED UPDATE Ausleihe SET LetztesAnsprechdatum=CONVERT(CHAR(12),GETDATE(),104) WHERE @invnr=Inventarnummer Bei der Aufnahme eines neuen Entleihers wird mit dem nächsten Trigger das Aufnahmedatum gespeichert: CREATE TRIGGER T_Entleiheraufnahme ON dbo.Entleiher FOR INSERT AS DECLARE @cref VARCHAR(20) SELECT @cref=cref FROM INSERTED UPDATE Entleiher SET Aufnahmedatum=CONVERT(CHAR(12),GETDATE(),104) WHERE @cref=cref Außerdem wird mit einer Regel überwacht, daß die Mahnsummer nicht negativ wird. Regeln dienen der Kontrolle einzelner Tabellenspalten. Mit ihrer Hilfe kann die Einhaltung eines bestimmten Wertebereiches sichergestellt werden. Eine Regel ist also ein eingeschränkter Trigger, der Eintrag wird zurückgewiesen, wenn der Wertebereich nicht eingehalten wird: CREATE RULE Mahnsumme_GT_Zero AS @MS >= 0 Anschließend muß die erzeugte Regel noch mit einer Tabellenspalte verbunden werden. Dies geschieht mit Hilfe der stored procedure sp_bindrule. sp_bindrule Mahnsumme_GT_Zero, Entleiher.Mahnsumme Die weiteren Integritätsbedingungen werden durch die Anwendungsprogramme sichergestellt. 26 3. Benutzerhandbuch der Programme In diesem Kapitel wird die Benutzung der entstandenen Programme beschrieben. Dazu gehören die Systemanforderungen sowie eine für den Benutzer verständliche Anleitung zur Bedienung der Programme. Ein Benutzerhandbuch zur WWW-Schnittstelle wurde nicht erstellt, da eine Onlinehilfe verfügbar ist. 3.1 Systemanforderungen und Hinweise zur Installation 3.1.1 Der Server Achtung: Die folgenden Arbeiten sollten nur von einem Systemadministrator druchgeführt werden! Nach der Installation des SQL-Servers und des Webservers müssen verschiedene Einstellungen vorgenommen werden. Zunächst muß mit dem SQL Enterprise Manager ein neues Datenbankmedium erstellt werden, in dem die Datenbank gespeichert wird (siehe Abb. 9). Ist bereits ein Datenbankmedium vorhanden, sollte dieses ausreichend Platz für die Bibliotheksdatenbank aufweisen. Die Größe des Datenbankmedium sollte mindestens 100MB betragen, um die mitgelieferte leere Datenbank einzuspielen. Abb. 9: Neues Datenbankmedium erstellen 27 Anschießend muß eine neue Datenbank erstellt werden (siehe Abb. 10) und die mitgelieferte leere Datenbank eingespielt werden (siehe Abb. 11). Abb. 10: Neue Datenbank erstellen Abb. 11: Wiederherstellen der mitgelieferten leeren Datenbank 28 In dieser mitgelieferten Datenbank sind alle notwendigen leeren Tabellen, Trigger und Regeln sowie ein Internetlogin (ohne Passwort) vorhanden. Das Internetlogin wird für den Webserver benötigt. Für alle anderen Benutzer müssen die jeweiligen Logins erstellt werden (siehe Abb. 12) sowie Benutzerrechte eingestellt werden. Abb. 12: Benutzer erstellen Die Benutzer des Programms für die Bestandsverwaltung (siehe 3.3) benötigt Vollzugriff auf die folgenden Tabellen: • Autoren • Buch • GehoertZuSachgebiet • Inventur • Sachgebietsschluessel • Verweise Eine Zugriffsberechtigung auf die Tabellen „Ausleihe“ und „Entleiher“ ist nicht notwendig. 29 Für die Programme und den Webserver muß die ODBC-Systemverbindung „Institutsbibliothek“ zum SQL-Server erstellt werden. Diese Einstellung wird mit dem ODBC-Manager von Windows NT vorgenommen (siehe Abb. 13). Abb. 13: Die ODBC-Schnittstelle 3.1.2 Die Clients Zum Betrieb der Software auf den Clients wird eine Win32-Umgebung benötigt (Windows 3.11 mit Win32s, Windows 9x oder Windows NT 4.0). Außerdem muß die ODBC-Schnittstelle und der ODBC-Treiber für den SQL-Server installiert sein und eine Verbindung „Institutsbibliothek“ zum SQL-Server eingerichtet werden (siehe Abb. 13). Um diese einzustellen, wenden Sie sich bitte an Ihren Systemadministrator. Die Programme müssen im selben Verzeichnis des jeweiligen Rechners liegen und können von dort gestartet werden. Die Wahl des Verzeichnis ist beliebig. 30 Nach dem Aufruf des Programms „Start“ können Sie die einzelnen Programmteile über die entsprechenden Buttons aufrufen (siehe Abb. 14) Abb. 14: Das Startprogramm Nach dem Start der jeweiligen Programme muß zunächst der Benutzername und das Benutzerkennwort eingegeben werden (siehe Abb. 15). Abb. 15: Die Passworteingabe 3.2 Die Konvertierungsprogramme Bemerkung: Für die jeweiligen Konverter müssen auch ODBC-Verknüpfungen erstellt werden die jedoch nur einmal benötigt werden. Da die Konvertierung von den Entwicklern durchgeführt wird, werden diese hier nicht weiter erläutert. Aus entsprechenden Gründen wurde in das Design der Benutzerschnittstellen nicht soviel Zeit investiert. 31 3.2.1 Der Bibliothekskonverter Abb. 16: Der Bibliothekskonverter Zum Blättern in der Datenbank stehen der „Vor“ sowie der „Zurück“ Button zur Verfügung, diese blättern jeweils einen Datensatz weiter. Mit „Start / Weiter“ beginnt das Programm mit der Konvertierung der Daten. Sobald ein Eintrag aus der alten Datenbank nicht eindeutig zu konvertieren ist, hält das Programm an dieser Stelle an und der Benutzer muß den Eintrag korrigieren und kann dann mit dem „Start / Weiter“ Button das Programm fortsetzen (siehe Abb. 16). Mit dem „Programm beenden“ Button wird der Bibliothekskonverter beendet. 32 3.2.2 Der Ausleihkonverter Abb. 17: Der Ausleihkonverter Mit dem „Start / Weiter“ Button startet man die Konvertierung der Ausleihinformationen. Sobald zu einem entliehenen Buch kein Entleiher bzw. fehlerhafte Entleiherinformationen vorhanden sind, kann man diese nachtragen bzw. die Ausleihe überspringen (siehe Abb. 17). Mit dem „Programm beenden“ Button wird der Ausleihkonverter beendet. 33 3.3 Die Bestandsverwaltung Abb. 18: Die Bibliotheksverwaltung Zum Blättern in der Datenbank stehen der „Vor“ sowie der „Zurück“ Button zur Verfügung, diese blättern jeweils einen Datensatz weiter. Um zu einem bestimmten Datensatz zu springen, steht der „zu InvNr springen“ Button zur Verfügung. Dieser öffnet ein Dialogfenster (siehe Abb. 19) in dem die Inventarnummer eingegeben werden kann. Ist die Inventarnummer nicht vorhanden, oder wird der „Abbrechen“ Button gewählt, so verbleibt das Programm beim aktuellen Datensatz. Abb. 19: Zu Inventarnummer springen 34 Für Änderungen an der Datenbank befinden sich links im Fenster die Buttons „Ändern“, „Änderung verwerfen“ und „Änderung speichern“ (siehe Abb. 18). Nach dem Klicken des Button „Ändern“ wird das Programm in den Editiermodus versetzt. Nun können im aktuellen Datensatz die gewünschten Änderungen vorgenommen werden. Diese müssen mit „Änderung speichern“ für den aktuellen Datensatz bestätigt werden, „Änderung verwerfen“ behält den alten Datensatz bei. Für das Hinzufügen neuer Autoren, Titel und Sachgebiete befinden sich im linken Fensterbereich die entsprechenden Buttons. Für Autoren und Titel wird eine neue Zeile im entsprechenden Feld hinzugefügt und das Programm in den oben beschriebenen Editiermodus versetzt. Für das Hinzufügen eines neuen Sachgebiets wird ein neues Fenster geöffnet, in dem die neue Sachgebietsnummer eingegeben werden kann. In diesem Fenster wird gleichzeitig das zur aktuell eingegebenen Nummer gehörende Sachgebiet angezeigt (siehe Abb. 20). Der „OK“-Button fügt es dann dem Buchdatensatz hinzu. Abb. 20: Sachgebiet hinzufügen Das Hinzufügen eines neuen Buches erfolgt mit Hilfe des Buttons in der linken oberen Fensterecke (siehe Abb. 18). Das Programm gibt dann die nächste zu vergebende Inventarnummer vor. Diese kann jedoch geändert werden. Es wird ein leerer Eintrag angezeigt, der ausgefüllt werden muß. Zu einem Datensatz gehören mindestens eine Inventarnummer, ein Autor, ein Titel sowie der Standort. Weitere Autoren, Titel und Sachgebiete können dann wie oben beschrieben hinzugefügt werden (siehe Abb. 21). 35 Abb. 21: Neues Buch hinzufügen Mit Hilfe des „Programm beenden“ Buttons wird die Bibliotheksverwaltung beendet. 3.4 Das Leihprogramm Das Leihprogramm dient zur Eingabe der Entleihungen, Verlängerungen und Rückgaben sowie zur Eingabe und zum Bearbeiten der Benutzerdaten durch die Bibliotheksmitarbeiter. Deshalb wurde besoders auf eine schnelle, routinemäßige Eingabe und nicht so sehr auf eine selbsterklärende Benutzerschnittstelle wertgelegt. 36 Abb. 22: Das Leihprogramm Mit Hilfe des „Programm beenden“ Buttons wird das Leihprogramm beendet. Nach dem Programmstart steht der Eingabefokus bereits auf der Inventarnummer. Nach Eingabe der Inventarnummer wird mit Hilfe der Eingabetaste in das Feld Ausleihart gewechselt, sofern das Buch in der Datenbank vorhanden ist. Ist das Buch nicht vorhanden, wird rechts neben der Inventarnummer ein „Buch nicht vorhanden“ eingeblendet. Mit der Esc-Taste kann man immer zum vorherigen Eingabefeld zurückspringen. Wenn das Buch vorhanden ist, so wird rechts neben der Inventarnummer der 1. Buchautor sowie der Titel und bei entliehenen Büchern auch die momentane Ausleihart sowie das Mahndatum angezeigt. Ist das Buch bereits entliehen, so werden Informationen über den Entleiher unterhalb der Eingabefeldern angezeigt. Ist das Buch nicht entliehen, so sind die folgenden Eingaben möglich: • N: Normale Leihe (6 Wochen) • S: Semesterleihe (15.2. / 15.8.) • D: Dauerleihe Nach dem Druck auf eine der Tasten springt die Eingabe dann zum Feld CRef. 37 Bei einem entliehenen Buch sind folgende Eingaben bei der Aktion möglich: • R: Rückgabe des Buches • V: Verlängern der Ausleihfrist um 6 Wochen vom Tagesdatum an gerechnet • S: Verlängern des Buches bis zum Semesterende (15.2. / 15.8.) Die entsprechende Aktion wird sofort ausgeführt und das neue Mahndatum unterhalb des alten angezeigt. Im Feld Cref muß das Namenskürzel des Entleihers eingegeben werden. Dies ist bei Mitarbeitern normalerweise der Nachname, also zum Beispiel „testperson“, bei anderen Entleihern Nachname + Leerstelle + 1. Buchstabe des Vornamens, also zum Beispiel „testperson a“. Die Eingabe wird mit der Eingabetaste abgeschlossen. Ist der Entleiher bereits in der Datenbank vorhanden, so wird die Ausleihe ausgeführt, die Entleiherinformationen angezeigt und zur Eingabe einer der nächsten Inventarnummer gesprungen. Ist der Entleiher nicht vorhanden, so wird das Fenster zur Eingabe der Entleiherdaten geöffnet. Hier können die entsprechenden Daten eingegeben werden. Abgeschlossen wird die Eingabe mit dem „OK“ Button, der „Abbrechen“ Button oder die Esc-Taste brechen die Eingabe ab.(siehe Abb. 23) Abb. 23: Entleiherdaten bearbeiten Ist der „Entleiher Bearbeiten“ Button aktiv, so kann man mit seiner Hilfe den Datensatz des aktuell angezeigten Entleihers bearbeiten. Hierzu öffnet sich das bereits oben beschriebene Fenster, in dem die entsprechenden Eingaben vorgenommen werden können. 38 3.5 Das Programm zum löschen eines Entleihers Das Programm dient zum Löschen von Entleihern, die keine Bücher mehr entliehen haben. Nach dem Start des Programms wird eine Liste aller Entleiher angezeigt, die keine Bücher mehr entleihen haben. Zum Löschen eines Entleihers muß ein Doppelklick über seinem Namen ausgeführt werden. Abb. 24: Entleiher löschen Nach dem die folgende Sicherheitabfrage mit OK beantwortet wurde, wird der Entleiher entgültig aus der Datenbank gelöscht. Abb. 25: Die Sicherheitsabfrage 39 3.6 Das Mahnprogramm Abb. 26: Das Mahnprogramm Nach der Auswahl des Druckers wird mit dem „Start“-Button der Mahnvorgang gestartet. Die Mahnungen für die Mitarbeiter werden auf der Festplatte gespeichert, die übrigen auf dem ausgewählten Drucker ausgegeben. 40 4. Entwicklung und Realisierung der Programme In diesem Kapitel wird zunächst erläutert, welche Programme benötigt werden. Anschließend wird auf die Benutzerschnittstellen und Funktionen der einzelnen Programme eingegangen. 4.1 Benötigte Programme Es werden Konvertierungstools zum Einlesen der alten, in großen Textdateien erfaßten, Daten in die neue Datenbank benötigt. Wegen der besseren Übersichtlichkeit, und um Fehler beim Konvertieren zu vermeiden, werden hierzu zwei Programme eingesetzt, für jede Ausgangsdatei eines. Die Verwaltung selbst erfolgt mit zwei Programmen, eines dient zur Verwaltung des Buchbestandes, das andere zur Verwaltung der Nutzer und Ausleihdaten sowie zum Erstellen von Mahnungen. Diese Trennung ist sinnvoll, da die Verwaltung und die Erfassung der Benutzerdaten sowie der Ausleihen von verschiedenen Personen vorgenommen wird. 4.2 Benutzerschnittstellen und Funktionsbeschreibung Die Benutzerschnittstellen der einzelnen Programme sollen ein möglichst einheitliches Aussehen erhalten. Dies versetzt den Benutzer in die Lage, nach der Einarbeitung in eines der Programme auch die anderen Problemlos bedienen zu können. Für die Programme wurde eine feste Fenstergröße von 800x600 Punkte gewählt, da ein Skalieren der Anzeige auf verschiedene Fenstergrößen die Übersichtlichkeit verschlechtern würde und um die Nutzung des Programms auf alten Computern mit geringerer Bildschirmauflösung zu ermöglichen. Die Bibliothekskonvertierung liest einen Datensatz aus der alten Gesamtdatenbank ein und zerlegt diesen in die einzelnen Einträge. Das Programm versucht hierbei, die Spalte Autor/Titel automatisch zu zerlegen. Ist dieses nicht möglich, 41 so muß der Benutzer eine Korrektur vornehmen. Anschließend wird der Datensatz in der neuen Datenbank gespeichert. Der Ausleihkonverter spricht die alte Ausleihdatei und die Entleiherdatei mit einem ODBC-Text-Treiber als Datenbank an. So werden mit einer SELECTAnweisung alle entliehenen Bücher ausgewählt. Dann wird zu jedem entliehenen Buch zunächst ein Entleiher in der neuen Datenbank gesucht. Ist dort kein Eintrag vorhanden, wird ein Entleiher in der alten Entleiherdatenbank gesucht. Die Ausleihe wird anschließend per INSERT-Anweisung in die Datenbank eingetragen, und sofern der Entleiher noch nicht vorhanden war, ebenfalls eingetragen. Außerdem werden in der Crossreferenz alle deutschen Sonderzeichen ersetzt, z.B. „ä“ durch „ae“. Bei den Entleiherinformationen wird noch vor dem Eintragen in die neue Datenbank eine Trennung von Name und Vorname durchgeführt. Bei der Konvertierung werden alle alten Karteileichen aus der Datenbank entfernt, da nur die aktuellen Benutzer übernommen werden sollen. Für die Bücherverwaltung werden Funktionen zum Editieren und Hinzufügen neuer Bücher benötigt. Die datensatzweisen Editierfunktionen stellen die Anzeigeelemente von Delphi hierbei zur Verfügung, das Programm muß dazu das Editieren freigeben und abschließend für den bearbeiteten Datensatz ein Commit oder Rollback auslösen. Beim Hinzufügen wird ein leerer Datensatz vom Programm generiert und dann genau wie beim Editieren vom Benutzer bearbeitet. Falls das Hinzufügen abgebrochen werden soll, wird dann ebenfalls ein Rollback, sonst ein Commit ausgeführt. Die Ausleih- und Benutzerverwaltung hat im Prinzip zur Bücherverwaltung ähnliche Funktionen, nur daß hier auch ein Löschen der Benutzer möglich sein muß, sofern der Benutzer keine Bücher mehr entliehen hat. Zusätzlich sind Funktionen zum Eingeben von Ausleihen, Verlängerungen und Rückgaben nötig. Zu guter Letzt wird eine Mahnfunktion benötigt, die für alle Benutzer der Ausleihbibliothek automatisch Mahnungen erstellt und ausdruckt bzw., sofern eine EMailadresse bekannt ist, zum späteren Versand als Textdatei speichert. Ein automatischer Versand ist hier nicht sinnvoll, da einige Nutzer ihre Bücher direkt in die Bibliothek zurückstellen, und daher vor dem Mahnen die Richtigkeit der Mahnungen überprüft werden muß. Darüber hinaus enthält das Programm eine Suchfunktion, deren Eingabefenster der WWW-Schnittstelle, zur besseren Orientierung des Anwenders, nach- 42 empfunden ist. Die Anzeige erfolgt in einem Fenster, das dem der Bibliotheksverwaltung ähnlich gestaltet ist. Auf die Realisierung einer Suchfunktion wurde hier verzichtet, da diese über da WWW bereitgestellt wird. 4.3 Realisierung der Programme Zur Realisierung der Programme bleibt nach der Vorstellung der Benutzerschnittstellen nicht mehr viel zu sagen. Deshalb werden im folgenden nur die wesentlichsten, selbst erstellten, Prozeduren vorgestellt. Zusätzlich wird ein kurzer Überblick über die Module geben, die ja, wie bei der Vorstellung von Delphi erwähnt, jeweils einem Formular entsprechen. 4.3.1 Die Bestandsverwaltung Die Bestandsverwaltung setzt sich aus vier Modulen zusammen. Dazu gehören das Modul bibverw1, in dem sich das zentrale Formular, also das Hauptfenster der Anwendung befindet. Dem Modul DataModule2, das als nicht sichtbares Formular für die Datenbankverbindung zuständig ist sowie den Modulen SachgebHinzu und InvNrAbfr. Sie entsprechen den Formularen zum Hinzufügen eines Sachgebiets bzw. der Abfrage der Inventarnummer zum Springen in der Datenbank. Im DataModule2 befindet sich ein TDataBase-Objekt für die Transaktionskontrolle sowie mehrere TTable- und TQuerySQL-Objekte für die Datenbankanbindung. Im einzelnen sind das TTable-Objekte für die Tabellen Buch und Inventur, sowie TQuerySQL-Objekt für die Abfrage der Autoren und Titel eine Buches. Das TQuerySQL-Objekt für die Autorenabfrage enthält den folgendem SQL-String: select * from autoren where Inventarnummer = :InvNr; Hierbei ist :InvNr ein Parameter, dem mit Hilfe des Objektinspektors als IntegerParameter definiert wurde. 43 Weiterhin sind TQuerySQL-Objekte vorhanden, die zur Abfrage der Sachgebiete benötigt werden. Um zu zeigen, was an Programmierleistung erforderlich war, wird nun die folgende Prozedur aus dem DataModule2 vorgestellt. Sie wird aufgerufen, wenn den Verweisen ein neuer Eintrag hinzugefügt wurde und setzt dann die Verweisnummer entsprechend: procedure TDataModule2.QueryVerweiseNewRecord(DataSet: TDataSet); begin DataModule2.QuerySQL.Close; DataModule2.QuerySQL.SQL.Clear; DataModule2.QuerySQL.SQL.Add ('select max(verweisnummer)+1 anzahl from verweise where inventarnummer=' +DataModule2.TableBuchInventarnummer.AsString); DataModule2.QuerySQL.Open; DataModule2.QueryVerweiseVerweisnummer.AsInteger:= DataModule2.QuerySQL.FieldByName('anzahl').AsInteger; DataModule2.Query7SQL.Close; DataModule2.QueryVerweiseInventarnummer.AsInteger :=DataModule2.TableBuchInventarnummer.AsInteger; if DataModule2.QueryVerweiseVerweisnummer.AsInteger=0 then DataModule2.QueryVerweiseVerweisnummer.AsInteger:=1; end; Der Parameter der Prozedur wird von Delphi intern verwendet und ist deshalb nur scheinbar Überflüssig. Mit dem Konstrukt DataModule2.TableBuchInventarnummer.AsString erfolgt der Zugriff auf den aktuellen Wert des Feldes Inventarnummer im Objekt TableBuch, als dem TTable-Objekt das mit der Relation Buch verbunden ist. Das Objekt TableBuchInventarnummer ist ein von Delphi generiertes Objekt zum Zugriff auf das Feld. Alternativ wäre auch ein Zugriff der Form TableBuch.FieldByName(‘Inventarnummer‘) möglich. Die Methode AsString liefert den Feldinhalt als String im Delphi-Format zurück. Es sind mehrere kurze Prozeduren dieser Art vorhanden. Eine detaillierte Erläuterung aller Prozeduren würde jedoch den Rahmen dieser Arbeit sprengen. Die Prozeduren sind aber alle leicht lesbar und somit selbsterklärend. Eine kurze 44 Erläuterung der Prozeduren ist im Anhang A zu finden. Da das DataModule selbst auch ein Formular, und somit ein Objekt ist, darf die Unit nicht so wie das in ihr enthaltene Formular heißen. Daher heißt das Formular DataModule2, welches im Anhang in der Datei „Datamodule1.pas“ zu finden ist In den anderen Modulen befinden sich vor allem kurze Prozeduren, die nach einem Wechsel des Datensatzes die Anzeige aktualisieren und die jeweils zu einem Button gehörende Funktion ausführen. Das einfachste Beispiel ist die folgende Prozedur, die, wie man ihrem Namen entnehmen kann, zum „Programm beenden“-Button gehört: procedure TForm1.ButtonEndeClick(Sender: TObject); begin Close; end; Mit Close wird das Formular geschlossen. Da es sich hierbei um das Hauptfomular der Anwendung handelt, wird diese somit beendet. Die anderen Programme, die dem Benutzer zur Verfügung stehen, enthalten auch jeweils ein DataModule2, das jeweils aus dem obigen abgeleitet wurde. Diese wurden jedoch dem jeweiligen Programm angepaßt. 4.3.2 Das Leihprogramm Das Programm Leihverwaltung besteht aus den Modulen Main, DataModule2 und Cref. Hierbei gehört das Modul Cref zum Formular Entleiherdaten bearbeiten und enthält lediglich diverse einzeilige Editor-Objekte. Im Modul Main erfolgt die restliche Programmsteuerung als Reaktion auf Tastendrücke des Benutzers, deshalb haben die Prozeduren auch jeweils den Namen onKeyPress, wobei jedem Edit-Objekt des Formulars eine eigene onKeyPress-Prozedur zugeordnet ist. 45 4.3.3 Das „Entleiher löschen“ Programm Des Programm zum löschen nicht mehr benötigter Entleiher ist das einfachst und kleinste der vier Programme. Es besteht aus einem Modul DataModule2 und dem Modul main. Mit Hilfe der SQL-Anfrage QueryKandidaten werden zunächst die Kandidaten, die für das löschen in Frage kommen, ermittelt: select distinct (e.Name), e.Vorname, e.cref from ausleihe a, entleiher e where (a.gueltig=0) and (a.cref=e.cref) and (a.cref not in (select cref from ausleihe where gueltig=1)); Nach einem Doppelklick auf einen angezeigten Entleiher und einer Sicherheitsabfrage wird dieser gelöscht. Hierzu werden zunächst alle Einträge in der Relation „Ausleihe“ gelöscht, in denen der Entleiher noch verzeichnet ist. Anschließend wird dann der Entleiher selbst aus der Relation „Entleiher“ gelöscht: procedure TForm2.DBGrid1DblClick(Sender: TObject); var s : string; p : PChar; begin DataModule2.QueryKandidaten.RecNo:=DBGrid1.SelectedIndex; s:=DataModule2.QueryKandidatencref.AsString; p:=StrAlloc(80); StrPCopy(p,'Den Entleiher ' +DataModule2.QueryKandidatenVorname.AsString+' ' +DataModule2.QueryKandidatenName.AsString +' wirklich löschen ?'); if Application.MessageBox(p,'Frage',mb_OKCancel) = IDOK then begin s:=''''+s+''''; DataModule2.QuerySQL.SQL.Clear; DataModule2.QuerySQL.SQL.Add('delete from ausleihe where cref='+s+';'); DataModule2.QuerySQL.ExecSQL; DataModule2.QuerySQL.SQL.Clear; DataModule2.QuerySQL.SQL.Add('delete from entleiher where cref='+s+';'); DataModule2.QuerySQL.ExecSQL; DataModule2.QueryKandidaten.close; DataModule2.QueryKandidaten.open; DBGrid1.Update; 46 end; StrDispose(p); end; Die hier vorgestellt Prozedur nutzt die zweite Möglichkeit, SQL-Anfragen zu stellen, sie werden in dieser Prozedur zur Laufzeit generiert. Hierfür wurde im DataModule2 die Instanz QuerySQL von TQuerySQL vorgesehen. Zunächst wird hier ermittelt, wo der Doppelklick gemacht wurde und anschließend der Text für die Sicherheitsabfrage zuammengesetzt. Nach dem diese mit OK beantwortet wurde, werden dann die beiden benötigten SQL-Anfragen generiert und ausgeführt. Mit DBGrid1.Update wird am Ende die Bildschirmanzeige aktualisiert. 4.3.4 Das Mahnprogramm Das Programm Mahnen schließlich besteht nur aus zwei Modulen, nämlich einem schon bekannten DataModule2 und dem Modul Mahnen, in dem sich wiederum die Prozedur Mahnen befindet, die das eigentliche Mahnen erledigt. Hierzu werden zunächst die zu mahnenden Personen mit Hilfe der folgenden SQL-Anweisung ermittelt. select distinct A.Cref Cref, Name, Vorname, Titel, Strasse, Plz, Ort, Mitarbeiter, Institut, Email, Mahnsumme, Aufnahmedatum from Ausleihe A, Entleiher E where (A.Cref=E.Cref) and (Mahndatum<GetDate()) and (Gueltig=1) order by Name ASC; Anschließend wird für jede Person einzeln eine Mahnung erstellt. Die Mahnungen für die Mitarbeiter werden als Datei auf der Festplatte abgelegt, die übrigen auf dem eingestellten Drucker ausgegeben. 47 Zum Abschluß folgt hier nun noch eine Übersicht über die Programme und Module. Ausdrücklich muß noch einmal daruf hingewiesen werden, das es sich bei den jeweiligen DataModule2 nicht um identische Module handelt. Bestandsverwaltung Leihverwaltung InvNrAbfr SachgebHinzu Cref BibVerw1 Main DataModule2 DataModule2 Borland Database Engine DataModule2 SQL-Server DataModule2 Main Mahnen Enleiher löschen Mahnen Abb. 27: Programmübersicht 48 5. Entwurf der WWW-Schnittstelle In diesem Kapitel wird die Benutzerschnittstelle für die WWW-Seite der Bibliothek vorgestellt. Außerdem wird auf die Realisierung der Webseiten eingegangen. 5.1 Die Benutzerschnittstelle Die Webschnittstelle bietet die Möglichkeit, nach den folgenden Einträgen zu suchen: • Inventarnummer • Autor, • Titel, • Erscheinungsjahr (≤,=,≥) • Erscheinungsort und • ISBN. Bei Angabe einer Inventarnummer werden alle anderen Angaben ignoriert, da die Inventarnummer eindeutig ist. Wird die Anfrage gestartet, so wird nach der Inventarnummer gesucht und alle zu diesem Buch gehörigen Informationen ausgegeben. Wird ein Autor gesucht, ist es nur nötig, die ersten Buchstaben des Nachnamen einzugeben, und es werden automatisch alle Autoren, die mit der Buchstabenkombination anfangen, gesucht. Bei der Suche nach einem Titel muß man einen Teilstring des Titels angeben, und es werden alle entsprechenden Bücher ausgegeben, hierbei werden auch die Verweise durchsucht. Um Bücher aus bestimmten Erscheinungsjahren zu suchen, kann man die Jahreszahl angeben und sich alle Bücher aus dem entsprechenden Jahr anzeigen lassen, oder die Suche auf die vorherigen oder nachfolgenden Jahre zu beschränken. Der Erscheinungsort wurde bei der Entwicklung dieser Datenbank als neues Informationsfeld aufgenommen und wird daher erst für Bücher eingetragen, die nach der Einführung dieser Datenbank und der zugehörigen Programme in der Bibliothek aufgenommen werden. Um Bücher nach Erscheinungsorten zu 49 suchen, ist es wiederum nur erforderlich, die ersten Buchstaben des Erscheinungsortes anzugeben. Die ISBN-Nummer muß bei der Suche exakt eingegeben werden. Teilstrings oder der Anfangsteil einer ISBN-Nummer liefern kein Ergebnis zurück. Außerdem ist bei der Suche nach ISBN-Nummern zu berücksichtigen, daß nur etwa jedes dritte Buch diesen Eintrag in der Datenbank besitzt. Weiterhin kann man die Suche auf Bibliotheksteile einschränken (z.B. die Ausleihbibliothek oder die Kongreßbibliothek). Werden mehrere Felder des Anfrageformulars ausgefüllt, so wird nach allen Büchern gesucht, auf die diese Angaben zutreffen. Das Anfrageergebnis wird sortiert ausgegeben. Als Sortierung voreingestellt ist das Erscheinungsjahr in absteigender Reihenfolge. Der Benutzer kann die Sortierung nach einem der folgenden Merkmalen sowohl aufsteigend als auch absteigend wählen: • Inventarnummer • Autor • Titel • Erscheinungsjahr • Erscheinungsort • ISBN • Standort Außerdem kann man zwischen einer einfachen und erweiterten Ausgabe wählen. Bei der einfachen Ausgabe wird nur der erste Autor, sowie der Titel des Buch ausgegeben. Wird nach einem Autor gesucht, und wird dieser z.B. als zweiter Autor gefunden, so wird dieser zusätzlich ausgegeben. Entsprechend werden auch die Verweise durchsucht, und auch die erweiterten Verweise mit im Ergebnis ausgegeben. Bei der erweiterten Anzeige werden alle Informationen zu den jeweiligen Büchern angezeigt. Als alternative wird eine Sachgebietssuche angeboten. Hierbei muß zunächst ein Obersachgebiet ausgewählt werden. Anschließend werden die zugehörigen Untersachgebiete angezeigt. Auch hier kann das Suchergebnis nach den Angaben des Benutzers sortiert werden, sowie zwischen einer einfachen und erweiterten 50 Anzeige der Ergebnises gewählt werden. Die Bildschirmausgabe entspricht der Anzeige der anderen Suchfunktion. 5.2 Realisierung Im folgenden wird die Realisierung der Webschnittstelle erläutert. Hierbei wird unterschieden zwischen der Standardsuche und Sachgebietssuche. Die hier folgenden Codeauschnitte (HTML und VB-Script) wurden zur besseren Lesbarkeit anders formatiert. 5.2.1 Die Standardsuche Um die größtmögliche Kompatibilität in Webbrowsern zu bieten, werden nur einfache standardisierte HTML-Befehle genutzt. Somit ist die Recherche sowohl mit Grafik- als auch mit Textbrowsern möglich. Das Suchformular schickt die Formularinformationen bei Betätigen des „Suchen“-Buttons an den Webserver, und die zugehörige ASP-Seite wird auf dem Server ausgeführt (siehe Abb. 28). Das Suchformular besteht aus reinem HTML-Code, das mit der Methode POST die Eingaben an die nächste Webseite weiterreicht: <FORM ACTION="/searchresult.asp" METHOD="post"> <PRE> Inventarnummer : <INPUT NAME="Invnr" SIZE=5 MAXLENGTH=5> Autor : <INPUT NAME="Autor" SIZE=50 MAXLENGTH=50> Buchtitel : <INPUT NAME="Titel" SIZE=50 MAXLENGTH=50> Erscheinungsjahr : <SELECT NAME="VerJahr"> <OPTION>&lt;= <OPTION SELECTED> = <OPTION>&gt;= </SELECT> <INPUT NAME="Jahr" SIZE=4 MAXLENGTH=4> Erscheinungsort : <INPUT NAME="Ort" SIZE=50 MAXLENGTH=50> 51 ISBN Standort : <INPUT NAME="ISBN" SIZE=10 MAXLENGTH=10> : <SELECT NAME="Standort"> <OPTION SELECTED> Alle <OPTION> Pr&auml;senzbibliothek <OPTION> Pr&auml;senzbibliothek Gro&szlig;formate <OPTION> Ausleihbibliothek <OPTION> Lexika <OPTION> Seminarberichte <OPTION> Kongre&szlig;berichte <OPTION> Standexemplar <OPTION> Standexemplar Gro&szlig;formate </SELECT> <HR>Sortieren nach : <INPUT TYPE=radio NAME="sortieren" VALUE="Inventarnummer"> Inventarnummer <INPUT TYPE=radio NAME="sortieren" VALUE="Autor"> Autor <INPUT TYPE=radio NAME="sortieren" VALUE="Titel"> Titel <INPUT CHECKED TYPE=radio NAME="sortieren" VALUE="Erscheinungsjahr"> Erscheinungsjahr <INPUT TYPE=radio NAME="sortieren" VALUE="Erscheinungsort"> Erscheinungsort <INPUT TYPE=radio NAME="sortieren" VALUE="ISBN"> ISBN <INPUT TYPE=radio NAME="sortieren" VALUE="Standort"> Standort <INPUT TYPE=radio NAME="richtung" VALUE="ASC"> aufsteigend <INPUT CHECKED TYPE=radio NAME="richtung" VALUE="DESC"> absteigend <HR>Ergebnisanzeige : <INPUT CHECKED TYPE=radio NAME="Ergebnis" VALUE="normal"> normal <INPUT TYPE=radio NAME="Ergebnis" VALUE="erweitert"> erweitert <HR><INPUT TYPE="submit" VALUE="Suche abschicken"> <INPUT TYPE="reset" VALUE="Suchformular zur&uuml;cksetzen"> </FORM></PRE> 52 Abb. 28: Beispiel einer Webanfrage In diesem Suchformular werden die in 5.1 genannten Eingaben abgefragt und an den Webserver geschickt, der die ASP-Datei „searchresult.asp“ startet. Die ASPDatei wertet diese Variablen aus. Im folgenden wird nur Programmteile erklärt, welche die einfache Ergebnisanzeige erläutert. Auf Besonderheiten der erweiterten Ergebnisanzeige wird im einzelnen hingewiesen. Im einfachsten Fall wird nach einer Inventarnummer gesucht. Es wird dann das folgende VB-Script ausgeführt: 53 <% IF (Request.Form("Invnr")<>"") THEN DIM Invnr DIM BuchSQL DIM objConnection 'Variable für ODBC-Verbindung . ... invnr=Request.Form("Invnr") 'Speichern der Inventarnummer aus dem 'Formular in einer lokalen Variable. ... SET objConnection = Server.CreateObject("ADODB.Connection") objConnection.Open "DSN=Institutsbibliothek;UID=Internet" 'Öffnet die ODBC-Verbindung zur Datenbank . BuchSQL = "SELECT b.inventarnummer, b.erscheinungsjahr, b.erscheinungsort," BuchSQL = BuchSQL & "b.ISBN, b.standort, b.auflage, b.seitenzahl, i.status" BuchSQL = BuchSQL & "FROM buch b,inventur i WHERE (b.inventarnummer=" & Invnr & ") AND (b.inventarnummer=i.inventarnummer);" AutorSQL = "SELECT * FROM autoren WHERE inventarnummer=" & Invnr & ";" TitelSQL = "SELECT * FROM verweise WHERE inventarnummer=" & Invnr & ";" 'Formulieren der SQL-Anfragen . SET objBuch = Server.CreateObject("ADODB.Recordset") objBuch.Open BuchSQL, objConnection 'Datenbankabfrage durchführen . IF objBuch.BOF AND objBuch.EOF THEN 'Ist das Anfrageergebnis leer? ->Ja! %> <BR> <BIG>Es wurde kein Eintrag zur Inventarnummer <%=invnr%> gefunden!</BIG> <BR><BR> Zur&uuml;ck zur <A HREF="/search.htm">Suchseite</A> <% ELSE '-> Nein. SET objAutor = Server.CreateObject("ADODB.Recordset") objAutor.Open AutorSQL, objConnection SET objTitel = Server.CreateObject("ADODB.Recordset") objTitel.Open TitelSQL, objConnection 'Alle Autoren, sowie Titel und Verweise 'abfragen . <BIG> Anzeigen von Inventarnummer:</BIG> <%=Invnr%> <PRE> 54 <HR> Inventarnummer ... ... Status : <%=invnr%> : <%SELECT CASE objBuch("status") CASE "S" %>Am Standort<% CASE "E" %>Entliehen<% CASE ELSE %>Keine Information<% END SELECT%> <HR><BR><BR> Zur&uuml;ck zur <A HREF="/search.htm">Suchseite</A> </PRE> 'Ausgabe der Buchinformationen. <% END IF objBuch.Close objAutor.Close objTitel.Close SET objBuch = NOTHING SET objAutor = NOTHING SET objTitel = NOTHING 'Datenbankverbindung schließen und Datensätze ELSE ... 'löschen. 'Inventarnummer suchen Ende Wird nach anderen Einträgen als der Inventarnummer gesucht, so wird jeweils eine dazu passende SQL-Anfrage generiert und an den SQL-Server geschickt. Als Beispiel wird hier nach Büchern des Autor „Hardy“ mit dem Teiltitel „inequ“ gesucht, die ab 1970 erschienen sind. Tabellen2 = "buch b, inventur i, autoren a, verweise v" Ausgabe2 = "DISTINCT b.inventarnummer, b.erscheinungsjahr, b.isbn, b.erscheinungsort, b.standort, i.status, a.name, v.titel" Vergleich2 = "(b.inventarnummer=i.inventarnummer) AND " Vergleich2 = Vergleich2 & "(b.inventarnummer=a.inventarnummer) AND (a.autornummer=1) AND " Vergleich2 = Vergleich2 & "(b.inventarnummer=v.inventarnummer) AND (v.verweisnummer=1)" ' Autor suchen IF Autor<>"" THEN Ausgabe2 = Ausgabe2 & ", a2.name zweitautor" Tabellen2 = Tabellen2 & ", autoren a2" Vergleich2 = Vergleich2 & " AND (a2.inventarnummer=b.inventarnummer) AND 55 (a2.name like '" & Autor & "%')" END IF ' Titel suchen IF Titel<>"" THEN Ausgabe2 = Ausgabe2 & ", v2.titel Verweis" Tabellen2 = Tabellen2 & ", verweise v2" Vergleich2 = Vergleich2 & " AND (b.inventarnummer=v2.inventarnummer) AND (v2.titel LIKE '%" & Titel & "%')" END IF ' Jahr suchen IF Jahr<>"" THEN Suche2 = Suche2 & "Erscheinungsjahr" & VerJahr & Jahr Vergleich2 = Vergleich2 & " AND (b.erscheinungsjahr" & Verjahr & Jahr & ")" END IF ... SELECT CASE Standort .... CASE "Ausleihbibliothek" Vergleich2 = Vergleich2 & " AND (Standort='Ausleihbibliothek')" .... END SELECT 'Sortierung einstellen SELECT CASE sortieren .... CASE "Erscheinungsjahr" Sort2 = " ORDER BY b.erscheinungsjahr " & richtung & ";" .... END SELECT strSQLBuch2 = "SELECT " & ausgabe2 & " FROM " & tabellen2 & " WHERE " & vergleich2 & sort2 Das Öffnen der Datenbank sowie das Abschicken der Anfrage entspricht dem der Inventarnummeranfrage. Aus dieser Beispielanfrage wird somit die folgende SELECT-Anweisung für eine einfache Ergebnisanzeige generiert: SELECT DISTINCT b.inventarnummer, b.erscheinungsjahr, b.erscheinungsort, b.isbn, b.standort, i.status,a.name, v.titel, a2.name zweitautor, v2.titel Verweis FROM buch b, inventur i, autoren a, verweise v, autoren a2, verweise v2 WHERE (b.inventarnummer=i.inventarnummer) 56 AND (b.inventarnummer=a.inventarnummer) AND (a.autornummer=1) AND (b.inventarnummer=v.inventarnummer) AND (v.verweisnummer=1) AND (a2.inventarnummer=b.inventarnummer) AND (a2.name like 'hardy%') AND (b.inventarnummer=v2.inventarnummer) AND (v2.titel LIKE '%inequ%') AND (b.erscheinungsjahr>=1970) AND (Standort='Ausleihbibliothek') ORDER BY b.erscheinungsjahr DESC; Um auch Bücher zu finden, bei dem der gesuchte Autor nur als zweiter oder dritter Autor vorhanden ist, mußte hier zweimal die Relation Autoren aufgenommen werden. Die erste Relation Autoren wird für die Ausgabe des Erstautors sowie für die Sortierung bei der Ausgabe benötigt. Die zweite wird für die eigentliche Suche genutzt. Aus dem gleichen Grund wird auch die Relation Verweise zweimal benötigt. Der gefundene Eintrag wird in der Ergebnisanzeige auf jeden Fall mit ausgegeben. Bei den Autoren wird dieser durch ein Komma getrennt an den Erstautor angehängt. Bei den Verweisen wird eine zusätzliche Zeile hinzugefügt. Abb. 29: Einfache Anzeige des Suchergebnises Bei der erweiterten Suche wird die folgende SELECT-Anweisung ausgeführt: SELECT distinct b.inventarnummer, b.erscheinungsjahr, b.erscheinungsort, b.isbn, b.standort, i.status FROM buch b, inventur i,autoren a, verweise v 57 WHERE AND AND AND AND AND AND ORDER (b.inventarnummer=i.inventarnummer) (a.name like 'hardy%') (a.inventarnummer=b.inventarnummer) (b.inventarnummer=v.inventarnummer) (v.titel LIKE '%inequ%') (b.erscheinungsjahr>=1970) (Standort='Ausleihbibliothek') BY b.erscheinungsjahr DESC; Hier werden die Realtionen Autoren und Verweise nur für die Sortierung benötigt. Bei der Ausgabe wird zu jeder gefundenen Inventarnummer eine einzelne SQL-Anfrage durchgeführt, um alle Autoren und Verweise anzuzeigen. SELECT autornummer, name FROM autoren WHERE (inventarnummer=21181) ORDER BY autornummer; SELECT verweisnummer, titel FROM verweise WHERE (inventarnummer=21181) ORDER BY verweisnummer; Die Autoren werden hierbei durch Kommas getrennt hintereinander ausgegeben. Da nicht zu allen Büchern ein Autor in der Datenbank existiert, kann diese Zeile bei einem Suchergebnis fehlen. 5.2.2 Die Sachgebietssuche Die ASP-Datei „sachsearch1.asp“ generiert das Formular für die Obersachgebietsauswahl (siehe Abb. 30). Abb. 30: Sachgebietssuche (Teil 1) 58 <FORM ACTION="/sachsearch2.asp" METHOD="post"> <PRE>Obersachgebiet : <SELECT NAME="Obersachgebiet"> <% DIM strSQLSach DIM objConnection DIM objSach strSQLSach = "SELECT sachgebietsname FROM sachgebietsschluessel WHERE " strSQLSach = strSQLSach & "(sachgebietsnummer=(Sachgebietsnummer(Sachgebietsnummer % 100))) ORDER BY Sachgebietsname;" SET objConnection = Server.CreateObject("ADODB.Connection") objConnection.Open "DSN=Institutsbibliothek;UID=Internet" SET objSach = Server.CreateObject("ADODB.Recordset") objSach.Open strSQLSach, objConnection DO WHILE NOT objSach.EOF%> <OPTION><%=objSach("Sachgebietsname")%> <% objSach.MoveNext LOOP objSach.Close SET objSach = NOTHING %> </SELECT><BR> Nach Ihrer Auswahl geht es hier <INPUT TYPE="submit" VALUE="weiter"> </FORM> Durch die SELECT-Anweisung werden zunächst alle Obersachgebiet aus der Datenbank ausgewählt und in das HTML-Formular eingefügt. Nach der Auswahl des Obersachgebiets werden von der nächsten ASP-Seite alle zugehörigen Untersachgebiete dazu angezeigt, und der Benutzer kann wie bei der Standardsuchseite eine Sortierung vornehmen (siehe Abb. 31). 59 Abb. 31: Sachgebietssuche (Teil 2) Für die Anzeige kann auch hier zwischen einer einfachen und erweiterten Ausgabe gewählt sowie die Sortierung eingestellt werden. Mit eine SELECT-Anweisung werden jetzt alle Bücher aus der Datenbank angezeigt, die zu dieser Sachgebietsnummer gehören. SELECT distinct b.inventarnummer, b.erscheinungsjahr, b.erscheinungsort, b.ISBN, b.standort, i.status FROM buch b, inventur i, sachgebietsschluessel s, gehoertzusachgebiet g WHERE (s.sachgebietsnummer>=9500) AND (s.sachgebietsnummer<9600) AND (s.sachgebietsname='PROGRAMMIERSPRACHEN') AND (s.sachgebietsnummer=g.sachgebietsnummer) AND (g.inventarnummer=b.inventarnummer) 60 AND (b.inventarnummer=i.inventarnummer) ORDER BY b.Erscheinungsjahr DESC; Abb. 32: Ergebnis der Sachgebietssuche 61 6. Ausblicke und Anmerkungen Zum Abschluß möchten wir hier mögliche Erweiterungen darstellen sowie Anmerkungen zur benutzten Software geben. 6.1 Mögliche Erweiterungen der Datenbank und Schnittstellen Als Erweiterung sind noch Katalogdrucke möglich, z.B. Inventarnummernkatalog, Autorenkatalog und Titel-/Verweiskatalog für die jeweiligen Bibliotheksräume. Außerdem könnte man ein separates Programm zur Inventur sowie der Auswertung erstellen. Die hierfür nötigen Felder sind in der Datenbank bereits vorhanden. Denkbar, jedoch nur mit viel Zeitaufwand realisierbar, wäre auch eine Aufnahme von Preprints in den Datenbestand. Der Aufwand entsteht hier allerdings weniger beim Anpassen der Datenbank, sondern vielmehr bei der Erfassung der vorhandenen Preprints, da bisher noch kein Verzeichnis in elektronischer Form existiert. Fernziel könnte sein, daß die Benutzer ihre Ausleihen selbständig an einem Terminal in der Datenbank eintragen können, hierzu müßten allerdings erst entsprechende Kontrollmechanismen eingeführt werden, da sonst ein Bücherschwund in der Bibliothek zu befürchten ist. 6.2 Erfahrungen mit dem Microsoft SQL-Server 6.5 Bei der Konvertierung der alten Daten wurde die Datenbank unverhältnismäßig groß. Dieses liegt an der nicht optimalen Speicherung der Datensätze in der Datenbank. Bis zu diesem Zeitpunkt haben wir nur die Möglichkeit gefunden, den Speicherplatz zu optimieren, indem man die Daten in eine andere Datenbank umkopiert. 62 Während der Entwicklung der WWW-Schnittstelle ist es bei verschachtelten SELECT-Anweisung an den SQL-Server zu langen Wartezeiten gekommen. Wie sich herausstellte, optimierte der SQL-Server diese Anfragen nicht, obwohl keine Abhängigkeiten zwischen den inneren und äußeren SELECT-Anweisung bestanden. Daher wurde die WWW-Schnittstelle zugunsten einer unverschachtelten SELECT-Anweisung umgestellt. 63 Anhang A: Beschreibung der einzelnen Prozeduren Im folgenden werden die einzelnen Prozeduren nach Modulen (Units) sortiert kurz erläutert. Sie dienen, wie bereits oben erwähnt, der Reaktion auf bestimmte Ereignisse, die Prozedurnamen sind so gewählt, daß man sie leicht einem Ereignis zuordnen kann. A.1 Die Konvertierungsprogramme A.1.1 Der Bibliothekskonverter (main.pas) procedure FormCreate Öffnet die Datenbankverbindungen. procedure UpdateFields Aktualisiert die Einträge auf dem Bildschirm. procedure ButtonEndeClick Schließt die Datenbankverbindungen und beendet das Programm. Procedure ButtonStartConvertClick Startet den Konvertierungsdurchgang. A.1.2 Der Ausleihkonverter (mainkonv.pas) procedure FormCreate Öffnet die Datenbankverbindungen. 64 procedure ButtonEndeClick Schließt die Datenbankverbindungen und beendet das Programm. procedure UpdateFields Aktualisiert die Einträge auf dem Bildschirm. procedure ButtonStartClick Startet die Konvertierung. procedure Sichern Speichert die Datensätze in der neuen Datenbank procedure ButtonSpringenClick Überspringt einen Datensatz, um diesen nicht in der Datenbank zu speichern. function Crefconvert Ersetzt alle deutschen Sonderzeichen in der Crossreferenz, wie z.B. „ä“ durch „ae“ oder „ß“ durch „ss“. A.3 Die Bibliotheksverwaltung A.3.1 (datamodule1.pas) In der Bibliothek datamodule1.pas werden die für die Datenbankanwendung benötigten Funktionen bereitgestellt. procedure TableBuchAfterScroll Wird nach dem Wechsel zu einer anderen Zeile in der Buchtabelle automatisch aufgerufen. Ruft ihrerseits die Prozedur UpdateFields auf. 65 procedure QueryAutorNewRecord Sorgt beim Einfügen eines neuen Autors dafür, daß dieser eine fortlaufende Verweisnummer erhält. procedure QueryVerweiseNewRecord Wie QueryAutorNewRecord. procedure UpdateFields Sorgt dafür, daß die zum aktuellen Buch gehörenden Autoren, Verweise und Sachgebiete angezeigt werden. A.3.2 (bibverw1.pas) Dies ist das Hauptmodul der Bücherverwaltung. Es erzeugt das Hauptfenster der Anwendung und ist gleichzeitig die zentrale Steuerung des Programms. procedure ButtonVorClick Springt um ein Buch vor procedure ButtonZurückClick Springt um ein Buch zurück procedure ButtonAendernClick Versetzt die aktuellen Datensätze in den Editiermodus und erlaubt damit das Ändern der angezeigten Daten. Gleichzeitig werden alle Button außer „Änderung verwerfen“ und „Änderung speichern“ deaktiviert und ihr Status gespeichert. Desweiteren wird an die Datenbank ein „Start Transaction“ gesendet. 66 procedure ButtonAnderungVerwerfenCick Führt ein Rollback auf der Datenbank aus, beendet den Editiermodus und aktualisiert die Anzeige, zusätzlich werden alle Buttons in den Zustand vor dem Editieren versetzt. procedure ButtonAenderungSpeichernClick Führt ein Commit auf der Datenbank aus, sonst wie ButtonAenderungVerwerfenClick. procedure ButtonNeuesBuchClick Legt ein neues „Buch“ an und dazu einen neuen „Autor“ und einen neuen „Titel“, danach wird ButtonAendernClick aufgerufen. procedure ButtonAutorHinzufuegenClick Legt einen neuen Autor an und ruft ButtonAendernClick auf. Zu beachten ist hierbei, daß durch das Anlegen eins neuen Autors automatisch die Prozedur datamodule1.QueryAutorNewRecord aufgerufen wird. procedure ButtonTitelHinzufuegenClick Wie ButtonAutorHinzufügenClick. procedure ButtonZuInvNrSpringenClick Öffnet ein Fenster, indem der Benutzer zur Eingabe einer Inventarnummer aufgefordert wird. Ist diese vorhanden, so springt die Anzeige zum neuen Buch, sonst wird der alte Datensatz beibehalten. procedure ButtonSachgebiethinzufuegenClick Öffnet ein Fenster, indem eine Sachgebietsnummer eingegeben werden kann, zur Kontrolle wird gleichzeitig das neue Sachgebiet angezeigt. Bricht der Anwender die Eingabe ab, so wird kein Sachgebiet hinzugefügt. 67 A.4 Das Leihprogramm A.4.1 (main.pas) procedure FormCreate Öffnet die Datenbank und initialisiert die Datumsvariablen mit den für heute geltenden Leihfristen für normale bzw. Semsterleihe. procedure MaskEditInvNrKeyPress Reagiert auf die Eingabetaste und überprüft, ob das Buch in der Datenbank vorhanden und ob es entliehen ist, aktualisiert die Anzeige und springt weiter zum Feld Ausleihart. procedure EditArtKeyPress Reagiert auf die Tasten R,V,S,N,D mit dem Eintrag der entsprechenden Art in das Feld und führt die Aktionen Rückgabe, Verlängerung oder Verlängerung bis Semsterende direkt aus und springt danach zur Inventarnummerneingabe, sonst zur Cref-Eingabe. procedure EditCrefKeyPress Überprüft nach Druck auf die Eingabetaste ob die Cref in der Datenbank vorhanden ist, fragt sie sonst mit Hilfe von (cref.pas) ab und führt danach die Aktionen ‚normale Ausleihe‘, Semsterleihe oder Dauerleihe aus und springt zur Inventarnummerneingabe. 68 procedure ButtonEntleiherBearbeitenClick Fragt mit Hilfe von (cref.pas) die zu aktualisierenden Daten ab. procedure ButtonCloseClick Beendet das Programm. A.4.2 (cref.pas) procedure ButtonOKClick Überprüft, ob die Eingaben korrekt sind und schließt dann das Fenster. procedure ButtonAbbrechenClick Bricht die Eingabe ab. procedure EditCrefKeyPress Sorgt nach einem Druck auf die Eingabetaste für das Weiterspringen zur nächsten Eingabe. Die entsprechenden, hier nicht aufgeführten, KeyPress-Funktionen der anderen Eingabefelder erfüllen dieselbe Funktion. procedure FormKeyPress Bricht die Eingabe nach Druck auf die Esc-Taste ab. A.5 Das „Entleiher löschen“ Programm (main.pas) procedure DBGrid1DblClick; Ist in 4.3.3 ausführlich beschrieben. 69 A.6 Das Mahnprogramm (Mahnen.pas) procedure Mahnen; Erstellt die Mahnungen. Hierzu wird zunächst eine Liste aller zu mahnenden Personen abgefragt (QueryMahnungAn), anschließend werden die einzelnen Mahnungen erstellt (QueryWelcheBuecher). procedure ButtonStartClick; Übernimmt den Drucker aus der Druckerauswahl und ruft die Prozedur Mahnen auf. 70 Abbildungsverzeichnis Abb. 1: Die Delphi-Oberfläche...........................................................................8 Abb. 2: Der SQL-Explorer .................................................................................9 Abb. 3: Zugriffsweg vom Anwendungsprogramm auf den SQL-Server ............ 11 Abb. 4: Ein TTable-Objekt, verbunden mit der Tabelle „Buch“ in der Datenbank „Institutsbibliothek“........................................................... 12 Abb. 5: Die Microsoft Management Konsole.................................................... 13 Abb. 6: ER-Schema Übersicht.......................................................................... 19 Abb. 7: Der Entitytyp Buch .............................................................................. 20 Abb. 8: Der Entitytyp Entleiher ........................................................................ 21 Abb. 9: Neues Datenbankmedium erstellen ...................................................... 27 Abb. 10: Neue Datenbank erstellen .................................................................. 28 Abb. 11: Wiederherstellen der mitgelieferten leeren Datenbank........................ 28 Abb. 12: Benutzer erstellen .............................................................................. 29 Abb. 13: Die ODBC-Schnittstelle..................................................................... 30 Abb. 14: Das Startprogramm ............................................................................ 31 Abb. 15: Die Passworteingabe.......................................................................... 31 Abb. 16: Der Bibliothekskonverter................................................................... 32 Abb. 17: Der Ausleihkonverter......................................................................... 33 Abb. 18: Die Bibliotheksverwaltung................................................................. 34 Abb. 19: Zu Inventarnummer springen ............................................................. 34 Abb. 20: Sachgebiet hinzufügen ....................................................................... 35 Abb. 21: Neues Buch hinzufügen ..................................................................... 36 Abb. 22: Das Leihprogramm ............................................................................ 37 Abb. 23: Entleiherdaten bearbeiten................................................................... 38 Abb. 24: Entleiher löschen ............................................................................... 39 Abb. 25: Die Sicherheitsabfrage ....................................................................... 39 Abb. 26: Das Mahnprogramm .......................................................................... 40 Abb. 27: Programmübersicht............................................................................ 48 Abb. 28: Beispiel einer Webanfrage ................................................................. 53 Abb. 29: Einfache Anzeige des Suchergebnises................................................ 57 Abb. 30: Sachgebietssuche (Teil 1) .................................................................. 58 Abb. 31: Sachgebietssuche (Teil 2) .................................................................. 60 Abb. 32: Ergebnis der Sachgebietssuche........................................................... 61 71 Literaturverzeichnis Borland Handbücher und Dokumentation zu Delphi 3 Client/Server Borland Gerald Deutsch, Michael Groß, Karsten Richter, Markus Richter Das große Buch – Delphi 3 Data Becker ISBN 3-8158-1205-4 Michael Ebner Delphi 3.0 Datenbankprogrammierung: Entwicklung leistungsfähiger Datenbankanwendungen Addison-Wesley ISBN 3-8273-1315-5 Scott Hillier, Dan Mezick, New Technology Solution, Inc. Active Server Pages – Programmierung Microsoft Press ISBN 3-86063-449-6 Andreas Kosch Delphi-3-Datenbankentwicklung: Grundlagen relationaler Datenbanken Franzis ISBN 3-7723-4033-4 Udo Lipeck Skript zur Vorlesung Datenbanksysteme 1+2 (WS97/98 SS98) Begleitmaterial zum Oracle/SQL-Kurs Universität Hannover 72 Stefan Münz SelfHTML http://www.netzwelt.com/selfhtml/ Edwin Schicker Datenbanken und SQL B.G. Teubner Stuttgart ISBN 3-519-02991-X 73