SQLquery |
Top Previous Next |
Mit diesem Befehl lassen sich Datenbankabfragen sowie Eingaben über bestehende ODBC-Verbindungen durchführen. Voraussetzung Unter Windows muß eine ODBC-Verbindung eingerichtet sein und Moskito muß mit selbiger verbunden sein (mit dem Befehl SQLconnect oder über den Dialog im Menü Verwalten-Datenbank). Parameter <DATABASE> Dieser erste nichtoptionale Parameter gibt den Namen (Alias) der ODBS-Datenquelle an. <QUERY> Dieser zweite nichtoptionale Parameter ist die reguläre SQL-Abfrage oder der Abfrageausdruck, der - in Kommata gefaßt - als ein String und einzelner Parameter aufgefaßt wird. Der Abfrageausdruck beginnt jeweils mit der SQL-Anweisung wie z.B. DELETE, INSERT, SELECT oder UPDATE. Neben den standardisierten SQL-Abfragen gibt es einige fest einprogrammierte Abfrageausdrücke. Dazu zählen: "Describe Tables" "Describe Columns <Spaltenname>" DIALOG Die Abfragewerte werden in einen Dialog gefüllt. Nummer und Feld(er) des Dialogs müssen die nächsten Parameter sein. <dialognr> Die Abfragewerte werden in den Dialog mit der Nummer <dialognr> geschrieben. <feldnr> Die Abfragewerte werden im o.a. Dialog in das Feld mit der Nummer <feldnr> geschrieben. Es können mehrere Felder angegeben werden. /VERBOSE Mehr Ausgaben erzeugen. /SILENT Weniger Ausgaben erzeugen. /NULL Bei Nullwerten in den Tabellenspalten antatt eines Leerstrings "<NULL>" ausgeben. /NOQUOTE Mit diesem optionalen Schalter werden die Werte ohne Anführungszeichen zurückgegeben. Dieser Parameter kann auch /NOQ abgekürzt werden. /TABLE Mehrzeilige Verarbeitung wie in MultiExec (siehe Beispiel unten). /COLNAMES Nur in Verbindung mit "SELECT * FROM ..." Die Namen der Tabellenspalten als erste Zeile oder als Spaltenüberschrift im Listview ausgeben. ROWS/<Wert1>{-<Wert2>} Mit diesem optionalen Schalter wird angegeben welcher Datensatz (Wert1) bzw. welcher Datensatzbereich (Wert1 bis Wert2) ausgegeben wird. /NAMES (Nur in Verbindung mit ROWS) Liefert die Namen der Spalten als erste Zeile. /TYPES (Nur in Verbindung mit ROWS) Liefert die Datentypen der Spalten als erste, in Verbindung mit /NAMES als zweite Spalte. /EER2 Liefert -1 als Rückgabewert, wenn ein Fehler aufgetreten ist. /H Mit diesem Schalter wird ein Hilfetext und die Aufrufkonvention angezeigt. Rückgabewert Der Rückgabewert ist abhängig vom Parameter QUERY, dem Abfrageausdruck. Beginnt er mit der SQL-Anweisung SELECT, so werden die selektierten Abfragewerte zurückgegeben. Ansonsten wird kein Wert zurückgegeben. Mißlingt eine SQL-Anweisung z.B. aufgrund eines fehlerhaften Abfrageausdrucks, so wird die Fehlermeldung des ODBC-Treibers ausgegeben. Beispiel
Im folgenden sind Beispiele für ABFRAGEN, EINFÜGEN, UPDATEN, LÖSCHEN, EINRICHTEN und für komplexere Verwendungen aufgeführt. Angenommen es existiert eine ODBC-Datenbank-Verbindung mit dem Namen TESTDATENBANK, oder die TESTDATENBANK ist „direkt“ mit Moskito verbunden (durch SQLconnect oder über das Menü Verwalten | Datenbank | > Button „Neue Verbidnung“ ). In dieser Datenbank gibt es eine Tabelle mit dem Namen TEST und folgendem Inhalt:
ABFRAGEN: „Select“ - liefert Werte aus einer oder mehreren Spalten, entweder alle Werte, oder nur die welche einem oder mehreren Kriterien entsprechen („where“ und „and“) SQLquery(TESTDATENBANK "select Name from Test where Zahl=1") -> "Karl-Heinz" Die Funktion gibt den Wert "Karl-Heinz" zurück. SQLquery(TESTDATENBANK "select Name from Test where Zahl=1" /noq) -> Karl-Heinz Mit dem optionalen Parameter /NOQ gibt die Funktion den Wert Karl-Heinz ohne Anführungszeichen zurück.
EINFÜGEN: Der Befehl INSERT fügt einen neuen Datensatz in eine Tabelle ein. SQLquery(TESTDATENBANK "insert into Test(Name,Zahl,Attribut) Values('Fritz',3,'grau')")
Strings müssen dabei in einfache Hochkommata eingeschlossen übergeben werden, Datumsangaben werden entweder in der Form #YYYY-MM-DD HH-MM-SS# in Doppelkreuze eingefaßt oder im Standarddatumsformat 'DD-MON-YY' (in Hochkommata eingefaßt) übergeben.
UPDATEN: Der Befehl „Update“ ändert die bestehende Tabelle wie folgt: SQLquery(TESTDATENBANK "update Test set Name='Fritzchen', Attribut='graublau' where Zahl=3")
Achtung: Fehlt die WHERE-Bedingung in diesem Ausdruck, so werden alle Zeilen der Tabelle verändert. LÖSCHEN: Die SQL-Anweisung DELETE löscht komplette Datensätze: SQLquery(TESTDATENBANK "delete from Test where Name='Fritzchen'")
EINRICHTEN: Aus Moskito heraus können Tabellen angelegt oder erweitert werden: SQLquery ALBATROS "CREATE TABLE Abweichung " Eine Spalte vom Typ Text anlegen: SQLquery ALBATROS "ALTER TABLE VG_Fremd_Leitung ADD Betreiber TEXT" Eine Spalte vom Typ Zahl anlegen: SQLquery ALBATROS "ALTER TABLE VG_HD_Geraet ADD Gemeindeschluessel INTEGER" Eine Spalte vom Typ Autowert anlegen: SQLquery Siegburg "ALTER TABLE Hausnummern ADD Hochwert COUNTER " Eine Spalte löschen SQLquery Siegburg "ALTER TABLE Hausnummern DROP id TEXT " komplexere Verwendung von SQLquery: Nur einen Teil der Daten abfragen: SQLquery(TESTDATENBANK "select * from Test" ROWS/1-10) Einen Dialog mit dem Inhalt einer Tabelle füllen: SQLquery(TESTDATENBANK DIALOG 100 100 "select * from Test") Die Auswahlbox mit dem Inhalt einer Tabelle füllen: Auswahl "Tabelle Test" "Name|Zahl|Attribut" SQLquery(TESTDATENBANK DIALOG 165 108 "select * from Test") Die Auswahlbox mit dem Inhalt einer Tabelle füllen und die Spalten automatisch erstellen Auswahl "Tabelle Test" SQLquery(TESTDATENBANK DIALOG 165 108 "select * from Test" /COLNAMES) Mehrere Zeilen, z.B. aus einem DBquery verarbeiten SQLquery dataglobal "insert into ref_tab (AttributInhalt,Elementname,Wert) Values ('%%s','%%s','%%s')" /TABLE "1 2 3" "3 4 5"
Bemerkung Um den verschiedenen SQL-Dialekten gerecht zu werden, die z.B. Access-, SQLite- oder Oracle-Datenbanken voneinander unterscheiden, führt Moskito eine Syntaxüberprüfung durch und ersetzt ggf. Formulierungen durch solche, die der jew. Treiber erwartet. Für den Anwender bedeutet das, daß er nicht wissen muß, auf welchem Datenbanksystem er arbeitet und sich auch nicht in die jeweiligen Feinheiten einarbeiten muß. Übersicht über die Änderungen: Datendefinition (CREATE TABLE, ALTER TABLE)
Syntaxunterschiede Tabellenalias Das Schlüsselwort AS vor einem Tabellenalias gibt es nicht im Oracle-SQL, es wird ersatzlos entfernt. Bsp.: SELECT * FROM Anzahlen AS A wird zu SELECT * FROM Anzahlen A Umgekehrt kann das AS nicht eingefügt werden, weil diese Syntaxüberprüfung zu aufwändig wäre! JOINS Access kennt INNER, OUTER, LEFT und RIGHT JOIN’s, Oracle kennt nur ein globales JOIN, das dem INNER JOIN entspricht. Die Zusätze INNER, OUTER, LEFT und RIGHT werden entfernt, es können Ungleichheiten in den Views (Abfragen) entstehen. Umgekehrt werden Oracle-JOIN’s in INNER JOIN’s umgewandelt.
Siehe auch
|