vb程序解释

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、整体思路

本报表通过在wincc中通过按钮调用,也可以在wincc运行的时候直接手动开启。Vb 程序通过读取wincc中是sqlsever数据进行查询显示,这里需要注意的是,只有当wincc 启动,并且运行的时候,才可以读取wincc特定的历史数据库,该数据库结构和其它标准的数据库区别在于它有自身的结构,在vb建立ado读取数据的时候,是不能像读取标准数据的标准表那样去读取,具体的读取方式,可以在wincc中的帮助里面查看。这也就说明了为什么非要运行wincc,此报表才可以运行成功。

二、程序的大体说明

1、本报表文件夹内可以看出,本程序包括有5个窗体(这里实际有8个,只用上了其

中的四个),两个标准模块,以及生成的”报表系统.exe”文件。程序的源代码只需要

打开这个文件就可以了,该文件以.vbp结尾。前提是你需要安装vb6.0,没有安装请下载安装。

2、打开上面所说的源代码以后,可以看到vb的工程管理器(如下图):

这里面包含了本程序所有用到的模块以及窗体。首先对模块进行说明,

Forcomn模块:该模块里面主要存放了和窗体位置,调用鼠标滚轮功能的相关api函数的调用以及部分全局参数的定义,不同项目之中不需要更改此模块。

Skinh模块:存放了与皮肤相关的api函数,不同项目之中不需要更改此模块。

对窗体的作用的说明:

窗体Form1:自由报表,如果需要做自由报表,可以修改里面的内容来实现自定义时间段的查询工作。

窗体reportday:日报表,完成日报表的查询工作以及显示功能

窗体reportmonth,窗体reportYear功能同日报表相同,实现的原理也相同。

2、以日报表为例解释程序中主体结构和功能

由于日报,月报,年报实现的方式相同,无非就是在日报表上面的变化。所以月报年报不再对程序进行说明。下面看下日报是如何编写原来和功能

首先,这里的form_load过程是窗口的加载过程,也就是最先执行的就是这里的程序,从上到下,开头的两行已经注释出来了,后面完成了对窗体位置的设置,对数组进行赋值,该数组中存放了表格顶头所显示的内容,然后对表格完成一次清空,最后,通过调用setmsfgrid对表格进行初始化,也就是对表格的行宽,列宽,固定显示列,行进行设置。程序如下:

完成上面的窗口加载,就可一看到窗口显示了后面就是进行数据的查询,这里是整个报表的关键,主要是通过ado的方式进行读取数据的。先看下图的程序

程序中

第一个方框中是对参数的定义,

第二框中,是在进查询前,对表格控件中的数据进行清空,不清的话会在表格中显示之前读到的数据,没读到数据的地方也不会变成空的。紧接着开始在第一列写入时间。

第三框中,完成ado的相关定义,这个如果不懂的话请先去了解ado读取关系型数据库的相关内容,做自控的,vb还是挺实用的,了解这点对做报表,理解数据库都很有意义。

(由于无法一次性截图,所以采用分段式讲解)紧接着如下图,开始对查询时间的设定,后面有一个转换成utc时间,这个是因为wincc的历史数据和我们的北京时间相差了8个小时,所以我们查询的时间世界在数据库中是要往前8小时的。

在然后我们这里定义了一个数组,这个数组是我们需要进行查询的参数,这里需要对应我们归档中的参数,名字不能有错。

紧接着如下图:

这里是这个程序的关键,是循环读取每个参数在查询时间段内的数据,并将其写入到数组TempAValue中,图中第一个方框中是wincc专用的sql查询语句,包括了参数名字,开始和结束时间,这里必须按照这个定义来查找,不能使用标准的sqlsever 查询语句。在第二个方框内,就开始将查询到的数据,一个一个的写入到数组中进行保存,这里的顺序是第一个参数的1到24小时的数据,然后是第二个…………上图最后的计数实际没太大的作用,是为了防止程序读到多余5000条数据进行排错用的,因为我们是日报,一般只有24条数据,所以这里没有意义了。

紧接着,如下图

框一:将之前存放在数组TempAValue中的数据进行相减,也就完了excel中要求的这个每小时都是累计值的功能,这里,相信您应该明白了,如果想实现实时值的查询,直接使用TempAValue数组中的数据就好了。言归正传,我们将所需的数据存

放到FinalAValue数组之中。

框二:把最后得到的数组的中数据一次填写到表格之中,其中涉及到了不同列的计算,比如第三列就是两个值的和。

框三:排除你如果是查询今天的数据,最后总有一个小时显示为0 ,这里最终得到的累计必然是0。因为如果你9点是有数据,10点还没读到数据,这个9到10点的数据就会是一个负数,肯定影响最终的累计值的,所以这里需要将表格中的10点的数据清零。

框四:求累计值和平均值

下面是打印功能的实现:

在打印功能中,我们是先打开我们之前存放到特定文件夹中的模板,然后在在对应的位置进行填值,最后将模版另存为一个新的excel文件,这就是整体的流程。

框一:模板在填写数据后,另存的位置

框二:模版的位置。

这里说明一下,我这边的模板是07版本的excel做的,所以03版本的使用不了,必须重新建立才可以完成导出功能

相关文档
最新文档