#! /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.



Schatten