Cómo se accede a una base de datos SQL en el WinCC flexible

15
¿Cómo se accede a una base de datos SQL en el WinCC flexible, con ayuda de un Script? Mostrar referencias Instrucciones: El acceso a una base de datos SQL se realiza normalmente en el WinCC flexible a través de Scripts - excepto el archivo de variables o avisos. Para acceder a una base de datos SQL, tiene que crearse en un servidor SQL. El WinCC flexible PC Runtime funciona como cliente SQL. Advertencia: En un panel basado en Windows CE, en principio no se puede acceder a una base de datos SQL. Requerimientos: Servidor SQL 1 La fuente de datos SQL tiene que crearse en Windows WinCC flexible Advanced WinCC flexible PC Runtime 1 El SQL Server utilizado también tiene que estar liberado para el sistema operativo (los que también están liberados para el WinCC flexible). Contenido: El artículo contiene ejemplos de código para las siguientes aplicaciones SQL: 1. Base de datos SQL 1.1 Creación de una base de datos SQL 1.2 Borrado de una base de datos SQL 2. Tablas 2.1 Creación de tablas 2.2 Copia de tablas 2.3 Borrado de tablas 3. Bloques de datos 3.1 Lectura de bloques de datos 3.2 Escritura de bloques de datos 3.3 Elaboración de bloques de datos 3.4 Borrado de bloques de datos 4. Tablas de bloques de datos

Transcript of Cómo se accede a una base de datos SQL en el WinCC flexible

Page 1: Cómo se accede a una base de datos SQL en el WinCC flexible

¿Cómo se accede a una base de datos SQL en el WinCC flexible, con ayuda de un Script?

Mostrar referencias

Instrucciones:El acceso a una base de datos SQL se realiza normalmente en el WinCC flexible a través de Scripts - excepto el archivo de variables o avisos. Para acceder a una base de datos SQL, tiene que crearse en un servidor SQL. El WinCC flexible PC Runtime funciona como cliente SQL.

Advertencia:En un panel basado en Windows CE, en principio no se puede acceder a una base de datos SQL.

Requerimientos:

Servidor SQL1

La fuente de datos SQL tiene que crearse en Windows

WinCC flexible Advanced

WinCC flexible PC Runtime

1 El SQL Server utilizado también tiene que estar liberado para el sistema operativo (los que también están liberados para el WinCC flexible).

Contenido:El artículo contiene ejemplos de código para las siguientes aplicaciones SQL:

1. Base de datos SQL 1.1 Creación de una base de datos SQL1.2 Borrado de una base de datos SQL

2. Tablas 2.1 Creación de tablas2.2 Copia de tablas2.3 Borrado de tablas

3. Bloques de datos 3.1 Lectura de bloques de datos3.2 Escritura de bloques de datos3.3 Elaboración de bloques de datos3.4 Borrado de bloques de datos

4. Tablas de bloques de datos 4.1 Lectura de todos los datos de una tabla4.2 Escritura de todos los datos en una tabla

5. Download

Indicación:Estos ejemplos son tan sólo propuestas - lógicamente, son posibles otras soluciones.

Advertencia sobre la literatura:

Page 2: Cómo se accede a una base de datos SQL en el WinCC flexible

Información adicional sobre las instrucciones SQL, así como sobre el acceso a las bases de datos SQL, está disponible en diversa literatura y en Internet.

Página Web en inglés: http://www.sqlcommands.net/ Página Web en alemán: http://ffm.junetz.de/members/reeg/DSP/node10.html

Creación de una fuente de datosPara poder crear un acceso a una fuente de datos ODBC, hay que crear una fuente de datos primero. Estas se pueden crear en el panel de control de Windows, desde la opción "Administración -> Fuentes de datos (ODBC)" - consulte la página del Customer Support con número ID 24677043.

En el siguiente ejemplo, se utiliza la fuente de datos "Database_1" conectada con el servidor SQL "WINCCFLEXIBLE".

Figura 01

1. Base de datos SQLEn una base de datos SQL, se pueden crear una o varias tablas, la cuales pueden tener diferentes estructura.   

1.1 Creación de una base de datos SQLLa instrucción "On Error Resume Next" es necesaria en caso de que aparezca un error en tiempo de ejecución en el Script. En cuanto aparezca dicho error, se ejecuta automáticamente la siguiente línea, en la que se encuentra la rutina de fallo.

El objeto "ADODB.Connection" es necesario para que se cree un enlace con una base de datos SQL. Con ayuda de "ADODB.Recordset", se pueden crear, modificar, o borrar  tablas o bases de datos.

Para poder abrir una fuente de datos, hay que conocer el proveedor y el nombre de la fuente de datos. La conexión con la fuente de datos se realiza a través del método "Open" de la variable de objeto "conn".

Si aparece un error de ejecución al crear el enlace, aparece la siguiente rutina de error, en el que se muestra un aviso del sistema y se cierra el Script inmediatamente.

Con ayuda de la instrucción SQL "CREATE DATABASE", y el nombre de la base de datos, se crea una nueva base de datos con el método "Execute (tabla SQL)" de la varianble objeto "conn".

Page 3: Cómo se accede a una base de datos SQL en el WinCC flexible

Si la base de datos ya existe, se ejecuta la rutina de error ya conocida. Con el método "Close", se rompe la conexión con la fuente de datos.

Figura 02

Sintaxis SQL:CREATE DATABASE <Nombre de la base de datos> 

1.2 Borrado de una base de datos SQLLa estructura del Scripts es en principio igual al Script "Create_database". Con ayuda de la instrucción SQL "DROP DATABASE", y el nombre de la base de datos, se puede eliminar ésta.

Figura 03

Sintaxis SQL:DROP DATABASE <Nombre de la base de datos>

2. Tablas 

En cada base de datos SQL, se pueden crear tablas que tengan una estructura de datos individual. En el siguiente código ejemplo, se crea la estructura de datos de la tabla 01: 

Page 4: Cómo se accede a una base de datos SQL en el WinCC flexible

Estructura de datos de la tabla

Columna 1 2 3 4

Tipo de datos SMALLINT Char(30) SMALLINT SMALLINT

Tabla 01 - Estructura de datos de la tabla

La agrupación de la estructura de datos de una tabla puede ser cualquiera. El proyecto ejemplo en el anexo también utiliza esta estructura de datos.

2.1 Creación de tablasPara abrir una fuente de datos y acceder a una base de datos de esta fuente, se necesitan en el Script el objeto "ADODB.Connection" para la creación del enlace y el objeto "ADODB.Recordset" para el tratamiento de la fuente de datos.

Con ayuda del parámetro "Initial Catalog" del método "Open", se realiza la creación del enlace con una determinada base de datos de la fuente de datos. La fuente de datos  "Database_1" creada en Windows se indica en el parámetro "DSN".

Una tabla SQL se crea con la instrucción SQL "CREATE TABLE" indicando el nombre y la estructura (de datos) de la tabla.

Figura 04

Sintaxis SQL:CREATE TABLE <Nombre de la tabla> (Nombre de la columna Tipo, ...)

Advertencia:Para esta instrucción SQL "CREATE TABLE" se dispone de otras instrucciones adicionales. 

2.2 Copia de tablasPara el acceso, se necesitan los objetos "ADODB.Connection" y "ADODB.Recordset".

Con ayuda de la instrucción SQL "SELECT * INTO" y el anexo de instrucción "FROM", se copian todos los bloques de datos de la tabla correspondiente en

Page 5: Cómo se accede a una base de datos SQL en el WinCC flexible

una nueva tabla. La instrucción "SELECT *" es sinónima a la instrucción "SELECT ALL" y selecciona todos los bloques de datos de la tabla que se han indicado con el anexo "FROM". La tabla destino se define con "INTO".

Advertencia:La instrucción SQL "SELECT" se puede combinar opcionalmente con otros parámetros de instrucción. Información adicional al respecto se puede conseguir en la literatura correspondiente o en Internet.

Figura 05

Sintaxis SQL:SELECT <Expresión> INTO <Nombre de la tabla nueva> FROM <Nombre de la tabla existente>

Advertencia:La instrucción SQL "SELECT" tiene otras combinaciones de instrucciones. 

2.3 Borrado de tablasPara borrar una tabla, tiene que estar creada la conexión con la fuente de datos correspondiente. Con ayuda de la instrucción "DROP TABLE", y el nombre de la tabla, se elimina la tabla de la base de datos.  

Figura 06

Sintaxis SQL:

Page 6: Cómo se accede a una base de datos SQL en el WinCC flexible

DROP TABLE <Nombre de la tabla>

Advertencia:No hay ninguna consulta previa de si esta tabla se debe borrar o no verdaderamente. Con el borrado, se borran todos los datos de la tabla irremediablemente.

3. Bloques de datosCada tabla SQL contiene un número determinado de bloques de datos. La estructura de los bloques de datos depende de la estructura de datos de la tabla.

3.1 Lectura de bloques de datosLa lectura de los bloques de datos se realiza - tal como ya se ha mencionado - a través de los 2 objetos ADODB.

Primero se seleccionan todos los bloques de datos de la tabla en la base de datos, con ayuda de la instrucción SQL "SELECT * FROM", y el nombre de la tabla. 

  Columna 1 Columna 2 Columna 3

>> Fecha 10 Fecha 20 Fecha 31

>> Fecha 11 Fecha 21 Fecha 32

>> Fecha 12 Fecha 22 Fecha 33

Tabla 02 - Repercusión de la instrucción SQL "SELECT * FROM"

Con ayuda del anexo de instrucción "WHERE", indicando la columna / nº de bloque de datos, se selecciona el bloque de datos indicado en la tabla. 

  Columna 1 Columna 2 Columna 3

  Fecha 10 Fecha 20 Fecha 31

>> Fecha 11 Fecha 21 Fecha 32

  Fecha 12 Fecha 22 Fecha 33

Tabla 03 - Repercusión de la instrucción "WHERE Columna 1 = 1"

Page 7: Cómo se accede a una base de datos SQL en el WinCC flexible

Figura 07

Sintaxis SQL:SELECT <Expresión> FROM <Nombre de la tabla> WHERE <Condición>

Advertencia:La instrucción SQL "SELECT" tiene otras combinaciones de instrucciones.

Con ayuda de la instrucción "IF", junto con "rst.EOF" y "rst.BOF", se comprueba si se dispone del bloque de datos seleccionado. Si el bloque de datos elegido está disponible, se vuelve al primer bloque de datos con ayuda de "rts.MoveFirst".

Las denominaciones de la columnas se pueden indicar con ayuda de la siguiente sintaxis:

szColumnName_1 = rst.Fields(1).Name

Para acceder a cada uno de los datos de los bloques de datos, se puede utilizar la siguiente sintaxis:

nDataRecord_2 = rst.Fields(2).Value

Figura 08 

3.2 Escritura de bloques de datosEl acceso se realiza a través de los mismos objetos que en la lectura de bloques de datos de una tabla SQL.Con ayuda de la instrucción SQL "SELECT * FROM", y el nombre de la tabla y el anexo de instrucción "WHERE", se selecciona el bloque de datos

Page 8: Cómo se accede a una base de datos SQL en el WinCC flexible

correspondiente - suponiendo que ya esté disponible.  

Figura 09

Sintaxis SQL:SELECT <Expresión> FROM <Nombre de la tabla> WHERE <Condición>

Advertencia:La instrucción SQL "SELECT" tiene otras combinaciones de instrucciones.

Si el bloque de datos no existe, el puntero se resetea a la primera entrada de la tabla. La comprobación de si el bloque de datos ya está disponible se realiza con ayuda de las consultas  "EOF = End of File" y "BOF = Begin of File". Si el bloque de datos indicado ya está disponible, la consulta devuelve el valor "FALSE", en caso contrario devuelve el valor "TRUE".Para insertar un bloque de datos, se necesita la instrucción SQL "INSERT INTO" y el nombre de la tabla SQL. Adicionalmente, mediante el anexo "VALUES", se indican todos los parámetros que se deben insertar en la tabla (separados por coma).La instrucción SQL se ejecuta con el método "Execute" de la variable de objeto "conn".

Figura 10

Sintaxis SQL:INSERT INTO <Nombre de la tabla> VALUES <Valores, ...> 

3.3 Elaboración de bloques de datosEl requerimiento para el acceso a la fuente de datos son los 2 objetos ADODB. Después de abrir la base de datos con el método "open", se realiza la selección del bloque de datos indicado - en caso de que el bloque de datos esté disponible.

Page 9: Cómo se accede a una base de datos SQL en el WinCC flexible

Figura 11

Sintaxis SQL:SELECT <Expresión> FROM <Nombre de la tabla> WHERE <Condición>

Advertencia:La instrucción SQL "SELECT" tiene otras combinaciones de instrucciones.

Si el bloque de datos está disponible con ayuda de las consultas "EOF" y "BOF", primero se indica en el Script la denominación de las columnas de la tabla.A continuación, se indican los elementos del bloque de datos con ayuda de la instrucción SQL "UPDATE", y el nombre de la tabla SQL y el anexo "Set". La ejecución de la instrucción SQL se realiza con ayuda de "conn.Execute (tabla SQL)".

Figura 12

Sintaxis SQL:UPDATE <Nombre de la tabla> SET <Nombre de la columna = Nuevo valor, ...>

Advertencia:Para esta instrucción SQL se dispone del anexo de instrucciones "WHERE < >". 

3.4 Borrado de bloques de datosPara el acoplamiento a la base de datos SQL, se necesitan los 2 objetos ADODB.Para borrar un bloque de datos de una base de datos, ésta debe estar abierta. Para borrar un bloque de datos, se necesita la combinación de instrucciones "DELETE FROM" (indicando la tabla SQL) y el anexo "WHERE" (con la comparación del número del bloque de datos y la columna correspondiente).

Page 10: Cómo se accede a una base de datos SQL en el WinCC flexible

Junto con la instrucción "conn.Execute (tabla SQL)", se borra el bloque de datos indicado.

Figura 13

Sintaxis SQL:DELETE FROM <Nombre de la tabla> WHERE <Condición>

Advertencia:El bloque de datos seleccionado se borra irremediablemente sin consulta previa.

4. Tablas de bloques de datosCon ayuda de las instrucciones SQL, también es posible mostrar todo el contenido o sólo varios bloques de datos de una tabla SQL. El requerimiento necesario para el acceso a una base de datos SQL es disponer de los objetos "ADODB.Connection" y "ADODB.Recordset".

4.1 Lectura de todos los datos de la tablaLos bloques de datos de una base de datos SQL no tienen porqué guardarse siguiendo una secuencia cronológica. Por eso, hay que ordenar la tabla para mostrarla con la secuencia correcta. Para ordenar una tabla según una columna, se necesita el nombre de dicha columna. Debido a que en este ejemplo los nombres de las columnas son variables, hay que leerlos de forma explícita.

Para leer una tabla SQL completa, se indica toda la tabla con ayuda de la instrucción SQL "SELECT * FROM" (indicando el nombre de dicha tabla SQL), al ejecutar el método  "Execute".

El contenido de la tabla se asigna a la variable de objeto "rst". Por medio de esta variable de objeto se puede indicar el nombre de la columna, según la cual se debe ordenar la tabla. Con ayuda de la misma instrucción SQL y el anexo "ORDER BY" (indicando el nombre de la columna), la tabla se ordena de manera ascendente.

Page 11: Cómo se accede a una base de datos SQL en el WinCC flexible

Figura 14

Sintaxis SQL:SELECT <Expresión> FROM <Nombre de la tabla> ORDER BY <Nombre de la columna> ASC

Advertencia:El orden ascendente se realiza con ayuda de la instrucción "ASC" y el descendente con la instrucción "DESC". Sin datos adicionales, el orden estándar es ascendente. La instrucción SQL "SELECT" se puede combinar con otras instrucciones.

Con ayuda del bucle "Do...Loop Until" y la instrucción "MoveNext", se obtiene el número de entradas de la tabla. A continuación, el puntero se resetea hacia la primera entrada de la tabla por medio de la instrucción "MoveFirst" de la variable de objeto "rst".

Debido a que en este ejemplo sólo se muestran simultáneamente 6 entradas de la tabla como máximo, el trozo de la la misma se puede desplazar en el proyecto del WinCC flexible con ayuda de la teclas de las flechas. Para ello, el valor de la variable "Tab" puede moverse entre cero y el número de entradas menos el número de los bloques de datos a mostrar. Cuando el trozo de la tabla se desplaza, el puntero de la tabla SQL también se tiene que desplazar. Esto se realiza con la instrucción "MoveNext".

Figura 15

Para acceder a los datos individuales del bloque de datos, se puede utilizar la siguiente sintaxis:

Value_1_0 = rst.Fields(0).ValueValue_1_1 = rst.Fields(1).ValueValue_1_2 = rst.Fields(2).Value

Page 12: Cómo se accede a una base de datos SQL en el WinCC flexible

Bild 16

4.2 Escritura de todos los datos de una tablaDespués de que la fuente de datos se haya abierto, cada uno de los bloques de datos se lee con ayuda de la instrucción SQL "SELECT * FROM" (y el nombre de la tabla) y el anexo "WHERE" (comparando el contenido de la columna indicada y el dato del bloque de datos).

Figura 17

Sintaxis SQL:SELECT <Expresión> FROM <Nombre de la tabla> WHERE <Condición>

Advertencia:La instrucción SQL "SELECT" se puede combinar con otras instrucciones.

Con ayuda de los métodos "EOF = End of File" y "BOF = Begin of File" en la variable de objeto "rst", se averigua si el bloque de datos está disponible. Si no es así, el puntero de área se resetea hacia la primera entrada.

Si el bloque de datos está dentro de la tabla, éste se sobrescribe con los nuevos parámetros con ayuda de la instrucción SQL "UPDATE". Si el bloque de datos no está dentro de la tabla, se inserta dentro ésta por medio de la instrucción SQL "INSERT INTO".

Page 13: Cómo se accede a una base de datos SQL en el WinCC flexible

Figura 18

Sintaxis SQL:UPDATE <Nombre de la tabla> SET <Nombre de la columna = Nuevo valor, ...> WHERE <Condición>

Sintaxis SQL:INSERT INTO <Nombre de la tabla> VALUES <Valores, ...>

5. DownloadEl siguiente Download contiene el proyecto ejemplo con todos los ejemplos indicados, incluidos los Scripts.

WinCC_flexible_Access_to_SQL_via_script.zip ( 1980 KB )

 Funcionalidad y condiciones del test:En la siguiente tabla se muestran los componentes, con los que se ha creado este artículo y se ha comprobado la funcionalidad descrita: