Call us! 512-349-0334 or (877) INDUSOFT

So erstellen Sie eine Ad-Hoc-SQL-Abfrage in InduSoft Web Studio

Müssen Sie für Ihre Technik oder IT-Mitarbeiter einen direkten Zugriff auf eine Datenbank ermöglichen oder auf andere Weise eine Ad-Hoc-Datenbank-Abfrage innerhalb einer Anwendung erstellen? Hier ist eine Beschreibung, wie dies in InduSoft Web Studio SCADA Software realisiert werden kann.

Um eine SQL-Abfrage in InduSoft zu erstellen, können Sie einfach die DBExecute()-Funktion unter Verwendung einer Datenbank-Verbindung in den Projekt-Explorer nutzen. Die folgenden Abbildungen und Beschreibungen fassen mit der Beispielanwendung das Einrichten dieser Funktion ganz einfach zusammen.
 

Konfigurieren einer Datenbank-Verbindung

Die Verbindung zur Datenbank ist ziemlich einfach. Klicken Sie einfach auf Datenbank / ERP mit der rechten Maustaste und fügen Sie eine neue Verbindung ein. Dann wählen Sie den entsprechenden Treiber für Ihre Datenbank und geben die Anmeldeinformationen an und Sie sind fertig. Die Abbildungen 1 bis 4 zeigen Verbindungen zu einer Access-Datenbank und zu einer SQL Server-Datenbank.

Abb. 1: NORTHWIND Access DB (die Datei befindet sichim Wurzelverzeichnis des Projektes) Datenbank-Verbindung

Abb 2: SQL Server DB Datenbank-Verbindung (sofern Sie eine SQL Datenbank nutzen; dies ist nicht zwingend erforderlich).

Abb. 3: Für Access Datenbanken (*.accdb), nutzen Sie MS Office 12.0 Access DB (OLE DB Provider)

Abb. 4: Sollten Sie den Pfad dynamisch konfiguriert haben {$GetAppPath()}\DBName.accdb, um die Datei anzusprechen, werden Sie in diesem Dialog bei der Verwendung von “Verbindung testen” eine Fehlermeldung erhalten. Dies liegt daran, dass der Rückgabewert der Funktion nur während der Runtime aufgelöst wird.

Die Verwendung der DBExecute()-Funktion und eine Beispielanwendung

Die DBExecute()-Funktion ist wie folgt strukturiert:

iReturnValueTag = DBExecute(strDBConn, strSQL, optStrTags, optNumMaxRows, optStrErrorTag)

Mit:

 

strDBConn

Name der Datenbank-Verbindung, die unter Datenbank/ERP im Projekt Explorer angelegt wurde.

strSQL

Das komplette, syntaktisch korrekte SQL-Statement.
Anm.: In SQL sind geschweifte Klammern ({})typischerweise genutzt, um Ausdrücke in das SQL-Statement einzubinden, die vor dem Ausführen des Statements ausgewertet werden,  z.B.:
SELECT * INTO inmates FROM OPENROWSET (‘MSDASQL’,’Driver={Microsoft Text Driver (*.txt; *.csv)};DEFAULTDIR=C:\;Extensions=CSV;’,’SELECT * FROM flat.csv’)

In IWS jedoch warden geschweifte Klammern genutzt um den Inhalt einer Variablen zu nutzen, die normalerweise nicht ausgewertet werden (d.h. in einer Beschriftung eines Buttons). Wenn Sie eine SQL-Anweisung, die einen solchen Ausdruck enthält mit der DBExecute() Funktion ausführen wollen, dann wird das Projekt versuchen, den Ausdruck auszuwerten und die Funktion wird fehlschlagen

Um die SQL-Anweisung so zu generieren, dass das Projekt den Ausdruck richtig übergeben kann, erstellen Sie eine neue String-Variable, die den Text des Ausdrucks enthält, und dann verweisen Sie auf diese Variable in der SQL-Anweisung, z.B.:

AuxTag = “{Microsoft Text Driver (*.txt; *.csv)}”

DBExecute ( “inmates”, “SELECT * INTO inmates FROM OPENROWSET (‘MSDASQL’,’Driver={AuxTag};DEFAULTDIR=C:\;Extensions=CSV;’,’SELECT * FROM flat.csv’)”)

optStrTags

Eine durch Kommata getrennte Liste der Namen von Array Variablen in Ihrem Projekt, der die Spalten einer SQL-SELECT-Ergebnismenge zugeordnet werden. Die Datenbank wird auf diese Werte-Array Variablen kopiert, wobei die erste Zeile der Ergebnismenge an Array-Index 0 kopiert. Stellen Sie sicher, dass die Arrays groß genug sind, um alle Zeilen in der Ergebnismenge zu erhalten.

Dieser Parameter ist nur erforderlich, wenn strSQL eine SQL SELECT-Anweisung enthält. Für alle anderen Arten von Aussagen, wird dieser Parameter ignoriert und kann weggelassen werden. Allerdings, um die Syntax der Funktion zu respektieren, um bis zum Parameter optStrErrorTag zu gelangen, geben Sie für diesen Parameter einen leeren String (“”) ein.
optNumMaxRows

Die maximale Anzahl der Zeilen, die aus einem SQL-SELECT-Ergebnis kopiert werden. In den meisten Fällen, um alle Zeilen zu kopieren, geben Sie eine Nummer größer als die erwartete Anzahl der Zeilen in der Ergebnismenge.

Dieser Parameter ist nur erforderlich, wenn strSQL eine SQL SELECT-Anweisung enthält. Für alle anderen Arten von Aussagen, wird dieser Parameter ignoriert und kann weggelassen werden. Allerdings, um die Syntax der Funktion zu respektieren, um bis zum Parameter optStrErrorTag zu gelangen, geben Sie für diesen Parameter den Wert 0 ein.

optStrErrorTag

Der Name einer String-Variablen, die detaillierte Fehlermeldungen erhalten, wenn Fehler während der Laufzeit auftreten.
Hinweis: Variablen-Namen müssen in Anführungszeichen gesetzt werden, wie es in dem Syntax-Diagramm dargestellt ist, da das Projekt ansonsten versuchen wird, den Wert der benannten Variablen zu erhalten.

Dies ist ein optionaler Parameter.

Returned value

Diese Funktion gibt die Anzahl der Zeilen zurück, die von der SQL-Anweisung betroffen sind. Wenn ein Fehler auftritt, dann wird eine negative Zahl zurückgegeben.

Bitte beachten Sie, dies ist der Wert, der von der Funktion selbst zurückgegeben wird. Im Falle einer SQL SELECT-Anweisung werden die Werte aus der Datenbank in die Array-Variable optStrTags kopiert.

Mehr Informationen über diese Funktion finden Sie im Hilfe-Handbuch unter Contents >> Appendix: Built-In Scripting Language >> Database/ERP functions >> DBExecute.
Die Beispielanwendung  InduSoft Web Studio AdHoc Query Application können Sie hier herunterladen und wird in Abb. 5 bis 9 näher beschrieben.

Abb. 5: Alarm Test Bild – Dieser Bildschirm wird genutzt, um verschiedene Alarmmeldungen in der Tabelle  ALARMHISTORY des Projekts zu generieren. Der Button “Clear Alarms” wird die gesamte Tabelle bereinigen.

Abb. 6: SQL Test Bild – Auf diesem Bildschirm können Sie Abfragen eingeben und erhalten Daten der Tabelle (max 10 Spalten und 100 Records). Hier sehen Sei eine Abfrage der ALARMHISTORY. Anm.: Die Datenbanken werden über die Radio-Buttos vorgewählt und enthalten die Datenbank-Verbindung der DBExecute()-Funktion. (Siehe Abb. 8)

Abb. 7: SQL Test Bild – Diese Abfrage filtert in der NORTHWIND Access Datenbank die Tabelle products, aus dem Wurzelverzeichnis des Projekts.

Abb. 8: Das “Run Query” On-Down Button Skript – Die erste Routine in der “For-Next”-Schleife löscht alle Speicherstellen in der Klassen-Variablen cQueryResultTag, dann schreibt die DBExecute()-Funktion die Ergebnisse der Abfrage wieder in diese Stellen bis zu 10 Spalten und 100 Zeilen.

Abb. 9: Das Grid Objekt stellt den Inhalt der cQueryResultsTag durch Eingabe des Variablen-Names dar.

Comments are closed.