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最新消息

posted @ 2020-05-20 16:41  莱立佰  阅读(2148)  评论(0编辑  收藏  举报