SQL Access Manager简介

  • SQL Access Manager是InTouch的可选组件。可以使用SQL Access Manager来传输数据,例如从SQL数据库到InTouch应用程序的批处理配方。还可以使用SQL Access Manager将运行时数据、警报状态或历史数据从InTouch应用程序传输到数据库。SQL Access Manager由一个程序和一组SQL函数组成。SQL Access Manager程序创建数据库列并将其与InTouch标记通过绑定列表关联起来。绑定是将数据库列关联到InTouch标记的过程。绑定允许您使用SQL Access Manager直接管理存储在数据库中的InTouch数据。
  • 要点
  • SQL Access Manager函数可以在脚本中使用,脚本可以根据操作符输入、标记值更改或存在一组特定条件时自动运行。这些函数允许您选择、修改、插入或删除要访问的表中的记录。
  • SQL Access Manager将数据库字段名及其关联保存在一个名为SQL. def的逗号分隔的变量文件中。
  • SQL Access Manager还创建表模板,定义InTouch HMI使用的数据库的结构和格式。

  •  

Part01-使用Intouch中的SQL数据库

数据库将信息存储在共享公共属性或字段的表中。结构化查询(SQL)是用于以查询的形式访问信息的语言。SQL Access Manager允许使用查询访问、修改、创建和删除数据库表。

  • 创建并运行复杂的查询,这些查询可以动态构建,也可以保存在外部文件中。此外,这些查询可以包含在运行时传递给查询的参数。
  • 运行数据库支持的SQL语句并从查询中检索结果,还可以使用带有SQL Access Manager的存储过程,尽管并非完全支持所有的存储过程函数。
  • SQL Access Manager支持Oracle、Microsoft SQL Server和Microsoft Access数据库。每个数据库的需求都是独特的。本节包括单独的部分,描述如何配置每个数据库和SQL Access Manager之间的连接。

使用InTouch QuickScript编辑器在QuickScript中插入SQL函数。将SQL函数插入脚本的一般过程包括以下步骤:

将SQL函数添加到脚本

1.启动InTouch WindowMaker。

2.用QuickScript编辑器打开QuickScript。

3.将光标放在要插入SQL函数的脚本中。

4.在“功能”区域,单击“外接程序”以显示“选择功能”对话框。

5.单击要插入到QuickScript中的SQL函数。脚本将更新并显示插入的SQL函数。

intouch 插入mysql部分行数据 intouch连接access数据库_Wonderware

 

打开全部函数面板

intouch 插入mysql部分行数据 intouch连接access数据库_报表_02

可以使用SQL Access Manager来传输数据,例如从SQL数据库到InTouch应用程序的批处理配方。还可以使用SQL Access Manager将运行时数据、警报状态或历史数据从InTouch传输到数据库。例如,在完成一个机器周期之后,公司希望保存几组数据,每组数据用于不同的应用程序。

SQL数据库提供了在一个或多个第三方应用程序之间轻松传输信息的能力。

SQL Access Manager允许在任何InTouch应用程序中访问和显示这些数据。

SQL Access Manager由一个程序和一组SQL函数组成。SQL Access Manager程序创建数据库列并将其通过绑定列表与InTouch标记关联起来。关联数据库列和InTouch数据库标记的过程称为绑定。将

InTouch数据库标记绑定到数据库列允许SQL Access Manager直接操作存储在数据库中的InTouch数据。SQL Access Manager将数据库字段名及其关联保存在一个名为SQL.def的逗号分隔的变量文件中。此文件位于InTouch应用程序文件夹中,可以使用SQL Access Manager或任何文本编辑器(如记事本)查看或修改。SQL Access Manager还创建表模板,定义InTouch使用的数据库的结构和格式。可以在脚本中使用SQL函数,根据操作符输入、标记值更改或存在一组特定条件时自动运行SQL函数。这些函数允许您选择、修改、插入或删除要访问的表中的记录。例如,如果存在警报条件,应用程序可以运行包含SQLInsert()或SQLUpdate()函数的脚本,这些函数保存所有适用的数据点和警报状态。


Part02-将Intouch标记名映射到数据库列

可以将InTouch标记通过绑定列表映射到数据库列,大多数SQL访问函数使用绑定列表来启用InTouch标记来访问SQL数据库表中的数据。

绑定列表将数据库表列与InTouch Tagname字典中的标记关联起来。绑定列表还包括一个表模板,用于描述数据库表的格式并批量建表。

intouch 插入mysql部分行数据 intouch连接access数据库_脚本_03

当您运行一个包含SQLInsert()、SQLSelect()或SQLUpdate()函数的脚本时,Bind列表将被更新,以指定使用哪些InTouch标记以及哪些表列与这些标记相关联。

 

创建一个新的绑定列表:

1.在专用菜单上,指向SQL Access Manager,然后单击Bind List。消息请求确认以创建SQL.DEF文件

2.单击Yes创建SQL.DEF文件,出现“选择绑定列表”对话框

3.单击New“绑定列表配置”对话框出现

4.在“绑定列表名称”框中,键入“绑定列表名称”,绑定列表名称最多可以有32个字符

5.要定义绑定,列表的标签,请执行以下操作之一:

  • 在标签名中,输入一个InTouch标记名。还可以在表单tag_name.dotfield_name中添加可选标记dotfield
  • 双击Tagname选择一个现有的标签,出现“选择标记”对话框。从列表中选择一个标记

注意:I/O类型标记在应用程序中不使用,但在SQL访问绑定列表中指定,一旦WindowViewer启动就会被激活(建议DAServer)

6.选择要在标记后面添加以下内容之一的点域:

  • 在标签名中,在“FieldName”框中,键入句点并在标记名称后键入点域名称
  • 单击字段名,将出现“选择字段名称”对话框。单击要附加到标记的点域

7.在“列名”框中,键入列名。列名的长度可以达到30个字符。如果列名有空格,则在绑定列表中列名周围和在脚本中使用时使用方括号。例如:其中EXPR= "[Valve ID] = " + text (tagname,"#");

8.在绑定列表中定位标签,方法如下:

  • 单击“向上移动”将选中的标签在列表中上移一级
  • 点击“向下移动”,将选中的标签在列表中向下移动一层

9.单击“添加项”添加新标记名。绑定列表的字段名和列名。

10.单击OK保存新的绑定列表配置并关闭对话框。

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_04


Part03-Intouch定义新表结构

表模板定义:在数据库中创建的新表的结构和格式,表模板存储在SQL.DEF文件中,和绑定列表在一个文件里面。

 

创建一个新的表模板

1.在专用菜单上指向SQL Access Manager,然后单击Table Template

2.单击New,出现“表模板配置”对话框

3.在“表格模板名称”框中,键入表格模板的名称。一个没有索引的表模板名最多可以有32个字符。如果要创建索引(惟一或其他),表模板名必须不超过24个字符

4.在“列名”框中,键入表模板的列名。一个列名最多可以有30个字符

5.在“列类型”框中,键入列的数据类型。数据类型的选择根据所使用的数据库的不同而不同

6.在索引类型区域,选择以下选项之一:

  • 惟一性:每个列值必须是惟一的。
  • 非唯一:不要求每个列值都是唯一的。
  • None:无索引

注意:当您运行一个包含SQLCreateTable()函数的脚本时,将自动创建一个索引文件。

7.选择Allow Null Entry允许在该列中输入Null数据。

注意:InTouch不支持空数据。

intouch 插入mysql部分行数据 intouch连接access数据库_Wonderware_05

 

在插入数据时,如果没有为标记输入值,则根据标记的类型分配null值。

Data Type

Value

Discrete  

0

Integer

0

Message

Strings with no characters

8.单击Add Item将新列名、列类型、长度和索引类型添加到表模板。

9.单击OK保存新表模板配置并关闭对话框。

修改表模板

1.在专用菜单上,指向SQL Access Manager,然后单击Table Template。出现“选择表模板”对话框。

2.选择要修改的表模板名,然后单击modify。出现“表模板配置”对话框。

3.修改要求的项目。

4.单击OK保存您的更改并关闭对话框。

 

要删除表模板

1.在专用菜单上,指向SQL Access Manager,然后单击Table Template。出现“选择表模板”对话框。

2.选择要删除的表模板名。

3.单击“删除”。出现一条消息,请求确认删除表模板。

4.点击Yes。“表模板配置”对话框重新出现。

5.点击OK关闭对话框。


Part04-在Intouch中执行常见的SQL操作

InTouch使用SQL访问函数与存储在数据库中的信息进行交互。这些SQL访问函数使您能够编写选择、修改、插入或删除数据库记录的脚本。SQL操作是同步的。当从InTouch应用程序运行数据库QuickScript时,控件不会返回InTouch,直到函数请求的数据库操作完成。当在引号包围的脚本字符串(“Arg1”)中输入参数时,将使用该字符串。如果没有使用引号,则将参数值假定为标记名,并且标记的当前值与该参数相关联。大多数SQL函数返回结果代码。如果结果代码是非零的,则函数失败,并应采取其他操作。

SQLErrorMsg()函数返回报错信息

 

与SQL访问函数相关的参数包括:
•BindList:对应于SQL中定义的绑定列表SQL.DEF文件名称。
•ConnectionID:参数引用一个内存整数标记的名称,该标记保存SQLConnect()函数分配给每个数据库连接的编号(ID)。
•ConnectStringConnectString:识数据库系统和任何其他登录信息。输入的格式如下:
"DSN=data source name[;attribute=value
 [;attribute=value]...]" 
Microsoft SQL Server连接字符串
•  Microsoft OLE DB Provider for SQL Server (推荐使用).
"Provider=SQLOLEDB.1;User ID=sa; Password=;Initial Catalog=MyDB;Data Source=MyServer;"
 The OLE DB Provider for SQL Server is sqloledb.
 •  Microsoft OLE DB Provider for SQL Server (推荐使用)"Provider=SQLOLEDB.1;uid=sa;pwd=;Database=MyDB"
 •  Microsoft OLE DB Provider for ODBC (使用默认的SQL Server提供者 MSDASQL):"DSN=Pubs;UID=sa;PWD=;"
 •  Microsoft OLE DB Provider for ODBC (使用默认的SQL Server提供者 MSDASQL):"Data Source=Pubs;User ID=sa;Password=;"

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_06

Microsoft Access连接字符串

Microsoft OLE DB Provider for Microsoft Jet (推荐使用). Microsoft.Jet.OLEDB.4.0 是Microsoft Jet (Microsoft Access数据库引擎)的本地OLEDB提供商。
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\DBName.mdb;User ID=UserIDStr;Password=PasswordStr;"
 Microsoft OLE DB Provider for ODBC (使用默认的MS Access提供者 MSDASQL):
 "Provider=MSDASQL;DSN=DSNStr;UID=UserName; PWD=PasswordStr;"

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_07


Part05-理解SQL错误消息

SQL Access Manager结果代码和错误表消息

SQLErrorMsg() 函数:所有SQL函数都返回一个可用于故障诊断的结果代码。

函数的作用是:返回与结果代码相关联的错误消息,并将其赋值为InTouch消息标记的值。

ErrorMsg=SQLErrorMsg(ResultCode);

 

下表列出了一些常见的SQL访问结果代码、对应的错误消息和描述:

返回值

代码错误信息

描述

0

没有错误发生 

QL函数成功运行,没有错误。 

-1

<来自数据库提供程序的消息>

来自供应商数据库的特定错误消息

-2


无法执行空语句

SQLExecute(ConnectionId, BindList, 0)在没有使用非空语句调用SQLSetStatement或SQLLoadStatement的情况下运行。

-4

返回的值为Null

从数据库读取的整数或实值为null。这只是发送到Wonderware日志查看器的警告消息。

-5

不再需要获取行

已经到达表中的最后一条记录.

-7

无效的参数ID

SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(), SQLSetParamDateTime(), SQLSetParamDecimal(), SQLSetParamFloat(), SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(),或使用无效的参数ID调用SQLSetParamTime()函数。       

-8

无效的参数列表

无效参数列表的示例:1、2、3、5(缺少4).

-9

NULL参数的类型无效

使用无效的类型参数值调用SQLSetParamNull函数

-10


不允许更改参数的数据类型

调用SQLSetParamChar()、SQLSetParamDate()、SQLSetParamDateTime()、SQLSetParamDecimal()、SQLSetParamFloat()、SQLSetParamInt()、SQLSetParamLong()、SQLSetParamNull()或SQLSetParamTime()函数时,对现有参数使用不同的类型。

-11

不允许在语句成功执行后添加参数

SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(), SQLSetParamDateTime(), SQLSetParamDecimal(), SQLSetParamFloat(), SQLSetParamInt(), SQLSetParamLong(), SQLSetParamNull(),或SQLSetParamTime()函数在语句成功运行后为新参数ID调用。

-12

无效的日期时间格式

例如,在执行SQLSetParamTime()、SQLInsertExecute()或SQLUpdateCurrent()时,会遇到无效的日期时间格式。

-13

无效的十进制格式

例如,在执行SQLSetParamDecimal()、SQLInsertExecute()或SQLUpdateCurrent()时,会遇到无效的小数格式.

-14

无效的当前格式

例如,在执行SQLInsertExecute()或SQLUpdateCurrent()时,会遇到n个无效的当前格式。

-15

此操作的语句类型无效

SQLPrepareStatement()创建的语句ID调用SQLInsertEnd或SQLClearStatement()被调用,以获取由SQLInsertPrepare()创建的语句ID。

-1001

内存不足

内存不足,无法运行此函数

-1002

无效的连接

传递给ConnectionId参数的值无效.

-1003

未找到绑定列表

指定的绑定列表名称不存在.

-1004

没有找到模板

指定的表模板名称不存在.

-1005

内部错误

发生内部错误。电话技术支持.

-1006

字符串为空

警告-从数据库读取的字符串为空。这只是发送到Wonderware日志查看器的警告消息.

-1007

字符串被截断

警告——从数据库中读取的字符串长度超过131个字符,并且在选中时被截断。警告被发送到Wonderware日志查看器。

-1008

没有Where子句

删除时没有Where子句.

-1009

连接失败

有关数据库连接失败的更多信息,请查看Wonderware日志查看器。

-1010

连接字符串的DB=部分上指定的数据库不存在

指定的数据库不存在

-1011

没有选择行

调用SQLNumRows()、SQLFirst()、SQLNext()、SQLLast()或SQLPrev()函数时,不需要首先运行SQLSelect()或SQLExecute()函数。

-1013

无法找到要加载的文件

使用找不到的文件名调用SQLLoadStatement()


Part06-Intouch SQL Access Manager案例

新建数据库

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_08

输入数据库名:ReportDB,确定

intouch 插入mysql部分行数据 intouch连接access数据库_Wonderware_09

 

生成数据库

intouch 插入mysql部分行数据 intouch连接access数据库_Wonderware_10

 

绘制数据库界面:

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_11

 

连接数据库

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_12

 

监控数据库连接的状态

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_13

 

断开数据库

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_14

 

新建绑定列表:Bind1,Intouch标记名为:Tag01,Tag02,Tag03,Tag04,Tag05,Tag06,Tag07,Tag08,数据库表字段(列名)为:Tag01,Tag02,Tag03,Tag04,Tag05,Tag06,Tag07,Tag08

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_15

 

创建表模板:Template,表字段(列名)为:Tag01,Tag02,Tag03,Tag04,Tag05,Tag06,Tag07,Tag08

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_16

 

新建数据库表:tbTag

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_17

 

查询数据库表所有数据:

intouch 插入mysql部分行数据 intouch连接access数据库_Wonderware_18

 

查询数据库表第一行数据:

intouch 插入mysql部分行数据 intouch连接access数据库_Wonderware_19

 

查询数据库表当前行的上一条数据:

intouch 插入mysql部分行数据 intouch连接access数据库_脚本_20

 

查询数据库表当前行的下一条数据:

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_21

 

查询数据库表最后一行数据:

intouch 插入mysql部分行数据 intouch连接access数据库_报表_22

 

删除数据库表

intouch 插入mysql部分行数据 intouch连接access数据库_数据库_23

 

写入一条数据

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_24

 

修改当前行数据

intouch 插入mysql部分行数据 intouch连接access数据库_报表_25

 

运行画面,连接数据库

intouch 插入mysql部分行数据 intouch连接access数据库_报表_26

 

点击新建表,则数据库自动生成一张新表

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_27

 

写入多条数据后,可以查询所有想要查的数据

intouch 插入mysql部分行数据 intouch连接access数据库_intouch_28