Gliederung und Einordnung 1. Objektorientierte Programmierung mit Object Pascal (5. Studienbrief, Kapitel 5) 9.4. + 16.4. 2. Software-Bausteine am Beispiel der Delphi-Komponenten (5. Studienbrief, Kapitel 5) 23.4. 3. Datenbankprogrammierung: Prinzipien und Beispiele (5. Studienbrief, Kapitel 6) 30.4. + 7.5. 4. Einordnung, Ausblick, Klausurvorbereitung Technische Universität Dresden Prof. Hußmann 14.5. Informatik II (Maschinenwesen) Delphi-Datenbankkomponenten • Programm "Datenbankoberfläche": – Erstellung der Datenbankstruktur – Experimente mit der Datenbankstruktur (QBE-Anfragen) – Testhilfsmittel • Datenbankkomponenten: – Erstellung von durch Laien benutzbaren Windows-Programmen zur Dateneingabe und Datenbankabfrage – Spezielle Programmbibliothek zum Erstellen von Datenbankanwendungen • Datenbankkkomponenten nutzen das (objektorientierte) Komponenten-Konzept von Delphi. – Kleinere Anwendungen erstellbar ohne Schreiben von ObjectPascalQuellcode – ObjectPascal-Anteile meist klein und lokal für einzelne Komponenten Technische Universität Dresden Prof. Hußmann Seite 1 Informatik II (Maschinenwesen) Typen von Datenbankkomponenten • Datenzugriff – Nichtvisuelle Komponenten – Repräsentation von Datenbanktabellen in der Entwicklungsumgebung – Beispiele: » Table » DataSource » Query • Datensteuerung: – – – – Visuelle Komponenten Datensensitive Bedienungselemente Müssen an Datenzugriffskomponenten gekoppelt werden Beispiele: » DBGrid » DBEdit » DBNavigator Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen) Pipelining-Prinzip Data Set Table Data Source Data Access Query DataSource DBGrid DBEdit DBNavigator Technische Universität Dresden (SQL) Prof. Hußmann Seite 2 QuickReport Informatik II (Maschinenwesen) Entwicklungsschritte einer einfachen Datenbankanwendung • Table-Komponente einfügen – Property "DatabaseName": Pfadname für Datenbank-Datei – Property "TableName": Datenbank-Datei (z.B. Stadt.db) – Hinweis: Höhere Flexibilität durch Einlesen aus Feldern oder durch Verwenden von Alias-Namen • DataSource-Komponente einfügen – Property "DataSet": Entsprechende Table-Komponente • Oberfläche mit Datensteuerungs-Komponenten entwerfen (z.B. nur ein DBGrid) – Property "DataSource": entsprechende DataSource-Komponente • Property "Active" der Table-Komponente auf "true" setzen – Datenbankzugriff erfolgt (zur Entwurfszeit) • Programm übersetzen und starten – Datenbankzugriff erfolgt (zur Laufzeit) Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen) Projekt TABELLENANZEIGE • Programm zur Anzeige einer beliebigen Datenbanktabelle • Datenbankkomponenten: – Table (Table1), DataSource, DBGrid (wie bisher) – Table-Komponente noch nicht "Active" schalten • Standardkomponenten: – Zwei Edit-Felder (PfadEdit und DBTabelleEdit) – Eine Schaltfläche (DatenbankOeffnungButton) • Code für DatenbankOeffnungButton: procedure TForm1.DatenbankOeffnungButtonClick (Sender: TObject); begin Table1.DatabaseName:=PfadEdit.Text; Table1.TableName:=DBTabelleEdit.Text; Table1.Active:=true; end; Technische Universität Dresden Prof. Hußmann Seite 3 Informatik II (Maschinenwesen) Projekt STAHLDB • NavigatorLeiste – DBNavigator • StatistikFunktionen – Satzzeiger – Durchlauf durch alle Datensätze Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen) Realisierung von Statistik in STAHLDB procedure TForm1.StatistikButtonClick(Sender: TObject); var Anzahl, SumStreckgr: integer; SumZugf, SumBruc: Double; begin Anzahl:=0; SumStreckgr:=0; SumZugf:=0; SumBruc:=0; Table1.First; while not Table1.EOF do begin Anzahl:=Anzahl+1; SumStreckgr:=SumStreckgr+Table1.Fields[2].AsInteger; SumZugf:=SumZugf+((Table1.Fields[3].AsInteger+ Table1.Fields[4].AsInteger)/2); SumBruc:=SumBruc+((Table1.Fields[5].AsInteger+ Table1.Fields[6].AsInteger)/2); Table1.Next; end; AnzahlEdit.Text:=IntToStr(Anzahl); DStreckgrEdit.Text:=SumStreckgr/Anzahl; //(X) DZugfEdit.Text:=SumZugf/Anzahl; //(X) DBruchdEdit.Text:=SumBruc/Anzahl; //(X) end {TForm1.StatistikButtonClick}; // (X) "FormatFloat"-Aufrufe hier weggelassen... Technische Universität Dresden Prof. Hußmann Seite 4 Informatik II (Maschinenwesen) Direkte Datenbankoperationen • Für eine Tabelle (Objekt vom Typ TTable) kännen in Delphi auch direkt in ObjectPascal Abfragen und Modifikationen durchgeführt werden. – Eine genaue Liste der Methoden liefert die Delphi-Online-Hilfe unter dem Stichwort "TTable". • Beispiele für Methoden von TTable: – Open: Äquivalent zum Setzen der Property "Active" auf true – First, Next, EOF, Last, Prior, BOF: Zugriff über Satzzeiger (sh. separate Folie) – Edit: Setzt Editiermodus für Tabelle – Post: Schreibt modifizierten Datensatz zurück in die Tabelle • Zugriffe auf aktuelle Datenfeldwerte der Tabelle (an der aktuellen Satzzeigerposition): – <Tabellenname>['<Feldname>'] (Zugriff über Feldname) – <Tabellenname>.Fields[<integer>] (Zugriff über lfd. Nummer des Feldes, mit 0 beginnend) Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen) Virtuelle Felder • Werte für virtuelle Felder einer Tabelle werden indirekt ermittelt • Hinzufügen "virtueller Felder" zu einer Table-Komponente: – Feldeditor für Table öffnen (Kontextmenü, d.h. rechte Maustaste) – Funktionen im Feldeditor wieder über Kontextmenü • Arten virtueller Felder: – Berechnete Felder – Fremdschlüssel-Zugriff (Lookup) » Tabellenverbindung herstellen • Nach geeigneter Konfiguration können virtuelle Felder wie normale Datenfelder genutzt werden • Wichtiger Anwendungszweck: – Verknüpfung von Tabellen Technische Universität Dresden Prof. Hußmann Seite 5 Informatik II (Maschinenwesen) Projekt DINSTAHL • Zugriff auf Tabellen "Stahlsorten" und "Normen" • Virtuelles Feld "DIN Bezeichnung" muß zur Tabelle "Stahlsorten" hinzugefügt werden – Wert ermittelt über Nachschlagen in NormenTabelle gemäß dem ENEintrag Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen) Virtuelles Feld "DIN Bezeichnung" Technische Universität Dresden Prof. Hußmann Seite 6 Informatik II (Maschinenwesen) Datenbanksprache SQL • Structured Query Language – 70er Jahre, Ursprung IBM – Standardisiert (ANSI) • Verwendungsarten: – Direkte Kommandosprache für relationale Datenbanksysteme – Einbettung in Datenbankkomponenten (Delphi-Komponente Query) – Einbindung in Quellcode verschiedener Programmiersprachen, z.B. COBOL, C, Java » "EXEC SQL <SQL-Text>" Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen) SELECT-Anweisungen in SQL • Syntax: SELECT <Feldliste> FROM <Tabellenliste> WHERE <Einschränkende Bedingung> • Beispiele: SELECT Werkstoffnr, Streckgrenze FROM Stahlsorten SELECT Werkstoffnr, Streckgrenze FROM Stahlsorten WHERE Streckgrenze > 250 SELECT Werkstoffnr, Streckgrenze, DIN FROM Stahlsorten, Normen WHERE Stahlsorten.ENBezeichnung = Normen.EN Technische Universität Dresden Prof. Hußmann Seite 7 Informatik II (Maschinenwesen) SQL-Anfragen in Datenbankkomponenten • Query-Komponente – Datenzugriffskomponente – Ähnlich einzusetzen wie Table-Komponente – Enthält SQL-Text (dadurch sehr flexibel) • Entwicklungsschritte: – Query-Komponente einfügen » Property "DatabaseName": Pfadname für Datenbankdatei » SQL-Text eintragen – DataSource-Komponente einfügen » Property "DataSet": entsprechende Query-Komponente – Nutzung der DataSource in Oberflächen-Elementen – Property "Active" der Query-Komponente auf "true" setzen » Datenbankzugriff erfolgt (zur Entwurfszeit) – Programm übersetzen und starten » Datenbankzugriff erfolgt (zur Laufzeit) Technische Universität Dresden Prof. Hußmann Informatik II (Maschinenwesen) Schriftliche Berichte erstellen • Ein wesentlicher Zweck von Datenbanken ist die Erstellung schriftlicher Berichte: – Gehaltslisten, Statistiken, Bestellungen, Rechnungen, ... • Sogenannte "QuickReport"-Komponenten ermöglichen eine schnelle interaktive Erstellung dieser speziellen Abfragen. • Arbeitsschritte: – QuickRep-Komponente einfügen » Property "Bands": Gewünschte Teilbereiche » Property "DataSet": Tabelle für Gesamtliste – Weitere QuickReport-Komponenten einfügen und konfigurieren: » QRLabel: Überschriften, Texte » QRDBText: Wiedergabe von Datenfeldinformation • Property "DataSet": Tabelle für dieses Datenfeld • Property "DataField": Entsprechendes Datenfeld » QRExpr: Berechnen von Ausdrücken über Datenbestand • Interaktiver Editor Technische Universität Dresden Prof. Hußmann Seite 8 Informatik II (Maschinenwesen)