#! /home/invep/src/invep/invep
! SQL_Query.obas (c) Andre Koppel Software 2012
! Dieses kleine Programm verwendet SQL-Anweisungen, um die
! Struktur einer Tabelle sowie die Daten einer Tabelle
! auszulesen
DIM descr$[1000],d$[20000],elem$[80],r$[20000]
! mit DISPLAY IS definieren wir ein eigenes Ausgabefenster
! Wenn wir die Ausgabe in diesem Fenster sehen wollen,
! so kommentieren wir die Zeile einfach aus
DISPLAY IS MESSAGE WINDOW
CLRSCR
! Die abzufragenden Daten
name$="glb_ford_anm"
! Die Start- und Endnummern setzen wir hier auf einen beliebigen
! Anfangswert. Die Werte müssen natürlich an die eigenen
! Bedürfnisse angepasst werden
StartSnr=100
EndSnr=110
IsDescription=0
descr$=SQL GET TABLE DESCRIPTION$(name$)
n=LIST LEN(descr$)
IF IsDescription THEN
DISP "SQL-Beschreibung der Tabelle " name$ " Anzahl: " n "\n"
DISP descr$ "\n"
END IF
r$=SQL QUERY$(name$ ; "" ; "snr>=" & VAL$(StartSnr)
r$=r$ & " AND snr<=" & VAL$(EndSnr))
AnzahlDatensaetze=LIST LEN(r$)
DISP RPT$("-",80) "\n"
DISP "Anzahl Datensätze: " AnzahlDatensaetze "\n"
IF IsDescription THEN
DISP r$ "\n"
END IF
DISP RPT$("-",80) "\n"
! Als Ergebnis eines Query-Kommandos bekommen wir immer eine
! Liste, die weitere Listen enthält. Die innersten Listen
! sind die einzelnen Datensätze.
! Wir erzeugen also zwei Schleifen. In der äußeren Schleife
! extrahieren wir einen Datensatz aus der Gesamtliste. Dann
! ermitteln wir die Anzahl der Elemente in der Ergebnisliste.
! Dabei gehen wir von der Annahme aus, dass ein Element immer
! dann vorhanden ist, wenn das entsprechende Listenelement eine
! Länge > 0 Bytes hat. Als nächstes zeigen wir die Element mit
! ihrer jeweils zugehörigen Beschreibung an.
! Damit das ganze etwas netter aussieht, formatieren wir die
! Ausgabe mit der USING-Anweisung
FOR OLoop=1 TO AnzahlDatensaetze
d$=LIST GET$(r$;OLoop)
n=LIST LEN(d$)
! Wir ermitteln, wie viele Elemente im Datensatz nicht leer
! sind
nelements=0
FOR i=1 to n
IF SLEN(LIST GET$(d$ ; i))>0 THEN nelements=nelements+1
NEXT
DISP USING "KXDDDDDXKDDL" : "Datensatz " OLoop+1 " Anzahl Elemente: " nelements
! Nun geben wir die Elemente eines Datensatzes schön formatiert
! aus
FOR i=1 TO n
e$=LIST GET$(d$ ; i)
IF SLEN(e$) THEN
elem$=LIST GET$(LIST GET$(descr$ ; i) ; 1)
DISP USING "20A': 'XKL" : elem$ e$
END IF
NEXT
DISP RPT$("-",40) "\n"
NEXT
Das ist interessant
Dieses kurze Programm demonstriert mehrere Komponenten von OBAS. Es werden zwei SQL-Datenbankabfragen durchgeführt. In der ersten Abfrage wird die Struktur einer Datenbanktabelle ermittelt. Die zweite Abfrage ermittelt die eigentlichen Daten in Form einer SQL-Abfrage. Das System übernimmt selbständig die korrekte Formulierung der Datenbankabfrage, der anwender formuliert also nur, aus welcher Tabelle welche Daten mit welchem Kriterium abgefragt werden sollen.
Da die Ergebnisdaten in Form einer Liste geliefert werden, die selbst wiederum Listen mit den einzelnen Datenzeilen enthält, ist es ein Leichtes, die Ergebniselemente den entsprechenden Spaltenbezeichnungen zuzuweisen, denn die Spaltenbezeichnungen stehen in der gleichen Position in der Ergebnisliste der Strukturabfrage, wie die Datenabfrage.
Eine solche Gesamtabfrage kann sehr umfangreich sein, daher wird für die Ausgabe ein eigenes Nachrichtenfenster geöffnet, in der die einzelnen Ergebniszeilen angezeigt werden.
Beispiel in INVEP laden
Sie können dieses Beispielprogramm in den INVEP-OBAS-Interpreter laden, indem Sie im Interpreter über den Button "Neu/laden" die Option OBAS-Web auswählen. Geben Sie als Nummer für das Beispiel die 2 ein.


