SQL Datenbank Anbindung an den Supervisor 1 by Thorsten Zisler Installieren und einstellen von MySql 2 Installation Es müssen folgende Programme/Treiber installiert werden : 1. Den SQL Server mysql-3.23.51-win. Ohne den kann man nicht auf eine SQL Datenbank zugreifen. 2. Den ODBC Treiber für mysql MYODBC-3.51.03.exe. Damit ist das erstellen einer Datei dsn sehr einfach. 3. Wenn noch keine Datenbank existiert dann muß MySql- Front noch installiert werden. In dem Programm werden die Datenbanken erstellt und getestet. SQL Server wenn der SQL Server schon läuft dann sieht man unten eine grüne Ampel, ansonsten muß er von Hand gestartet werden (C:\mysql\bin WinMysqladmin ) In diesem Programm kann der Server auch konfiguriert werden (Benutzer ) Dann MySQL Front starten und eine neue Verbindung aufbauen. Für eine lokale Datenbank gibt man Hostname = localhost ,Benutzer = root und Port 3306. Die Verbindung erfolgt über TCP/IP auf dem lokalen Rechner. Der Benutzer root ist ein Standardbenutzer ohne Passwort. Um Benutzer und Passwörter zu vergeben muß man bei der Erstellung und Konfiguration der dsn Datei diese mit angeben. by Thorsten Zisler Installieren und einstellen von MySql 3 my.ini Datei mit dem Programm WinMysqladmin wird auch eine ini Datei erstellt ( Reiter auswählen und Save Modifikation ). In dieser sind die Einstellungen des SQL Servers und Computer Einstellungen gespeichert. Netzwerk Auf beiden Rechnern muß MySQL installiert sein. Konfiguration des lokalen SQL Servers siehe oben. Will man von einem Rechner auf den Rechner mit der Datenbank zugreifen muß der Hostname oder IP Adresse bekannt sein. Desweiteren braucht man den Benutzernamen und das Passwort von der Datenbank auf die man zugreifen will ( wenn es nicht root ist ). Um die Verbindung aufzubauen startet man MySQL Front und geht auf Verbinden. In diesem Fenster gibt man die Parameter für die neue Verbindung ein. Verbindungsname, Host/ IP = IP Adresse eingeben (z.B. 192.168.120.30) User = Benutzername oder root, Passwort = wenn benötigt und Datenbank die man auslesen will. Nachdem man die Eingaben gemacht hat diese Verbindung speichern und dann verbinden mit dem Server. by Thorsten Zisler Datenbank und Schnittstelle erstellen dsn Datei erstellen Die dsn Datei beinhaltet die Verbindungsdaten zur SQL Datenbank. über Einstellungen\Verwaltung\ODBC Quellen wird der Datenbank eine dsn Datei zugewiesen über welche der Datenaustausch realisiert wird. Dafür den Reiter File dsn anwählen und den ODBC Treiber auswählen (MYSqlODBC) und einen Dateinamen vergeben. Das gilt nur für den Treiber MySQL ODBC Version 3.51. Mit einem anderem Treiber ist es schwieriger eine Datei dsn zu erstellen. Vermutung : es muß erst eine System dsn erstellt werden, dann mit dem gleichen Namen eine Datei dsn. Datenbank erstellen Beim Start von MySqlFront muß man sich mit dem SQL Server und der Datenbank verbinden. Wurde ein anderer Benutzername als "root" vergeben, so ist dieser zu benutzen, dasselbe gilt für ein Passwort. Wurde die Verbindung hererstellt man mit MYSQL Front die Datenbank. Tabelle, Felder festlegen und die Datentypen der einzelnen Felder. Praktisch die Struktur der Datenbank vorgeben. 4 by Thorsten Zisler 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). 5 by Thorsten Zisler Lesen und navigieren in der Datenbank 6 Befehl Beschreibung DBOpen( „DB Name" ) DBClose( „DB Name" ) DBProperty->BOF DBProperty->EOF DBProperty->Current Record DBProperty->Record count DBProperty->Current page DBProperty->Page count DBProperty->Page size DBProperty->Field count DBStatus->Open DBStatus->Close ohne Einschränkung ohne Einschränkung wird nicht true wenn die Datenbank am Anfang steht ohne Einschränkung zeigt immer einen Satz weiter an als der mit Read angezeigte ohne Einschränkung gibt die Nummer des tatsächlich angezeigten Eintrags wieder wie Record count ? zeigt immer 0 obwohl die Datenbank 13 Felder hat ohne Einschränkung ist immer true auch wenn die Datenbank offen ist DBMove->First DBMove->Last DBMove->Next DBMove->NextPage DBMove->Privious DBMove->PriviousPage DBMove->Position ohne Einschränkung ohne Einschränkung springt immer 2 Sätze weiter Rückgabewert funktioniert richtig Rückgabewert ist 0 obwohl die Funktion richtig ausgeführt wurde keine Reaktion springt auch zum nächsten Satz wie Next Rückgabe auch immer 0 springt auch zum nächsten Satz wie Next Rückgabe auch immer 0 DBRead ohne Einschränkung by Thorsten Zisler Datensätze bearbeiten in der Datenbank 7 Befehl Beschreibung 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 DBWrite hat dasselbe Problem es wird der nächste Satz geändert, nicht der angezeigte DBAddNew ohne Einschränkung DBUpdate nur nach einem Datensatz anhängen DBExecute->Requery ohne Einschränkung DBExcute->SQL es können SQL Kommandos an die Datenbank geschickt werden, für das ändern von Datensätzen sehr sinnvoll. Siehe nächste Folie by Thorsten Zisler Datensätze bearbeiten mit SQL Kommandos Supervisor Script: SQL Befehl um in der Tabelle1 in der Spalte Zähler den Wert zu verändern. SET comandSQL = "UPDATE tabelle1 SET Zähler_1 = " Wert = ValueToText(Count_1_SQL) Einen Supervisor int Punkt in Text wandeln und dem Kommando hinzufügen. comandSQL = comandSQL + Wert comandSQL = comandSQL + " WHERE Position = 0" SQL Befehl um den Wert in jeden Datensatz indem die Spalte Position auf 0 ist einzutragen. bResult = DBExecute( "Verbindung_SQL_dsn", "SQL", comandSQL ) SQL Befehl mit der Methode Execute an die Datenbank schicken. IF !bResult THEN Status_SQL = DBGetLastError( "Verbindung_SQL_dsn", TRUE ) ENDIF 8 by Thorsten Zisler Ist der Rückgabewert = 0 dann letzten Fehler abfragen. 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 9 by Thorsten Zisler Benötigte Punkte Punkt Typ E/A Typ Arraygröße Anlage_aktiv cmdSQL Daten_Anlage1 Daten_Anlage2 Daten_Anlage3 Daten_Anlage4 DB_Anlage DB_Anlage_aktiv DB_Anlage_aktiv1 DB_Anlage_aktiv2 DB_Anlage_aktiv3 DB_Anlage_aktiv4 DB_Daten_Anlage1 DB_Daten_Anlage2 DB_Daten_Anlage3 DB_Daten_Anlage4 DB_Daten1 DB_Daten2 DB_Daten3 DB_Daten4 DB_Daten5 DB_Daten6 DB_Daten7 loop1 Punktezeiger sError_DB sWert Boolean Text Integer Integer Integer Integer Integer Boolean Boolean Boolean Boolean Boolean Integer Integer Integer Integer Integer Integer Integer Integer Integer Integer Integer Integer Text Text Text Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher Speicher 10 1 9 9 9 9 1 1 1 1 1 1 9 9 9 9 1 1 1 1 1 1 1 1 1 1 1 10 Aus / Ein [FALSE] 0 to 99999999 [0] 0 to 99999999 [0] 0 to 99999999 [0] 0 to 99999999 [0] 0 to 99999999 [0] Aus / Ein [FALSE] Aus / Ein [FALSE] Aus / Ein [FALSE] Aus / Ein [FALSE] Aus / Ein [FALSE] 0 to 99999999 [0] 0 to 99999999 [0] 0 to 99999999 [0] 0 to 99999999 [0] -99999999 to 99999999 [0] -99999999 to 99999999 [0] -99999999 to 99999999 [0] -99999999 to 99999999 [0] -99999999 to 99999999 [0] -99999999 to 99999999 [0] -99999999 to 99999999 [0] 0 to 99999999 [0] by Thorsten Zisler Freigabe in die DB schreiben SQL Komando Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Beschreibung Schleifenzähler Beschreibung Fehlermeldung Daten der Wandlung ValueToText Schreiben der Daten in die SQL Datenbank 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 REM Schleife um die Daten zu übertragen FOR loop1= 1 TO 7 cmdSQL = "UPDATE tabelle1 SET " sError_DB = DBGetLastError( "DAS_DB_Anlagen", TRUE ) ENDIF 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 ) ELSE IF !bResult THEN REM Anlage 1 als nicht aktiv melden sError_DB = DBGetLastError( "DAS_DB_Anlagen" , TRUE ) cmdSQL = "UPDATE tabelle1 SET aktiv= 0 WHERE Anlage = 1" bResult = DBExecute( "DAS_DB_Anlagen", "SQL", cmdSQL ) ENDIF NEXT IF !bResult THEN sError_DB = DBGetLastError( "DAS_DB_Anlagen", TRUE ) ENDIF ENDIF 11 by Thorsten Zisler 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 12 by Thorsten Zisler 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. 13 by Thorsten Zisler 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" ) 14 by Thorsten Zisler Hier werden die Punkte angelegten Array Punkte (z.B. SQL_Daten1) aus der Abfrage dargestellt. Hier erfolgt der Zugriff über den Index.