【技术应用案例】世纪星组态软件应用中的小小体验
作者:技术部 严春艳
开始一种新软件的学习和运用,总会遇到大大小小的障碍,在高手眼里,或许其实就是小小的土坷垃。这些障碍慢慢越过之后,小小新人总有一天也可以一览众山小。
在世纪星组态软件与数据库的连接过程中,刚刚入门的人总有点晕头转向。一个语句的运用不到位也会大半天的时间连不上数据库,更不用提将数据插入数据库,查询数据库数据这些更进一步的问题。
前几天遇到的一个问题,也让我一下午找不出症结所在。
好了,废话不多说,现在言归正传。
在项目中需要用到XY曲线,同时因为采集数据精确到毫秒级,XY曲线数据采集的点达不到这样的精度要求,需要从数据库中查询数据,然后将查询到的数据一个点一个点的描在XY曲线上。
说起来并不复杂,在世纪星组态软件中,一般在与数据库做连接时,我通常在应用程序命令语言的程序开始时写入数据库连接语句。那么在程序运行时,始终保持与数据库的连接;程序关闭时,写入数据库断开语句,断开与数据库的连接。
那么上述讲到的问题,我按照一贯的思路是如下:
(1) 在应用程序命令语言的程序开始时写入数据库连接语句:ConnectionID = SQLConnect("DSN=dsn;UID=;PWD=");
(2) 建立XY曲线页面
(3) 在画面特性的命令语言中填写语句如下图:
A、首先是数据库查询语句,范例写的是查询日期大于2010年10月22日的所有数据
B、返回满足查询条件的记录数
C、从缓存区返回满足条件的记录。
D、查询出第一条记录,并将数据描在XY曲线上
E、通过For…Next循环,将查询出的满足条件的点描在XY曲线上。
在完成了上述操作后,我发现运行系统可以将数据库中已存的满足条件的数据查询出来并逐点描在XY曲线上。
但是客户可能会要求将随时采集到的点实时的描在XY曲线上,那么按照上述的做法还能满足要求吗?
答案是否定的,系统运行后,我将返回的记录数显示在页面上,发现记录条数在不断的增加,但是XY曲线却是在运行了一次描出点之后不会再有任何变化。
将XY曲线的点存到文件中,发现虽然每次都会运行上述这段程序,但是数据还是第一次运行时查询出的数据。
从上述语句看,没有语法错误,数据库连接正常,并且查询出的记录数也随着数据库中数据的增加而增加,看起来没有任何问题,可是XY曲线就是不正确。
问题看起来很棘手,到最后,却找到了一个最简单的方法,每次在运行上述程序时都重新连接一下数据库,For…Next循环后断开数据库。语句如下:
问题迎刃而解了~~
最后经人指点了解到,Access数据库有一个问题,在数据库处于连接状态时,第一次查询到的数据放到缓存区中之后,不管查询条件再出现任变化,缓存区中的值都不会再变化。所以在用Access数据库时,数据库不能一直处在连接状态,这样每次查询到的都是相同的数据。每次在查询之前都重新连接一下数据库,查询完之后一定断开数据库。
那么每次查询出的数据就是符合要求的数据了。
在应用新软件时,会碰到各种各样的问题,但是每个问题都会有相应的解决方法,将一条条小小的问题记录总结下来,就可以汇聚成自己的知识海洋。