by Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor
by Thorsten Zisler 2 Installieren und einstellen von MySql
by Thorsten Zisler 3 Installieren und einstellen von MySql
by Thorsten Zisler 4 Datenbank und Schnittstelle erstellen
by Thorsten Zisler 5 Einstellung am Supervisor Die Einstellung erfolgt analog zu einer Access Datenbank, nur wählt man hier die dsn Datei aus, die man vorher erstellt hat. Auswahl der Datenquelle Auswahl der dsn Datei. Sie sollte im Ordner C:\Programme\Gemeinsame Dateien\ODBC\Data Sources\ stehen. Bei der Erstellung der Datei kann man diesen Ordner angeben. Nach diesen Einstellungen kann man sich zur Datenbank verbinden (SQL Server muß laufen).
by Thorsten Zisler 6 Lesen und navigieren in der Datenbank BefehlBeschreibung DBOpen( „DB Name" )ohne Einschränkung DBClose( „DB Name" )ohne Einschränkung DBProperty->BOFwird nicht true wenn die Datenbank am Anfang steht DBProperty->EOFohne Einschränkung DBProperty->Current Recordzeigt immer einen Satz weiter an als der mit Read angezeigte DBProperty->Record countohne Einschränkung DBProperty->Current pagegibt die Nummer des tatsächlich angezeigten Eintrags wieder DBProperty->Page countwie Record count DBProperty->Page size? DBProperty->Field countzeigt immer 0 obwohl die Datenbank 13 Felder hat DBStatus->Openohne Einschränkung DBStatus->Closeist immer true auch wenn die Datenbank offen ist DBMove->Firstohne Einschränkung DBMove->Lastohne Einschränkung DBMove->Nextspringt immer 2 Sätze weiter Rückgabewert funktioniert richtig DBMove->NextPageRückgabewert ist 0 obwohl die Funktion richtig ausgeführt wurde DBMove->Priviouskeine Reaktion DBMove->PriviousPagespringt auch zum nächsten Satz wie Next Rückgabe auch immer 0 DBMove->Positionspringt auch zum nächsten Satz wie Next Rückgabe auch immer 0 DBRead ohne Einschränkung
by Thorsten Zisler 7 BefehlBeschreibung DBDelete( „DB Name" )es wird der Datensatz gelöscht der mit Current Record angezeigt wird. Beispiel angezeigt wird Satz 2 und gelöscht wird aber Satz 3 DBWritehat dasselbe Problem es wird der nächste Satz geändert, nicht der angezeigte DBAddNewohne Einschränkung DBUpdatenur nach einem Datensatz anhängen DBExecute->Requeryohne Einschränkung DBExcute->SQLes können SQL Kommandos an die Datenbank geschickt werden, für das ändern von Datensätzen sehr sinnvoll. Siehe nächste Folie Datensätze bearbeiten in der Datenbank
by Thorsten Zisler 8 Datensätze bearbeiten mit SQL Kommandos Supervisor Script: comandSQL = "UPDATE tabelle1 SET Zähler_1 = " Wert = ValueToText(Count_1_SQL) comandSQL = comandSQL + Wert comandSQL = comandSQL + " WHERE Position = 0" bResult = DBExecute( "Verbindung_SQL_dsn", "SQL", comandSQL ) IF !bResult THEN Status_SQL = DBGetLastError( "Verbindung_SQL_dsn", TRUE ) ENDIF SQL Befehl um in der Tabelle1 in der Spalte Zähler den Wert zu verändern. SET Einen Supervisor int Punkt in Text wandeln und dem Kommando hinzufügen. SQL Befehl um den Wert in jeden Datensatz indem die Spalte Position auf 0 ist einzutragen. SQL Befehl mit der Methode Execute an die Datenbank schicken. Ist der Rückgabewert = 0 dann letzten Fehler abfragen.
by Thorsten Zisler 9 Datenaustausch zwischen 2 Supervisor Applikationen mit der SQL Datenbank Struktur der SQL Datenbank Spalte Anlage gibt an aus welcher Anlage die Daten kommen. Ein Datensatz ist immer einer Anlage zugeordnet. Spalte aktiv gibt an ob die Anlage Daten übermittelt ( eventuell ob sie vorhanden ist) und damit die Daten aktuell sind
by Thorsten Zisler 10 Benötigte Punkte PunktTypE/A TypArraygröße Anlage_aktivBooleanSpeicher10Aus / Ein [FALSE]Freigabe in die DB schreiben cmdSQLTextSpeicher1SQL Komando Daten_Anlage1IntegerSpeicher90 to [0]Beschreibung Daten_Anlage2IntegerSpeicher90 to [0]Beschreibung Daten_Anlage3IntegerSpeicher90 to [0]Beschreibung Daten_Anlage4IntegerSpeicher90 to [0]Beschreibung DB_AnlageIntegerSpeicher10 to [0]Beschreibung DB_Anlage_aktivBooleanSpeicher1Aus / Ein [FALSE]Beschreibung DB_Anlage_aktiv1BooleanSpeicher1Aus / Ein [FALSE]Beschreibung DB_Anlage_aktiv2BooleanSpeicher1Aus / Ein [FALSE]Beschreibung DB_Anlage_aktiv3BooleanSpeicher1Aus / Ein [FALSE]Beschreibung DB_Anlage_aktiv4BooleanSpeicher1Aus / Ein [FALSE]Beschreibung DB_Daten_Anlage1IntegerSpeicher90 to [0]Beschreibung DB_Daten_Anlage2IntegerSpeicher90 to [0]Beschreibung DB_Daten_Anlage3IntegerSpeicher90 to [0]Beschreibung DB_Daten_Anlage4IntegerSpeicher90 to [0]Beschreibung DB_Daten1IntegerSpeicher to [0]Beschreibung DB_Daten2IntegerSpeicher to [0]Beschreibung DB_Daten3IntegerSpeicher to [0]Beschreibung DB_Daten4IntegerSpeicher to [0]Beschreibung DB_Daten5IntegerSpeicher to [0]Beschreibung DB_Daten6IntegerSpeicher to [0]Beschreibung DB_Daten7IntegerSpeicher to [0]Beschreibung loop1IntegerSpeicher10 to [0]Schleifenzähler PunktezeigerTextSpeicher1Beschreibung sError_DBTextSpeicher1Fehlermeldung sWertTextSpeicher1Daten der Wandlung ValueToText
by Thorsten Zisler 11 Schreiben der Daten in die SQL Datenbank ELSE REM Anlage 1 als nicht aktiv melden cmdSQL = "UPDATE tabelle1 SET aktiv= 0 WHERE Anlage = 1" bResult = DBExecute( "DAS_DB_Anlagen", "SQL", cmdSQL ) IF !bResult THEN sError_DB = DBGetLastError( "DAS_DB_Anlagen", TRUE ) ENDIF REM Anlage 1 IF Anlage_aktiv[0]==TRUE THEN REM Anlage 1 als aktiv melden cmdSQL = "UPDATE tabelle1 SET aktiv= 1 WHERE Anlage = 1" bResult = DBExecute( "DAS_DB_Anlagen", "SQL", cmdSQL ) IF !bResult THEN sError_DB = DBGetLastError( "DAS_DB_Anlagen", TRUE ) ENDIF REM Schleife um die Daten zu übertragen FOR loop1= 1 TO 7 cmdSQL = "UPDATE tabelle1 SET " sWert = ValueToText(loop1) cmdSQL = cmdSQL + "Daten" + sWert + "= " sWert = ValueToText(Daten_Anlage1[loop1]) cmdSQL = cmdSQL + sWert +" WHERE Anlage = 1" bResult = DBExecute( "DAS_DB_Anlagen", "SQL", cmdSQL ) IF !bResult THEN sError_DB = DBGetLastError( "DAS_DB_Anlagen", TRUE ) ENDIF NEXT
by Thorsten Zisler 12 Lesen der Daten aus der SQL Datenbank REM Daten Anlage 1 DBMove( "DAS_DB_Anlagen.Tabelle1", "FirstPage" ) bResult = DBRead( "DAS_DB_Anlagen.Tabelle1" ) IF !bResult THEN Status_SQL = DBGetLastError( "DAS_DB_Anlagen", TRUE ) ENDIF DB_Anlage_aktiv1 = DB_Anlage_aktiv IF DB_Anlage_aktiv1 THEN FOR loop1 =0 TO 6 intTest = loop1 +1 sWert = ValueToText(intTest) Punktezeiger = "DB_Daten" + sWert DB_Daten_Anlage1[loop1] = ^Punktezeiger NEXT ENDIF
by Thorsten Zisler 13 Lesen eines Querys aus der SQL Datenbank Punkt als Array anlegen und das SQL Query dem Punkt zuweisen. Er muß nicht mit dem Index zugewiesen werden (SQL_Daten1[0]). In der Registerkarte Datenbank eine Tabelle mit SQL Text anlegen und alle gewünschten Punkte hinzufügen.
by Thorsten Zisler 14 Lesen eines Querys aus der SQL Datenbank comandSQL = "SELECT * FROM tabelle1 WHERE " comandSQL = comandSQL + Query_Spalte + " = " textTest = ValueToText(Query_Wert) comandSQL = comandSQL + textTest bResult = DBExecute( "DAS_DB_Anlagen.SQL_Text", "Source", comandSQL ) IF !bResult THEN Status_SQL = DBGetLastError( "DAS_DB_Anlagen", TRUE ) ENDIF DBExecute( "DAS_DB_Anlagen.SQL_Text", "Requery" ) DBRead( "DAS_DB_Anlagen.SQL_Text" ) Hier werden die Punkte angelegten Array Punkte (z.B. SQL_Daten1) aus der Abfrage dargestellt. Hier erfolgt der Zugriff über den Index.