zoukankan      html  css  js  c++  java
  • WinCC OA-CTRL-操作MySQL数据库

    目的

    有的时候我们需要 将WinCC OA里的数据定时的导出,这无可避免的要用到数据库,

    今天就来带领大家 使用control脚本通过ODBC 连接mysql 数据库,读取并写入数据.

    什么是ODBC?

    先套用百度百科:开放数据库连接(Open Database Connectivity,ODBC)是为解决异构数据库间的数据共享而产生的,

    现已成为WOSA(The Windows Open System Architecture(Windows开放系统体系结构))的主要部分和基于Windows环境的一种数据库访问接口标准ODBC 为异构数据库访问提供统一接口,

    允许应用程序以SQL 为数据存取标准,存取不同DBMS管理的数据;

    使应用程序直接操纵DB中的数据,免除随DB的改变而改变。用ODBC 可以访问各类计算机上的DB文件,甚至访问如Excel 表和ASCI I数据文件这类非数据库对象。

    废话太多了,一张图概括

    image

    简而言之 ,就是我在windows 操作系统里要访问数据库(多种数据库)可以通过微软提供的ODBC这个程序,

    使用统一的接口与数据库交互,这样就不用考虑数据库多样性的差异,简化了数据库的操作难度及复杂度

    连接数据库

    OK  知道原理后,来撸点代码

    1) 下载MySQL ODBC 驱动并配置

    ODBC 程序为windows 提供的,但是不同数据库的驱动需要我么手动下载 下载链接ttps://dev.mysql.com/downloads/connector/odbc/

    image

    按图示配置ODBC 连接

    2) 读取数据库内容

    我们在WinCC OA 里新建了一个panel 添加了个按钮,对点击事件进行编辑

    main(mapping event)
    {
      int rc;
      //声明一个dbconnectin类型conn用来管理数据库连接
      dbConnection conn;
      //连接语句 DNS 刚刚起的ODBC实例名字 UID数据库用户名 
      string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;";
      //打开 ODBC 连接
      rc = dbOpenConnection(conStr,conn);
      //SQL 查询语句
      string  queryStr = "SELECT * FROM pump_station";
      //定义一个查询结果集存放数据类型rs 
      dbRecordset rs;
      //执行SQL语句
      rc = dbOpenRecordset (conn, queryStr, rs);
      if (!rc)
      {
        //遍历结果集 打印取出结果
        while (!rc && !dbEOF (rs))
        {
          anytype id,name,addr;
          rc = dbGetField (rs, 0, id);
          rc = dbGetField (rs, 1, name);
          rc = dbGetField (rs, 2, addr);
          DebugN(id,name,addr);
          rc = dbMoveNext (rs);
         }
        dbCloseRecordset (rs);
      }
      //关闭数据库
      dbCloseConnection(conn);
    }

    现在运行下 查看结果

    image

    可以看到查询结果与数据库内容一致

    3) 插入语句

    同样的套路(建panel增加按钮) 直接上代码

    main(mapping event)
    {
      int rc = 0;
      //声明一个dbconnectin类型conn用来管理数据库连接
      dbConnection conn;
      //连接语句 DNS 刚刚起的ODBC实例名字 UID数据库用户名
      string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;";
      //打开 ODBC 连接
      rc = dbOpenConnection(conStr,conn);
      dbCommand dbCmd;
    //配置SQL 语句
      string sql = "INSERT INTO pump_station (id,name,addr) VALUES (?,?,?)";
      rc = dbStartCommand(conn, sql, dbCmd);
    //替换SQL 中的?
      rc = dbSetParameter(dbCmd, 1, DB_PARAM_IN, 1535);
      rc = dbSetParameter(dbCmd, 2, DB_PARAM_IN, "rockwell");
      rc = dbSetParameter(dbCmd, 3, DB_PARAM_IN, "shanghai");
      //执行命令
      rc = dbExecuteCommand(dbCmd);
      //关闭数据库
      dbCloseConnection(conn);
    }

    执行 看数据库结果

    image

    OK  操作成功!

    后记

    结合上一节的定时器 大家可以做些好玩的东西出来

    WinCC OA-CTRL-图形界面の定时器


    扫码关注 及时获取OA最新消息

  • 相关阅读:
    哈利波特买书事件
    闹钟类app构想
    梦断代码(7-尾)
    梦断代码(3-6)
    梦断代码(0-2)
    环形二维数组求最大子矩阵
    数组问题
    电梯考察
    四则运算的三张计划表
    团队开发用户需求调研
  • 原文地址:https://www.cnblogs.com/indus-eric/p/12923810.html
Copyright © 2011-2022 走看看