组态系统与关系型数据库

Navigation:  组态系统介绍 >

组态系统与关系型数据库

Previous pageReturn to chapter overviewNext page

本章介绍如何在组态画面中连接数据库,对数据库进行查询、插入等操作。
 

要在组态画面中连接数据库,首先需要在全局配置中进行绑定表配置,然后再通过组态脚本调用dbaccess的方法,完成数据库的连接以及一系列操作。

 

u绑定表配置

u脚本方法

连接数据库

设置是否使用数据库远程代理服务

设置数据库代理服务IP

设置数据库代理服务SCADA

连接数据库

代码示例

断开数据库

检索数据(返回到绑定表)

查询数据

获取记录集中的数据

获取记录集总行数

获取某条记录中的某列值

结束查询

检索数据(返回多维数组)

插入数据

更新数据

删除数据

执行sql语句

开始\提交\回滚事务

开始事务

提交事务

回滚事务

各种数据库对DBACcess的方法的支持情况如下:

ztdesign_fordatabase_4


 

u脚本方法

连接数据库

设置是否使用数据库远程代理

 

VARIANT SetLocal(long flag)

设定连接本地数据库还是通过iCV数据库代理访问服务远程访问数据库。

 

参数和返回值说明:

flag:标志位,1为使用本地服务连接数据库,0为通过iCV数据库代理访问服务(dbproxyservice)访问数据库

VARIANT: 返回错误码,0为成功,其他为失败,如果返回值为-1,请检查这个icv系统中,是否配置了HMI客户端,以及可以访问的scada,如果没有配置,请配置。

 

该方法适合在以下场景使用: 对于某些数据库,例如Oracle,现场每台iCentroView客户端都需要安装Oracle的客户端才能访问。为了减轻安装数据库等工作,iCentroView提供了—数据库访问代理服务dbproxyservice。启动“数据库代理访问服务”后,使用DBAccess控件的iCentroView客户端不再需要安装数据库的客户端。

 

设置数据库代理服务IP

 

VARIANT SetProxyIP(string strIP)

设定数据库代理服务的IP地址,如果使用了SetLocal接口,并且参数为0,即SetLocal(0),则可以使用本接口指定代理服务IP;如果不使用本接口指定IP,则使用中央权限服务器作为代理服务器。

注意:在SetLocal(1)的情况下不需要调用此接口。

 

参数和返回值说明:

strIP:IP地址

VARIANT: 返回错误码,0为成功,其他为失败

 

设置数据库代理服务SCADA

 

VARIANT SetScada(string scadaname)

设定数据库代理服务对应的scadaname,如果使用了SetLocal接口,并且参数为0,即SetLocal(0),则可以使用本接口指定代理服务对应的scada(本接口对应SetProxyIP的优势在于支持主备切换);如果不使用本接口指定IP,则使用中央权限服务器作为代理服务器。

注意:在SetLocal(1)的情况下不需要调用此接口。

 

参数和返回值说明:

scadaname:iCentroView系统中配置的scada名

VARIANT: 返回错误码,0为成功,其他为失败

 

连接数据库

 

VARIANT SQLConnectEx long& connectionID, string connectionString, string userName, string password, long databaseType, long lTimeOut, string charSet

连接数据库。

 

参数和返回值说明:

connectionID:连接ID,为返回值。

connectionString:连接字符串

ODBC:为ODBC中配置的DSN。

Oracle:Oracle客户端中配置的网络服务名,如 iCVdb

SQL Server:“服务器IP@数据库名称”,如 168.2.8.135@iCVdb

DB2:DB2客户端中配置的数据库实例别名,如 myDB

MySQL:“服务器IP@数据库名称”,如 168.2.8.135@iCVdb

PostgreSQL:“服务器IP@数据库名称”,如10.251.20.24@peoplecount

SQLite:文件名路径,如 D:\SQLiteSpy.db3

注意:若使用了数据库代理,此处配置的DSN,Oracle客户端中的网络服务名,DB2客户端中配置的数据库实例别名都需要按照实际使用的代理服务器上的相应信息进行配置。

userName:数据库用户名

password:数据库用户密码

databaseType:连接的数据库类型

odbc=1,oracle=2,sqlserver=3,db2=6,mysql=9,PostgreSQL=10,sqlite=11

注意:此处使用的类型需要与connectionString中的类型一致。

lTimeOut:超时时间设置,单位为秒。

SQL Server,Mysql, SQLite类型的数据库支持设置超时时间。

Oracle,DB2,ODBC暂不支持超时设置,此参数需要设置为0.

charSet:连接字符集,如latin1,utf8,gbk

Oracle,MySQL,PostgreSQL,Sybase,InterBase支持编码集设定。具体的编码集请查阅相关数据库的文档。

VARIANT: 返回错误码,0为成功,其他为失败

要实现MySQL的连接,必须依赖于对应的libmysql.dll 。由于MySQL版本较多,为了保证匹配,在工程启动前,需要将对应的libmysql.dll拷贝到iCentroView安装目录下的executable目录下。

 

代码示例

点击按钮,通过iCV数据库代理访问服务远程访问数据库。

 

Sub BSButton1_OnClick()

DBAccess.SetLocal(0)

DBAccess.SetProxyIP ("168.2.237.147")    '注意,SetProxyIP和SetScada同时只有一个能生效,后调用的生效。

DBAccess.SetScada ("scadamain")

DBAccess.SQLConnectEx(connectionID,"odbc","root","root",1,0,"gbk")

msgbox connectionID

End Sub

运行该脚本后,弹出的提示信息为连接ID。

 

断开数据库

VARIANT SQLDisconnect(long connectionID)

与数据库断开连接

 

参数和返回值说明:

connectionID:连接ID。为使用SQLConnectEx时返回的connectionID。

VARIANT:返回错误码,0为成功,其他为失败。

 

代码示例:

点击按钮,断开SQL Server数据库tempdb。

 

Sub BSButton1_OnClick()

   DBAccess.SQLDisconnect connectionID

End Sub

 

检索数据(返回到绑定表)

查询数据

VARIANT SQLSelect(long connectionID, long& queryID, string tableName, string bindList, string WhereExpression, string OrderByExpression)

按条件从表中查询数据,并返回queryID,其他接口可通过queryID查看查询结果。

 

参数和返回值说明:

connectionID:连接ID。为使用SQLConnectEx时返回的connectionID。

queryID:查询ID,为返回值。

tableName:数据库中的表名。

bindList:绑定表配置中配置的绑定表名。

WhereExpression:条件查询语句。

OrderByExpression:排序语句(默认为升序),如果需要降序加上DESC。此处还可以添加limit 语句来限制返回记录数。

VARIANT: 返回错误码,0为成功,其他为失败

注意:在查询结果使用完毕后,需要调用SQLEND 来结束查询,否则未结束的查询将继续占用内存造成内存泄露。

 

代码示例:

点击按钮,在Keys表中,以KeyID列从大到小排序,查询keyID小于10的数据,并显示第一行的数据。

 

Sub BSButton1_OnClick()

DBAccess.SQLSelect connectionID, queryID, "Keys", "TestTable2", "where KeyID < 10", "Order By KeyID Desc limit 60"

'注意,此处执行完毕后,只是完成了查询并返回了queryID,获取查询结果中的记录需要调用获取记录集中的数据相关接口

DBAccess.SQLNext connectionID, queryID

'执行该接口后,将查询结果的第一条记录赋值给绑定表

End Sub

 

获取记录集中的数据

VARIANT SQLFirst(long connectionID, long queryID)

返回记录集第一行的数据到绑定表对应的tag点值

VARIANT SQLNext(long connectionID, long queryID)

返回记录集下一行的数据到绑定表对应的tag点值

VARIANT SQLPrev(long connectionID, long queryID)

返回记录集前一行的数据到绑定表对应的tag点值

VARIANT SQLLast(long connectionID, long queryID)

返回记录集最后一行的数据到绑定表对应的tag点值

VARIANT SQLGetRecord(long connectionID, long queryID, long recordNumber)

取得记录集第n行的数据到绑定表对应的tag点值

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

queryID:查询ID,为使用SQLSelect时返回的queryID。

recordNumber:行号。

VARIANT 返回错误码,0为成功,其他为失败

 

代码示例:

点击按钮1,获得记录集的第一行数据;点击按钮2,获得记录集的下一行数据;点击按钮3,获得记录集的前一行数据;点击按钮4,获得记录集的最后一行数据。点击按钮5,获取第2行的记录

 

Sub BSButton1_OnClick()

   DBAccess.SQLFirst connectionID, queryID

End Sub

Sub BSButton2_OnClick()

   DBAccess.SQLLast connectionID, queryID

End Sub

Sub BSButton3_OnClick()

   DBAccess.SQLPrev connectionID, queryID

End Sub

Sub BSButton4_OnClick()

   DBAccess.SQLNext connectionID, queryID

End Sub

Sub BSButton5_OnClick()

  DBAccess.SQLGetRecord connectionID, queryID, 2

End Sub

 

获取记录集总行数

VARIANT  SQLNumRows(long connectionID, long queryID)

取得记录集的总行数,总行数在返回值中,如果没有查询过,或者出现异常错误,返回-1

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

queryID:查询ID,为使用SQLSelect时返回的queryID。

VARIANT: 返回总行数,,如果没有查询过,或者出现异常错误,返回-1

 

代码示例:

点击按钮,弹出信息框,提示记录集的总行数。

 

Sub BSButton1_OnClick()

   MsgBox DBAccess.SQLNumRows(connectionID, queryID)

End Sub

 

获取某条记录中的某列值

VARIANT SQLGetValueByField(long connectionID, long queryID, string fieldname)

返回某行记录中对应fieldname这一列的值

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

queryID:查询ID,为使用SQLSelect时返回的queryID。

fieldname: 表中的列名称

VARIANT 返回错误码,0为成功,其他为失败

注意,获取该值的前提是已经通过调用获取记录集中的数据相关接口指定到其中一行记录。

 

代码示例:

点击按钮,弹出信息框,提示记录中对应姓名的这一列的值。

 

Sub BSButton1_OnClick()

   MsgBox DBAccess.SQLGetValueByField(connectionID, queryID, “姓名”)

End Sub

 

结束查询

VARIANT SQLEnd(long connectionID, long queryID)

结束该查询。结束后释放查询结果占用的空间。

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

queryID:查询ID,为使用SQLSelect时返回的queryID。

VARIANT: 返回错误码,0为成功,其他为失败

 

代码示例:

点击按钮,结束ID为queryID的查询。

 

Sub BSButton1_OnClick()

   DBAccess.SQLEnd connectionID, queryID

End Sub

 

检索数据(返回多维数组)

varResult   ReturnQueryResult(connectionID, SQLExpression, varResult)

返回查询结果集二维数组

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

SQLExpression:select语句

varResult:返回的二维数组

 

代码示例:

点击按钮,查询出结果并将第一行和最后一行显示在msgbox中。

 

Sub BSButton1_OnClick()

DBAccess.ReturnQueryResult ConnectionID,"SELECT ID,name,card,test1 from TABLE1 where id<5 && id>1;",resultsql

uban=UBound (resultsql,1)

a1 =resultsql(0,0)

b1 =resultsql(0,1)

c1 =resultsql(0,2)

d1 =resultsql(0,3)

a2 =resultsql(uban,1)

b2 =resultsql(uban,2)

c2 =resultsql(uban,3)

d2 =resultsql(uban,4)

MsgBox a1&","&b1&","&c1&","&d1

MsgBox a2&","&b2&","&c2&","&d2

End Sub

 

插入数据

VARIANT SQLInsert(long connectionID, string tableName, string bindList)

将绑定表bindlist中tag点的值插入到数据库表tableName中

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

tableName:数据库表名称

bindList:绑定表名称

VARIANT: 返回错误码,0为成功,其他为失败

 

代码示例:

点击按钮,插入绑定列表TestTable2中的表Keys。

 

Sub BSButton1_OnClick()

   DBAccess.SQLInsert connectionID, "Keys", "TestTable2"

End Sub

 

更新数据

VARIANT SQLUpdate(long connectionID, string tableName, string bindList, string WhereExpression)

将绑定表bindlist中tag点的值更新给满足某个条件的记录

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

tableName:数据库表名称

bindList:绑定表名称

WhereExpression:条件查询语句

VARIANT: 返回错误码,0为成功,其他为失败

 

代码示例:

点击按钮1,更新TestTable2中的表Keys中,字段Value1为80的记录

 

Sub BSButton1_OnClick()

   DBAccess.SQLUpdate connectionID, "Keys", "TestTable2","where Value1 = 80"

End Sub

 

删除数据

VARIANT SQLDelete(long connectionID, string tableName, string WhereExpression)

删除满足某个条件的记录

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

tableName:数据库表名称

WhereExpression:条件查询语句

VARIANT: 返回错误码,0为成功,其他为失败

 

代码示例:

点击按钮2,删除表Keys中,字段Value1为60的记录。

 

Sub BSButton2_OnClick()

   DBAccess.SQLDelete connectionID, "Keys", "where Value1 = 60"

End Sub

 

执行sql语句

VARIANT SQLExecute(long connectionID, string SQLExpression)

执行一条SQL语句

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

SQLExpression:SQL语句

VARIANT: 返回错误码,0为成功,其他为失败

 

代码示例:

点击按钮,在表keys中插入字段Value1、Value2和Value3,值分别为10、20和30。

 

Sub BSButton1_OnClick()

   DBAccess.SQLExecute connectionID, "insert into keys(Value1,Value2,Value3) Values(10,20,30)"

End Sub

 

开始\提交\回滚事务

使用事务时,需要在执行sql语句前,先调用开始事务接口,若该事务需要提交,则在sql执行后调用提交事务接口,若取消执行该事务,则调用回滚事务接口。

开始事务

VARIANT SQLTransact(long connectionID)

开始事务

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

 

代码示例:

Sub BSButton1_OnClick()

   DBAccess.SQLTransact connectionID

End Sub

 

提交事务

VARIANT SQLCommit(long connectionID)

提交事务

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

 

代码示例:

Sub BSButton1_OnClick()

    DBAccess.SQLCommit connectionID

End Sub

 

回滚事务

VARIANT SQLRollback(long connectionID)

回滚事务

 

参数和返回值说明:

connectionID:连接ID,为使用SQLConnectEx时返回的connectionID。

 

代码示例:

Sub BSButton1_OnClick()

    DBAccess.SQLRollback ConnectionID

End Sub