Makros und Programme einsetzen Datenbank-Programmierung und Oberflächenprogrammierung |
Top Previous Next |
TurboPL beinhaltet eine große Menge an Funktionen, mit denen Daten aus Tabellen bearbeitet werden können. Zu diesen Funktionen gehören unter anderen:
Daneben gibt es eine andere Gruppe von Funktionen, die auf den ersten Blick eine ganz ähnliche Wirkung haben:
und eine ganze Reihe weiterer Befehle. Diese Funktionen sind in der Referenz unter Benutzerschnittstelle zu finden. Zwischen diesen beiden Gruppen von Funktionen besteht aber ein fundamentaler Unterschied: Datenbank-Befehle arbeiten rein auf den Daten-Tabellen also intern während Oberflächen-Funktionen rein auf den Formularen arbeiten und keinen Einfluss auf die Datenbank-Tabellen selbst haben. Das kann man auch daran erkennen, dass Oberflächenfunktionen nur ausgeführt werden können, wenn ein passendes Formular geöffnet ist, und dass sie sich immer auf ein bestimmtes Formular beziehen. Datenbank-Befehle dagegen können immer ausgeführt werden, da sie in der Datenbank selbst ablaufen. Programme, die mit eine .NET-Sprache oder mit Delphi geschrieben sind und TurboDB einsetzen, können Datenbank-Befehle benutzten. Oberflächenfunktionen dagegen sind spezifisch für TurboDB Studio. Den Unterschied zwischen den beiden Gruppen erkennt man auch an ihren Parametern: Datenbank-Befehle haben als ersten Parameter meistens einen Tabellennamen (manchmal einen Feldnamen). Oberflächenfunktionen haben keinen solchen Parameter. Sie beziehen sich entweder auf das gerade aktive Datenfenster in der Benutzeroberfläche oder werden als Methoden von Datenfenstern aufgerufen. Also: ReadRec(MYTABLE, 3) aber ShowRec(80) ..Zeigt Datensatz 80 im aktiven Datenfenster an Jedes Formular legt für jede Tabelle, aus der es Daten anzeigt einen Cursor an. Das ist ein Puffer, in dem der aktuellen Datensatz gespeichert ist und auch die Sortierung und die Auswahl. Wenn für eine Tabelle drei Formulare geöffnet sind, dann gibt es dazu auch drei getrennte Cursors mit den jeweiligen Einstellungen. Das ist auch nötig, weil in diesen drei Formularen unterschiedliche Sortierungen, Auswahlen und Datensätze eingestellt werden können. Zusätzlich gibt es noch einen Cursor pro Tabelle für die Datenbank-Befehle. In der folgenden Grafik sind die Cursors blau dargestellt und die Datenbank-Tabellen grün. In der oberen Reihe sieht man zwei Formulare, die beide sowohl TAB1 als auch TAB2 darstellen sowie ein Programm mit Datenbank-Befehlen. Die Folge dieser Zweiteilung ist, dass Sie Datenbank-Befehle und Oberflächenfunktionen nicht mischen können, auch wenn das manchmal naheliegend wäre. Die folgende Kombination ist zum Beispiel sinnvoll: Access(MYTABLE, 'KundenNachName'); Nach dieser Sequenz ist derjenige Datensatz aktuell, dessen Kundenname im Alphabet der erste ist. Dieser Datensatz ist deshalb aber noch nicht in einem Formular angezeigt. Sinnvoll ist auch das: SetSortOrder('KundenNachName'); Hier wird der alphabetisch erste Datensatz im Formular zum aktuellen gemacht. Nicht sinnvoll ist dagegen: Access(MYTABLE, 'KundenNachName'); Der erste Befehl arbeitet auf der Datenbank, der zweite auf dem aktiven Formular. Angezeigt wird der Datensatz, der bezüglich der für dieses Formular gültigen Sortierung als erster kommt. Diese Sortierung ist nur dann KundenNachName, wenn sie vorher vom Anwender oder durch das Programm mit SetSortOrder so eingestellt wurde. Ebenso wenig Sinn macht: SetSortOrder('KundenNachName'); Der gelesene Datensatz richtet sich wahrscheinlich nicht nach KundenNachName, sonder nach dem was zuvor mit Access eingestellt wurde. Eine andere beliebte aber dennoch falsche Mischung ist: BySelection('Betrag > 300000', 1, 1); Weil die zweite Funktion auf einem anderen Cursor arbeitet als die erste, liefert NMarks nicht die Anzahl der in BySelection gefunden Datensätze. Manchmal stimmt die Zahl zwar trotzdem, weil intern Datenbank-Befehle zur Implementierung der Oberflächenbefehle benutzt werden, aber Sie können und dürfen sich nicht darauf verlassen. Um die Programmierung von Anwendungen zu vereinfachen, gibt es zwei Verbindungen zwischen den Formular-Cursors und der Datenbank:
Nach dem bisher gesagten, gibt es drei verschiedene Muster für TurboPL-Prozeduren, die aus einem Formular aufgerufen werden:
Wann verwendet man nun Datenbank-Befehle und wann Oberflächenfunktionen? Im Grunde ist die Antwort einfach und eine logische Folgerung aus dem bisher Beschriebenen. Wenn Sie einfache, Formular-bezogene Befehle ausführen wollen, sollten Sie Oberflächenfunktionen verwenden. Für alle umfangreicheren Änderungen an Datensätzen, komplexe Suchen, Aufbereiten von Berichten und Reports usw. sind Datenbank-Befehle die einzige sinnvolle Wahl. Um das Ergebnis einer solchen Aktion im Formular sichtbar zu machen, verwenden Sie Attach. Wenn Sie diese Zusammenhänge etwas komplex finden, ist das nicht verwunderlich. Die Zusammenhänge sind komplex. Experimentieren Sie ein bisschen mit einem richtigen Projekt herum, dann wird es klarer werden. |