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.
|
|
|