1、KV75报警及报表的时间段数据查询功能实现KV7.5报警及报表的时间段数据查询功能实现本月学习中遇到个问题,在KV7.5中按时间查询报警或者报表数据的功能实现。由于学习初期加上对于产品版本变动不甚熟悉,所以遇到点困难。现将其中一种实现方法与大家共享下。功能说明:配合微软日历控件实现对报警记录或者报表数据按时间段查询功能。所用控件:报警控件、微软日历控件(Microsoft Date and Time Picker Control 6.0 (SP6)控件)、KvAdoDBGrid Class控件。数据库:ACCESS数据库 报警查询实现方法:由于KV7.5的默认报警报表的时间字段由原来的Alar
2、mDate和AlarmTime合并成了一个字段AlarmTime且为文本格式。所以条件查询条件中无法比较文本格式的时间。如下图:所以要实现报警的按时间段查询只能通过脚本实现。1.制作画面: 按照报警的一般制作方法和微软日历控件的用法先制作画面。如下图:画面中要具备报警控件、KvAdoDBGrid Class控件用于报警的实时查询和历史查询。微软日历控件,用于查询时间的选择。需要说明的是微软日历控件需要设置下格式才能显示具体时间格式。设置方法是选中微软日历控件的空间属性做如下图的格式选择:2. KvAdoDBGrid Class控件属性及数据源设置首先要利用KvAdoDBGrid Class控件
3、实现报警的历史数据查询需要正确的设置该控件所关联的报警数据源、数据库、表名称、有效字段等属性。具体示例如下图:另外,需要在工程浏览器报警配置中做相应设置。按如上步骤设置即可实现报警的历史数据查询功能。配合条件查询脚本KV.QueryDialog();KV.FetchData();KV.FetchEnd();实现效果如下图:3.微软时间控件事件脚本的编写首先,在作为日期选择的控件中添加CloseUP()事件,编写事件脚本如下:float Ayear;float Amonth;float Aday;string temp;Ayear=ADate.Year;Amonth=ADate.Month;Ad
4、ay=ADate.Day;temp=StrFromInt( Ayear, 10 );if(Amonth10)temp=temp+/0+StrFromInt( Amonth, 10 );elsetemp=temp+/+StrFromInt( Amonth, 10 );if(Aday#+local选择日期+ +local选择时间+#;KV.Where=whe;KV.FetchData();KV.FetchEnd();如图:实际上一般情况下会有两组的日历控件来组成查询的起始时间和结束时间。控件的事件脚本是一样的,只需要将时间字符串赋给不同的变量,在编写SQL查询语句时按照格式编写如下例即可。两组日历
5、控件按时间段查询报警信息的SQL查询语句:whe=AlarmTime#+local开始日期+ +local开始时间+# And AlarmTime=#+local查询时间+# And 日期时间=#+local查询时间2+#;KV1.FetchData();KV1.FetchEnd();如图:最后通过时间空间选择起始及结束时间,然后通过事先编好查询脚本的按钮来触发时间段的查询。全部数据查询如下图:按选择时间段查询数据如下图:需要注意的几点:1. 由于查询时间字段为文本格式无法比较大小,故而条件查询无法实现该功能,只能用脚本实现;2. 脚本要严格按照上述格式编写,SQL查询语句中的“#”改成“(单引号)”则无法实现该功能;(6.60sp1中两种方式都可以)3. 用于查询的日期时间字段关联的变量需按固定格式建立,即为日期和时间加空格拼接而成的字符串变量;4. 数据库中的字段名数据类型不能修改成日期时间格式,如果这样的话插入数据的该字段显示不正常,5. 表格模板中日期时间字段的长度需要注意,如果长度不够的话,数据无法正常显示,查询功能也就无法实现。6. 如果单独的以系统时间变量$Date和$Time关联的字段来进行时间段的查询,同样是无法实现的。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1