SQLEntry
Zurück Nach oben Vorwärts

Kurzbeschreibung Parameter Funktionsweise Ein/Ausgänge Limitierungen Querverweise Beispiele 
SQL...  SQL-Tutorial

Kurzbeschreibung
SQLEntry ermöglicht es auf Datenbanken über einen 32-bit ODBC Treiber zuzugreifen.
Parameter
Datenquelle: Auswahl einer registrierten ODBC-Datenbank. Um eine Datenbank mittels ODBC zu verbinden, muß für diese ein geeigneter ODBC-Treiber installiert sein. Beispielsweise benötigt die ACCESS Datenbank 'Nordwind.mdb' einen Microsoft ACCESS-ODBC-Treiber.
Die Anzeige der installierten ODBC-Treiber und der registrierten Datenbanken sowie das Hinzufügen (Registrieren) wird mit dem '32-Bit ODBC-Administrator' durchgeführt. Dieser befindet sich in der Systemsteuerung unter den Stichwort ODBC (32bit) .
Das Registrieren geschieht durch Hinzufügen der Datenbank/Datenbankdatei zu den User DNS, den System DNS oder den File DNS. Erst danach kann mittels der ODBC Schnittstelle die Datenbank ausgewählt und darauf zugegriffen werden.
Tabellen: Hier werden alle Tabellen der Datenquelle angezeigt.
Spalten: Eine Auflistung aller Spalten der zuvor ausgewählten Tabelle.
Inhalt: Der Inhalt aller Zeilen der gewählten Spalte wird angezeigt. Je nach Größe der Datenbank und Geschwindigkeit des Rechners kann dieser Vorgang mehrere Minuten dauern (relevant, falls Anzahl der Zeilen > 100.000).
Benutzername und Paßwort sind nur bei Datenbanken nötig die eine Benutzerverwaltung unterstützen.
SQL Kommando: Die hier angegebene SQL Anweisung wird nach Beenden des Dialoges an die Datenbank geschickt, eventuelle Parameter werden zur Laufzeit eingefügt. (Zum Testen des SQL-Kommandos kann der 'Testlauf' Button verwendet werden, hierbei werden Defaultwerte für eventuelle Parameter verwendet.) Für weiterführende Informationen siehe Anhang SQL-Syntax.
Tabelle hinzufügen: Der ausgewählte Tabellenname wird dem SQL-Kommando hinzugefügt.
Spalte hinzufügen: Der ausgewählte Spaltenname wird dem SQL-Kommando hinzugefügt.
Keine Dateneingänge erzeugen: Standardmäßig werden Dateneingänge erzeugt, mit Hilfe derer Daten in die Datenbank abgelegt werden können. Für jede Spalte, der zuerst in der SQL-Kommandozeile aufgeführten Tabelle, wird ein Eingang erzeugt.  Sollen UPDATE und INSERT Befehle und die dazugehörige Eingänge nicht automatisch erzeugt werden, so ist die Option 'keine Dateneingänge erzeugen' auszuwählen.
Primärindex verwenden: Der Index Eingang wird durch einen Primärschlüsseleingang ersetzt. Zur Laufzeit wird eine WHERE Klausel unter Bezugnahme des Primärschlüssels generiert. Beispiel: Das durch den Benutzer eingegebene SQL-Kommando:
    SELECT * FROM Kunden
wird umgewandelt in:
    SELECT * FROM Kunden WHERE Primärschlüssel = Primärschlüsseleingang;
Zur Laufzeitzeit kann das an die Datenbank geschickte SQL-Kommando wie folgt aussehen (wenn Primärschlüssel = Kunden-Nr und der Parameter an Primärschlüsseleingang = 1001) ist):
    SELECT * FROM Kunden WHERE [Kunden-Nr] = 1001.
Systemtabellen anzeigen: Zeigt neben den normalen Tabellen auch Abfragen, VIEWS, SYSTEM TABLES, TEMPORARY TABLES, ALIAS.
Index mit Null beginnen: Da in SQL die erste Zeile mit 1 indiziert wird, aber in C und vielen anderen Sprachen das erste Element mit 0 bezeichnen wird, kann hiermit eine Anpassung vorgenommen werden.
Testlauf...: Das SQL-Kommando wird gelesen, überprüft, evtl. in eine für die Datenbank lesbare Form konvertiert (Parameter werden evtl. durch Defaultwerte ersetzt) und an die Datenbank geschickt.
Falls die Option 'keine Dateneingänge erzeugen' deaktiviert ist, werden automatisch auch Anweisungen generiert und angezeigt mit denen Daten in die Datenbank geschrieben werden können.
Enthält das SQL-Kommando eine korrekte SELECT Anweisung, so wird das Ergebnis dieser Abfrage auch angezeigt.
Dient die SQL Anweisung der Datenänderung (DML (=data manipulation language) wie z.B. CREATE TABLE) so wird nur im Fehlerfall eine Meldung ausgegeben.
Info...: Gibt Auskunft über die Fähigkeiten des ODBC Treibers.
Funktionsweise

Hinweise zum Moduldialog:

Nach Auswahl der Datenquelle und erfolgreichem Verbindungsaufbau wird der Zugriff auf die Tabellen möglich. Durch Betätigen des Buttons 'Tabelle hinzufügen' wird der Bezeichner der ausgewählten Tabelle an das bereits vorhandene SQL-Kommando gehängt.
Nach Auswahl der gewünschten Tabelle werden die dazugehörigen Spalten zugänglich und die Anzahl der darin enthaltenen Zeilen (= Datensätze) wird im Feld 'Inhalt' angezeigt. Durch Betätigen des Buttons 'Spalten hinzufügen' wird die entsprechende Spalte an das SQL-Kommando gehängt.
Eckigen Klammern [ und ] begrenzen Tabellen- und Spaltennamen und verhindern somit, daß Sonderzeichen falsch interpretiert werden. Bei Namen ohne Sonderzeichen wie + oder - können diese auch weggelassen werden.
Der Punktoperator dient dazu Mehrdeutigkeiten auszuschließen; d.h. die Spalte wird einer ausgewählten Tabellen explizit zugeordnet.
Nach Auswahl der Spalte können die darin enthaltenen Daten im Feld 'Inhalt' begutachtet werden.
Es ist natürlich auch möglich ein SQL-Kommando ohne diese oben genannten Hilfsmittel zu erstellen.
Falls Eingänge für Parameter bereitgestellt werden sollen, so werden diese auf folgende Weise deklariert:
#Eingangsname=Defaultwert für Zahlen.
#Eingangsname='Defaultwert' für Zeichenketten.
Das Zeichen # kennzeichnet die nachfolgende Zeichenkette als Parameterdeklaration. Beendet wird diese durch ein Leerzeichen.
Falls die Zeichenkette das Zeichen = enthält, werden die nachfolgende Zeichen als Defaultwert interpretiert, welcher solange verwendet wird, bis an dem entsprechenden Eingang ein Parameterwert eingelesen wird.
Um das SQL-Kommando sofort auszuführen können Sie den Button 'Testlauf...' verwenden.

Bemerkungen zur Arbeitsweise des Moduls

Nach Beenden des Dialogs werden für alle zu lesenden Spalten Ausgänge erzeugt. 
Falls in die Datenbank automatisch geschrieben werden soll (d.h. die Option 'keine Dateneingänge erzeugen' deaktiviert ist), werden zusätzlich vom SQLEntry Modul SQL-Kommandos erzeugt, mit denen Zeilen in eine Tabelle eingefügt (INSERT) oder aktualisiert/überschrieben (UPDATE) werden können.
Da mit einem SQLEntry Modul nicht automatisch in mehrere Tabellen gleichzeitig geschrieben werden kann, erzeugt das Modul nur Eingänge um das Schreiben in eine Tabelle zu ermöglichen. Dazu wird die Tabelle verwendet, welche als erste in der SQL Anweisung erscheint.
Werden Daten an das SQLEntry Modul geschickt um diese in eine Datenbank zu schreiben, so überprüft dieses zuerst, ob bereits ein Eintrag zu dem entsprechenden Primärschlüssel existiert. Entsprechend dem Ergebnis wird danach eine UPDATE oder INSERT Operation ausgeführt.
Für alle benutzerdefinierten Parameter der SQL-Anweisung werden Eingänge erzeugt, die mit dem entsprechenden Defaultwert vorbelegt werden. Falls keine Defaultwerte angegeben wurden, werden Zahlen mit 0 und Zeichenketten mit ' ' (Leerzeichen) initialisiert. Um den Datentyp des Parameters festzulegen, ist ein Defaultwert entsprechenden Typs anzugeben. Um beispielsweise einem Eingang den Datentyp TEXT zuzuweisen, ist der Defaultwert in einfache Anführungszeichen ' und ' zu setzen, für Zahlenwerte wie zum Beispiel: DOUBLE, INTEGER usw. sind diese wegzulassen.  
Falls eine SQL-Abfrage mehrere Ergebniszeilen liefert kann eine davon mittels des Index Eingangs ausgewählt werden.
Falls die Option 'Primärindex verwenden' aktiviert ist, werden die Spalten, welche den Primärschlüssel bilden, zweimal als Dateneingänge aufgeführt. Einmal mit ihren ursprünglichen Feldnamen und ein weiteres mal mit Feldnamen+(Primary-Key) als Primärschlüsseleingang. Dies hat folgende Gründe:
1. Anhand des Primärschlüssels wird die auszugebende Zeile bestimmt.
Änderungen an den Primärschlüsseleingängen führen zum Lesen des gewünschten Datensatzes und werden somit nicht als Aufforderung zum Schreiben interpretiert.
2. Der Primärschlüssel wird zur Überprüfung der Existenz eines Eintrages (Zeile in Tabelle) benötigt.
3. Sollen nur Zeilen aktualisiert werden, die bereits existieren (UPDATE), so ist nur der Primärschlüssel zu verdrahten.
4. Sollen nur Zeilen eingefügt werden, die noch nicht existieren (INSERT), so ist nur der ursprüngliche Feldname zu verdrahten.
5. Sollen Daten sowohl aktualisiert als auch hinzugefügt werden, so sind alle Eingänge zu verdrahten. (Primärschlüsseleingänge müssen hierfür denselben Wert erhalten wie ihre korrespondierenden Eingänge.)
Am Ausgang Error werden Fehlermeldungen des ODBC-Treiber und des SQL-Moduls ausgegeben.
Für alle im SQL-Kommando aufgeführten Spalten wird ein Ausgang erzeugt. Der Datentyp dieser Ausgänge ist immer UBYTE[], deshalb können diese zur  Erstellung von Bildschirmmasken verwendet werden. Für eine anderweitige Verarbeitung der Daten müssen diese evtl. erst auf den geeigneten Typ gecastet werden.
Der Ausgang < liefert eine 1, bei Auswahl des ersten Datums der Ergebnistabelle.
Der Ausgang > liefert eine 1, bei Erreichen oder Überschreiten des letzten Datums einer Ergebnistabelle.
Der Ausgang Count liefert die Anzahl der Zeilen der ausgewählten Tabelle.
Der Ausgang Changes liefert eine 1 falls die Anzahl der Einträge der Tabelle verändert wurde.
Ein-/Ausgänge
Eingänge:
Refesh   TYPEINFO{TypeInfo}
SWORD[]{BIN}
Primary-Keys
bzw. Index:  
TYPEINFO{TypeInfo}UBYTE[]{TIME_DOMAIN}
bzw. TYPEINFO{TypeInfo}SWORD[]{SCALAR}
Spaltenname1 ...
Spaltename256:  
TYPEINFO{TypeInfo}
UBYTE[]{TIME_DOMAIN}
Benutzerdefinierte
Eingänge 1-64:
TYPEINFO{TypeInfo}
UBYTE[]{TIME_DOMAIN}
Ausgänge:
Error:   TYPEINFO{TypeInfo}
UBYTE[]{TIME_DOMAIN}
Spaltenname1 ...
Spaltename256:  
TYPEINFO{TypeInfo}
UBYTE[]{TIME_DOMAIN}
TYPEINFO{TypeInfo}
SWORD[]{BIN}
> TYPEINFO{TypeInfo}
SWORD[]{BIN}
Counts TYPEINFO{TypeInfo}
SWORD[]{SCALAR}
Changes TYPEINFO{TypeInfo}
SWORD[]{BIN}
Limitierungen
·    Je nach ODBC Treiber sind die Zugriffsmöglichkeiten auf die Datenbanken eingeschränkt. Die Fähigkeiten des ODBC-Treibers können über den  'Info...' Button abgefragt werden.
·    Tabellen die keinen Primärschlüssel besitzen können nicht aktualisiert werden (UPDATE). Neue Daten werden deshalb immer angehängt (INSERT).
·    Da Excel keine Datenbank ist, werden Daten (Zeilen) immer angehängt. Es besteht somit die Gefahr, daß eine Excel-Tabelle voll läuft, da diese nur ca. 16000 Zeilen pro Tabelle verwalten kann.
·    SQLEntry kann zur Zeit keine Datentypen verwalten die mehr als 1000 Bytes/Zeichen belegen. Bei Verwendung größerer Felder besteht die Gefahr daß diese zusätzlichen Daten verloren gehen.

·    Es können innerhalb eines SQL-Befehls keine Anführungszeichen verwendet werden. Verwenden sie statt dessen andere Zeichen  wie z.B.: ` (ASCII: 96) .
-    Der Signalgraph wird  veranlaßt auf lesende Datenbankzugriffe zu warten. 
Querverweise
DBLoad, DBSave MS-Access, MS-Excel
Beispiele
Die Beispiele beziehen sich in erster Linie auf die von Microsoft Access bereitgestellte Datenbank Nordwind. Sie sollten Access zum Erstellen eigener Datenbanken verwenden, können aber auch Datenbanken mit dem SQLEntry Modul erstellen. Die Automation der Datenbank kann danach von ICONNECT übernommen werden.
Beispiel: Aller Anfang ist leicht
Einfachster SQL Befehl:
   
Select * From Artikel
Der Stern (Asterisk) * wählt alle Spalten der Tabelle Artikel aus. Für diese werden vom SQL-Modul Ausgänge erzeugt. Nach dem Start werden die darin enthaltenen Daten ausgegeben.
Ist die Option 'Primärindex verwenden' deaktiviert, so kann über den Indexeingang die gewünschte Ergebniszeile ausgewählt werden. 
Beispiel 1: Erzeugen von Parametereingängen
SQL-Befehl mit spezieller Erweiterung  für das SQLEntry-Modul:

Select * From Artikel Where [Artikel].[ArtikelName] like #MyParameter='A%'

Diese Befehl wird durch das SQL-Modul in einen Standard-SQL-Befehl umgewandelt:

Select * From Artikel Where [Artikel].[ArtikelName] like 'A%';

und an die Datenbank geschickt.
Erklärung:
Select wählt Spalten aus angegeben Tabellen aus.
*           (Asterisk) wählt alle Spalten der angegebenen Tabelle aus.
From:       leitet die Liste der Tabellen ein.
Artikel: die im Beispiel ausgewählte Tabelle.
Where   Leitet eine Liste von Restriktionen (Beschränkungen) ein.
[Artikel].[ArtikelName]
     
       gibt die Spalte ArtikelName aus den Tabelle Artikel an.
like:       ist der SQL Ähnlichkeitsoperator, der Wildcards (Platzhalterabfragen) in Zeichenketten ermöglicht.
'A%':     ist die Zeichenkette mit der die Eintrage der Spalte ArtikelName verglichen werden.

Das Schlüsselwort, welches durch das Zeichen # eingeleitet wird:

    #MyParameter='A%'

wird zerlegt in den Eingangsnamen:

    MyParameter

für den auch ein Datenpuffer angelegt wird, und in

    'A%'

welches als Defaultwert verwendet wird. Der Defaultwert wird durch Parameter, die über den Eingang MyParameter eingelesen werden, ersetzt. Wird beispielsweise am Eingang MyParameter der Wert 'Chef%' übergeben, so lautet der Befehl der an die Datenbank gereicht wird:

    Select * From Artikel Where [Artikel].[ArtikelName] like 'Chef%';

Die einzelnen Anführungszeichen ' und ' dienen dazu den angegebenen Defaulwert als String zu kennzeichnen, alle Parameter an diesem Eingang werden folglich als Zeichenkette interpretiert. Bei Zahlenwerten sind die Anführungszeichen wegzulassen, Parameterwerte werden als Zahlen interpretiert.
Beispiel:


    Select * From Artikel Where [Artikel].[ArtikelNr] = #MyParameter=10000001

Über den, nach Beenden des Eingabedialoges erzeugten Eingang MyParameter, können nun Parameter und andere Daten in den SQL Befehl eingefügt werden.

Beispiel 2: Noch mehr Parametereingänge
SELECT * FROM Adressen WHERE
[Adressen].[Typ] = #TYP=1003 OR
[Adressen].[Vorname] = #Vorname='Karin' OR
[Adressen].[Nachname] = #Nachname='Mueller'


# leitet einen Parameterplatzhalter ein,
= trennt Namen für Eingang und Defaultwert,
ein Leerzeichen beendet die Parameterdefinition;

die Zeile:
[Adressen].[Typ] = #TYP=1007
definiert einen Eingang für Zahlenwerte mit dem Bezeichner TYP.
Der Defaultwert für diesen Eingang wird auf 1007 gesetzt.
Der Datentyp für die  standardmäßig Zahlen, um diese als Zeichenketten zu kennzeichnen, werden diese in einfache Hochkommas (' und ') gesetzt.

Dieses SQL-Kommando dieses Beispiels zeigt alle Spalten der Tabelle Adressen an, die den Typ 1007, den Vornamen 'Karin' oder den Nachnamen 'Mueller' besitzen.
die Werte 1007, 'Karin' und 'Mueller' können zur Laufzeit über die Eingänge
TYP, Vorname, Nachname verändert werden.
Beispiel 3: Gleichzeitiges Auslesen mehrerer Datensätze (getrennt durch \r\n)
Diese Beispiel zeigt das Auslesen von Datenschlüsseln, um diese in einer ListBox anzuzeigen:

SELECT [Adressen].[Code] FROM Adressen

Wird nun am Eingang Index der Wert -1 angelegt, so werden alle Einträge der Spalten getrennt durch \r\n auf den entsprechenden Ausgang gegeben und können direkt vom ListBox-Modul eingelesen und angezeigt werden. 

Beispiel 4: Manuelles Verändern (UPDATE) von Daten
Folgendes Kommando dient zum Ändern eines oder mehre Datensätze:

UPDATE Adressen SET [Anrede] = #Anrede='Herr', [Vorname] = #Vorname='', [Nachname] = #Nachname='', [Adresse] = #Adresse='' WHERE [Adressen-Nr] = #AdressenNummer=1

Erläuterung: Update ist der Befehl zum Ändern bereits existierender Datensätze. Spaltennamen sind in eckige Klammern gesetzt, damit diese von den Eingangsdeklaratoren (Zeichenketten die mit # beginnen) unterschieden werden können. Spalten und Tabellennamen müssen in eckige Klammern gesetzt werden, wenn diese Sonderzeichen wie + oder - enthalten, da diese von SQL ansonsten fehlinterpretiert werden.

Beispiel 5: Manuelles Einfügen (INSERT) von Daten
Folgendes Kommando dient zum Ändern einzelner Datensätze:

INSERT INTO Address VALUES (#AddressNumber, #name1='', #name2='', #Address='','Empty', #DateTime='2000-02-22 02:22:59')

Erläuterung: INSERT dient zum Erzeugen neuer Datensätze. Im Gegensatz zu UPDATE müssen hier alle Spalten der Tabelle einen Wert erhalten. Das Beispiel erzeugt SQL-Kommandos welche Datensätze in ein Tabelle einfügt, wobei die erste Spalte Zahlen erhält und die übrigen fünf Spalten Zeichenketten erwarten.

Beispiel 6: Automatisches UPDATE und INSERT von Daten
Wenn zusätzlich zu einem wie folgt aussehenden SQL-Befehl  die Optionen 'Primärindex verwenden' und 'in Datenbank schreiben' aktiviert sind, erzeugt das SQL-Modul Kommandos zum automatischen Ändern der Tabelle.
Außerdem erzeugt es für jede Spalte der Tabelle einen Eingang. Zur Laufzeit wird zuerst überprüft, ob zu dem, am Primäreingang anliegenden Primärindex, ein Datensatz existiert. Danach wird entweder ein UPDATE oder ein INSERT Befehl aus dem im Dialog definierten SQL-Kommando, und den an den Dateneingängen anliegenden Parametern generiert.

SELECT * FROM Adressen

Sollen nur bereits existierende Datensätze erneuert (UPDATE), aber keine neuen hinzugefügt werden, so ist der Eingang der den Primärindex bildet, aber nicht als Primärindex gekennzeichnet ist nicht zu verdrahten (Diese Spalte hat den selben Namen wie der Primärindex, aber ohne den Zusatz (Primary-Key) )

Beispiel 7:  Löschen von Daten
Automatisches Löschen

    DELETE FROM Adressen

und zusätzlich Optionen 'Primärindex verwenden' und 'in Datenbank schreiben'

Manuelles Löschen geschieht zum Beispiel auf folgende Weise:

    DELETE FROM Adressen where AdressenNr = #ZuLöschenderEintrag

hierbei ist zu beachten das für AdressenNr keine Mehrfachnennungnen auftreten, da ansonsten die Möglichkeit besteht, daß ungewollt gleichzeitig mehrere Einträge gelöscht werden.
Deshalb sollte hierfür der Primärschlüssel verwendet werden.