在组态王中使用KVADODBGrid控件时如何对数据库中的日期类型字段进行查询

合集下载

grid控件查询

grid控件查询

历史报警查询:将组态王第二版光盘中\Value Pack\解决方案\报警数据库\报警窗数据库.mdb文件拷贝到工程路径下,将文件属性“只读”去掉,将数据库中表Alarm中的字段AlarmDate字段类型改为“日期型”。

在控制面板中设置ODBC数据源,在组态王“报警配置”中将数据库配置配置上。

这样所有的报警信息会自动存到此数据库中Alarm表中。

历史报警查询主要是查询此数据库中的Alarm表。

利用插入通用控件中的KVDBGrid Class控件(在插入通用控件中),对数据库进行查询。

(此控件可以对所有的数据库进行查询操作)查询条件如下:“历史报警查询“为KVDBGrid控件的名字;if(MenuIndex==0){历史报警查询.DSN="DSN=dms"; //dms为ODBC数据源的名字。

历史报警查询.Table="Alarm"; //Alarm为数据库中报警表的名字Alarm表历史报警查询.Where="VarName like+'%"+\\本站点\历史报警+"%'"; //查询条件:相似查询,VarName为表中的字段历史报警查询.FetchData(); //符合条件的记录显示出来历史报警查询.FetchEnd(); //记录显示}if(MenuIndex==1){历史报警查询.Where="AlarmDate={d '"+\\本站点\DateString+"'}";//查询条件:DateString为字符串,AlarmDate为表Alarm中的字段,类型为日期型,d 为字符型转化为日期型。

}if(MenuIndex==2){ //Where="GroupName='"+报警组变量+"'";//报警组变量为字符串变量历史报警查询.Where="GroupName='遥信报警'";//查询条件:表中字段GroupName等于“遥信报警“}if(MenuIndex==3){ //string Str=StrFromInt( 整数变量, 10 );查询整数条件时先将整数转换为//Where="整数字段="+Str+""; 字符串没有单引号。

用组态王做日历查询数据报表说明

用组态王做日历查询数据报表说明

组态王简单报表组态王目前我们应用的主要有两个版本:6.55和7.5.在2021年后基本应用7.5版本。

下面以先做一个日历控件日报制作简单说明。

准备工作:历史数据报表是从组态王的历史库中查询相关变量的历史数据,并在历史数据报表内显示,因此对历史数据报表要查询的数据必须设置历史记录属性。

在组态王中,离散型、整型和实型变量支持历史记录,字符串型变量不支持历史记录。

组态王的历史记录形式可以分为数据变化记录、定时记录(最小单位为1分钟)和备份记录。

记录形式的定义通过变量属性对话框中提供的选项完成,需要查询到报表的变量都要进行记录设置,完成设置之后在数据词典中定义字符串变量“选择日期”用于日历控件的查询。

准备工作完成后开始设计报表。

一.因为组态王6.55版本自带HTconvertTime的函数,最大时间支持到2019,查函数手册如下所以组态王6.55版本的项目,2020年以后的报表数据无法通过日历控件查询,必须先更新HTconvertTime的函数。

组态王7.5版本的项目,不需要做此工作,6.55版本的项目更新方法如下:1、在命令语言里面,自定义函数命令里面新建一个函数。

2、函数声明里面选择LONG,后面的填NewHTconvertTime(long years,long months,long days,long hours,long minites,long seconds)。

(此名字随便起),填完名字把脚本拷贝粘贴进去。

(看不懂也没关系,粘进去就能用)脚本填写内容为:long rest;rest = 0;long yearsofdays; long monthsofdays; long ofdays;long ofminites; long utcyear;long utcmonth; long leapyears; long leapzt; yearsofdays = 0; monthsofdays = 0;utcyear = 1970;utcmonth = 1;leapyears = 0;while(utcyear < years){ if(utcyear % 4 ==0 && utcyear % 100 !=0 || utcyear % 400 ==0) leapyears = leapyears + 1;utcyear = utcyear + 1;}yearsofdays = (years - 1970) * 365 + leapyears;if (months == 1)if (months == 2)monthsofdays = 31;if (months == 3)monthsofdays = 59;if (months == 4)monthsofdays = 90;if (months == 5)monthsofdays = 120;if (months == 6)monthsofdays = 151;if (months == 7)monthsofdays = 181;if (months == 8)monthsofdays = 212;if (months == 9)monthsofdays = 243;if (months == 10)monthsofdays = 273;if (months == 11)monthsofdays = 304;if (months == 12)monthsofdays = 334;if (years % 4 ==0 && years % 100 !=0 || years % 400 ==0 && months >=3)ofdays = yearsofdays + monthsofdays + days;elseofdays = yearsofdays + monthsofdays + days - 1;if (hours >= 8)ofminites = ofdays * 24 * 60 + (hours - 8) * 60 + minites;if (hours < 8)ofminites = (ofdays - 1) * 24 * 60 + (hours + 16) * 60 + minites;//calculate resultszx;rest = ofminites * 60 + seconds;return rest;3、新建完成之后对于原来2020以前的项目,将以前用到的HTconvertTime函数替换成NewHTconvertTime不要漏掉(组态王7.5版本的项目,不需要做此工作),6.55版本新项目就直接用此函数。

Kvdbgrd控件命令语言使用方法6.5

Kvdbgrd控件命令语言使用方法6.5

Kvdbgrd控件命令语言使用范例本文档实际使用例程请见KVDBGRD控件使用例程(适用6.5版本)――请在公司网站技术主页下的功能解决方案中下载KvDBGrid控件有许多控件属性和事件等,这里介绍一些常用的属性和方法一.方法说明:1.Where属性:字符串型属性,设置查询条件,如果不需要任何条件,则字符串为空。

如按时间查询:数据库控件.Where="AlarmDate='2003/1/1'";2.FetchData()方法:执行数据查询,并将查询到的数据填充到表格中。

在使用FetchData ()方法后,必须调用FetchEnd()方法,结束本次查询。

否则回造成系统资源上的不必要的丢失。

如下图所示,为简单的数据查询使用方法。

3.Print()方法:执行表格打印。

4.RefreshData()方法:按照上次查询的条件,重新刷新一遍表格中的数据。

5.RemoveAllData()方法:删除KvDBGrid表中的所有数据。

6.SaveToCSV(STRING bstrCSV)方法:将当前KvDBGrid表中的所有数据保存成指定的CSV 格式的文件。

需要指定参数:保存路径和文件名。

7.ScrollToBottom()方法:鼠标焦点定位到KvDBGrid表的最底部。

8.UpdateCellTextToDB(LONG lRow,LONG lCol)方法:将指定KvDBGrid表中修改的单元格的数据更新到数据库中。

如修改了KvDBGrid中某个单元格的数据,可以按照下图中的方法将数据更新到数据库中。

注:Access数据库不支持这种方法,所以如果用户使用的是Access数据库,执行该方法将不起作用。

二.使用实例:数据库中字段:日期时间品名数量控件名:grid1.查看所有数据grid.FetchData() ;grid.FetchEnd() ;2.对数据进行排序查看(1)。

按照品名字段进行升序排列grid.Where=" order by 品名asc";grid.FetchData() ;grid.FetchEnd() ;(2)按照品名、重量进行排序(desc为降序)grid.Where=" order by 品名asc,重量desc";grid.FetchData() ;grid.FetchEnd() ;3.静态条件查询(1)符串查询――查询所有品名为玉米的记录grid.Where="品名='玉米'";// 如果需要排序可写为grid.Where="品名='玉米' Order by 日期ASC”grid.FetchData() ;grid.FetchEnd() ;(2)数值查询:查询重量数值为73的记录grid.Where="重量=73"; // 查询条件grid.FetchData() ;grid.FetchEnd() ;(3)类似查询-查询2002年的记录grid.Where="日期like '2002%'"; // 查询条件grid.FetchData() ;grid.FetchEnd() ;4.动态查询(1)字符串查询string chaxun; // 自定义一个字符串变量chaxun="品名='"+\\本站点\品名查询+"'";//将查询条件赋值给自定义变量grid.Where=chaxun+" Order by 日期ASC"; // 查询条件,Order by 时间ASC-按时间排序grid.FetchData() ;grid.FetchEnd() ;(2)数据查询string chaxun;chaxun="重量="+StrFromInt( \\本站点\查询重量, 10 );//将数值自动转换为字符//注:如果查询变量为字符串变量则chaxun="重量="+\\本站点\查询重量;grid.Where=chaxun+" Order by 日期ASC,时间ASC ";grid.FetchData() ;grid.FetchEnd() ;(3)多条件查询string chaxun;chaxun="日期='"+\\本站点\查询日期+"' and 重量="+StrFromInt( \\本站点\查询重量,10 );grid.Where=chaxun+" Order by 时间ASC"; // 查询条件grid.FetchData() ;grid.FetchEnd() ;KvDBGrid控件可以用做大批量数据的查询工具使用。

组态王数据统计与查询的制作过程

组态王数据统计与查询的制作过程

数据统计与查询的制作过程利用Microsoft Access数据库和组态王的KVADODBGrid控件实现以暖气、冷气、供热水系统为例(5O,5P)软件版本:Microsoft Access 2010组态王6.53一、建立Microsoft Access数据库文件1、在我的电脑F盘中建立一个Microsoft Access数据库,命名为:5O AND 5PDatabase.accdb2、双击打开“5O AND 5P Database.accdb”文件,选择“创建”>>>“表”>>>“表1”;右击“表1”,选择“重命名”,将“表1”命名为“数据采集”;右击“数据采集”,选择“设计视图”,将相关的数据名写入字段,并选择相应的数据类型,完成后保存,退出;如图01图01二、建立ODBC数据源选择windows“开始”菜单>>>“控制面板”>>>“管理工具”>>>双击“数据源(ODBC)”,弹出“OBDC数据源管理器”(如图02)>>>图02 “系统DSN” >>>“添加”;(如图03)图03 弹出“创建新数据源”>>>“Microsoft Access Driver(*.mdb, *.accdb)” >>>“完成”;(如图04)图04 弹出“ODBC Microsoft Access 安装”>>>数据源名为“5O5P”>>>“选择…”,(如图05)图05弹出“选择数据库”>>>驱动器“F盘”>>>数据库名“5O AND 5P Database.accdb”>>>“确定”。

(如图06)图06三、建立组态王记录体打开组态王软件,弹出“工程管理器”,选择相应的工程名称,双击打开,弹出“工程浏览器”,选择工程浏览器左侧大纲项“SQL访问管理器文件\记录体”,在工程浏览器右侧用鼠标左键双击“新建”图标;记录体名为“Bind”;输入字段名称,点击“?”,选择对应的变量,然后点击“增加字段”,(注:字段顺序需与数据库,表“数据采集”,字段顺序相同)如图07所示。

组态王数据查询控件的应用实用

组态王数据查询控件的应用实用

C)日期控件语句 long year1; long month1; long day1; year1=date1.Year; month1=date1.Month; day1=date1.Day; string 查询开始时间;
if(month1<10&&day1<10) { 查询开始时间=StrFromInt(year1, 10)+"-"+"0"+StrFromInt(month1, 10)+"-"+"0"+StrFromInt(day1, 10); } if(month1<10&&day1>=10) {
GetDate(\\本站点\huhu1,\\本站点\year,\\本站点\month,\\本站点\day);
if(\\本站点\month<10) \\本站点\months="0"+StrFromInt( \\本站点\month, 10); else \\本站点\months=StrFromInt( \\本站点\month, 10); if(\\本站点\day<10) \\本站点\days="0"+StrFromInt( \\本站点\day, 10); else \\本站点\days=StrFromInt( \\本站点\day, 10);
查询开始时间=StrFromInt(year1, 10)+"-"+"0"+StrFromInt(month1, 10)+"-"+StrFromInt(day1, 10); } if(month1>=10&&day1<10) { 查询开始时间=StrFromInt(year1, 10)+"-"+StrFromInt(month1, 10)+"-"+"0"+StrFromInt(day1, 10); } if(month1>=10&&day1>=10) { 查询开始时间=StrFromInt(year1, 10)+"-"+StrFromInt(month1, 10)+"-"+StrFromInt(day1, 10); }

组态王历史数据库及其他关系数据库

组态王历史数据库及其他关系数据库
2.17 组态王能同时对两个Access数据库进行操作吗? ................................ 9
2.18 在组态王中能否对Access数据库进行压缩,该如何实现? ................ 9
2.19 两台装有组态王的计算机通过网络ODBC连接同一个Access数据库 时,不能同时连接数据库,为什么? ................................................................... 10
2.7 在组态王中使用SQLSelect函数查询数据库记录时如何得到符合条件 的记录的数量? ......................................................................................................... 7
2.25 在组态王中使用KVADODBGRID控件进行数据库查询时,如何实现 相似查询? ............................................................................................................... 11
2.1 组态王采集的数据能保存到第三方的数据库如SQL、ORACLE等吗? ..................................................................................................................................... 5
以使用其他应用程序打开? ..................................................................................... 2 1.7 组态王历史库文件是否可以修改、删除?如果不慎删除后能否恢复?

AEW的组态王数据库KVADODBGRID控件关于查询、排序、数据删除例程

AEW的组态王数据库KVADODBGRID控件关于查询、排序、数据删除例程

AEW的组态王数据库KVADODBGRID控件查询、排序、数据删除例程一、例程概述该例程采用KINGVIEW6.53开发,从实用出发,测试实现了以下功能:1)数据库按照每分钟(可更改),按钮(可更改)触发记录插入数据库;2)更改插入数据记录序号标记;3)按用户名日期排序进行查询显示;4)按日期间隔,日期排序或数值排序进行查询显示;5)删除无用用户名(测试或调试时)的数据库数据;6)删除所有数据库记录(更改工艺或空间局限时)。

(数据库为ACCESS 2007,建立空数据库名字为TEST.ACCDB;组态王添加用户名aew,密码空;数据采用仿真PLC 100随机数。

)二、组态过程(内容见例程)1)建立所需变量;2)建立记录体、记录模板;3)组态王中建立画面如图:4)程序中建立启动时数据库连接、数据表建立、退出时断开数据库连接;5)建立通用控件KVADODBGRID;6)建立登录、退出、数据库记录插入触发、删除数据和数据全删除、显示全部数据、数据序号显示及更改序号、数据显示等内容;7)建立查询选项(根据我的项目实用,建立了根据日期间隔、操作员查询两个选项、日期选项需建立两个microsoft date and time 控件分别用于开始日期和结束日期;操作员选项需建立查询操作员输入的文本标签,按操作员查询时,默认为按日期升序进行排序。

);8)建立排序选项(根据我的项目实用,选用单选分别为按照日期升序、日期降序、数值升序、数值降序一次列示出来。

当然如果选项过多可建立复选框进行组合,在程序中进行编写组合查询功能。

);9)建立查询和排序按钮;三、建立数据库连接控制面板-ODBC管理器-添加数据源aew-选择access(支持2007)驱动-选择路径下的test.accdb数据库即可。

(或建立一个空白的access数据库以备数据插入记录用。

)四、控件连接画面中建立的KVADODBGRID控件,控件名称test,保存;控件属性中查找aew数据源,选择表名称1,选择表中的字段名称添加并更改排序及属性;五、其它程序编写1)程序启动时:SQLConnect( DB_NET, "dsn=aew;uid=;pwd=");SQLCreateTable( DB_NET, "1", "1" ); 启动运行后即可退出系统再将第二条注释掉//SQLCreateTable( DB_NET, "1", "1" );2)程序停止时:SQLDisconnect( DB_NET);3)数据改变时:以分为触发写程序(为了测试方便)v_str=$日期+" "+$时间; 把日期和时间合并一个字符串IF (RE_SS) 记录触发时开始插入记录{no=no+1;SQLInsert( DB_NET, "1", "1" ); } 插入时序号+14)控件自定义函数:由日期控件中创建自动生成;建立日期控件并定义date1作为开始日期,date2定义作为结束日期;Date1控件事件closeup建立函数并写程序long year1;long month1;long day1;year1=date1.Year;month1=date1.Month;day1=date1.Day;string 查询开始时间;if(month1<10&&day1<10){查询开始时间=StrFromInt(year1,10)+"-"+"0"+StrFromInt(month1,10)+"-"+"0"+StrFromInt(day1, 10); }if(month1<10&&day1>=10){查询开始时间=StrFromInt(year1,10)+"-"+"0"+StrFromInt(month1,10)+"-"+StrFromInt(day1, 10);}if(month1>=10&&day1<10){查询开始时间=StrFromInt(year1,10)+"-"+StrFromInt(month1,10)+"-"+"0"+StrFromInt(day1, 10);}if(month1>=10&&day1>=10){查询开始时间=StrFromInt(year1,10)+"-"+StrFromInt(month1,10)+"-"+StrFromInt(day1, 10);}开始日期=查询开始时间;Date2控件事件同date1末句为:结束日期=查询结束时间;5)查询排序按钮程序STRING WHE;if (ds_mode==0) {if (sort==0) {WHE="日期>={d'"+开始日期+"'} and 日期<={d'"+结束日期+"'} "+"ORDER BY 日期时间ASC";}if (sort==1) {WHE="日期>={d'"+开始日期+"'} and 日期<={d'"+结束日期+"'} "+"ORDER BY 日期时间DESC";}if (sort==2) {WHE="日期>={d'"+开始日期+"'} and 日期<={d'"+结束日期+"'} "+"ORDER BY 数值ASC";}if (sort==3) {WHE="日期>={d'"+开始日期+"'} and 日期<={d'"+结束日期+"'} "+"ORDER BY 数值DESC";}}if (ds_mode==1) {WHE="操作员='"+user_req+"'"+"ORDER BY 日期时间ASC"; }test.Where=WHE;test.FetchData();test.FetchEnd();6)其它按钮标签组态简单可双击对象参看六、运行查看1)点击REFRESH,数据库全部显示,可以看到日期并未排序;2)选择按系统管理员查询;3)选择按日期查询,并选择起始和结束日期,并选择排序选项,再点击查询排序按钮;顺利的话,可以选择其它选项查看效果。

组态王对关系数据库的查询说明文档

组态王对关系数据库的查询说明文档

组态王对关系数据库的查询例程说明文档目录1. 功能概述 (1)2. 工程实例 (1)3. 操作步骤 (1)3.1 数据库以及表 (1)3.2 设置ODBC数据源 (2)3.3 利用SQL函数进行查询 (5)3.4 利用KVADODBGrid控件进行查询 (11)4. 注意事项 (22)1. 功能概述常规需求:很多工业现场要求对关系数据库的数据根据不同的条件进行查询处理。

组态王中的实现方法:1)利用组态王的SQL函数实现对数据库的数据的查询处理。

2)利用组态王的KVADODBGrid控件实现对数据库的查询处理。

这两种实现方法的不同之处在于:第一种方式是将查询结果对应到组态王的变量上,可以通过组态王的变量进行相关的计算处理以及在命令语言中使用,但是如果符合条件的记录有许多条则无法同时看到所有的查询选择结果。

第二种方式是将查询结果显示到控件的表格中,可以看到所有符合条件的查询记录,并且可以另存为其他文件以及进行打印操作,还可以通过控件的属性、方法进行其他的处理。

2. 工程实例我们以上一个例程“组态王数据存储到外部数据库”中所存储的数据为例,上一个例程中我们把原料的生产厂家、原料编号、称量日期、称量时间,值班人员、原料重量的信息存到了Access数据库中,现在我们要求对存储的原料信息按照“称量日期”进行查询。

我们假设的前提是这个Access数据库已经存在,并且已经存数据在数据库中。

具体的存储数据到外部Access数据库的过程我们可以参考其他文档来实现。

下面就以此为例来演示完成这一需求的具体步骤。

3. 操作步骤3.1数据库以及表1)假设在工程文件夹中已经存在Access数据库,数据库为“数据.mdb”。

2)在数据库“数据.mdb”中有一个数据表:表的名称为:原料数据。

字段为:称量日期、称量时间、原料重量、原料厂家、原料编号、值班人员。

如下图一所示:原料重量为数字类型(单精度),其余为文本类型。

3)在数据库的原料数据表中已经存储了许多数据。

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

在组态王中使用KVADODBGrid控件时如何对数据库中的日期类型字段进行查询
在组态王中对数据库进行查询主要是利用KVADODBGrid控件来实现的,具体实现方法如下:
1)在组态王画面中添加两个日期时间控件即:Microsoft Date and Time Picker Control ,控件名称分别为date1和date2;
2)在第一个控件的CLOSEUP事件中输入如下命令语言:
long year1;
long month1;
long day1;
year1=;
month1=;
day1=;
string 查询开始时间;
if(month1<10&&day1<10)
{
查询开始时间=StrFromInt(year1, 10)+"年"+"0"+StrFromInt(month1, 10)+"月"+"0"+StrFromInt(day1, 10)+"日";
}
if(month1<10&&day1>=10)
{
查询开始时间=StrFromInt(year1, 10)+"年"+"0"+StrFromInt(month1, 10)+"月"+StrFromInt(day1, 10)+"日";
}
if(month1>=10&&day1<10)
{
查询开始时间=StrFromInt(year1, 10)+"年"+StrFromInt(month1, 10)+"月"+"0"+StrFromInt(day1, 10)+"日";
}
if(month1>=10&&day1>=10)
{
查询开始时间=StrFromInt(year1, 10)+"年"+StrFromInt(month1, 10)+"月"+StrFromInt(day1, 10)+"日";
}
3)在第二个控件的CLOSEUP事件中输入如下命令语言:long year2;
long month2;
long day2;
year2=;
month2=;
day2=;
string 查询结束时间;
if(month2<10&&day2<10)
{
查询结束时间=StrFromInt(year2, 10)+"年"+"0"+StrFromInt(month2, 10)+"月"+"0"+StrFromInt(day2, 10)+"日";
}
if(month2<10&&day2>=10)
{
查询结束时间=StrFromInt(year2, 10)+"年"+"0"+StrFromInt(month2, 10)+"月"+StrFromInt(day2, 10)+"日";
}
if(month2>=10&&day2<10)
{
查询结束时间=StrFromInt(year2, 10)+"年"+StrFromInt(month2, 10)+"月"+"0"+StrFromInt(day2, 10)+"日";
}
if(month2>=10&&day2>=10)
{
查询结束时间=StrFromInt(year2, 10)+"年"+StrFromInt(month2, 10)+"月"+StrFromInt(day2, 10)+"日";
}
4)在画面上添加一按钮,在按钮的弹起时输入如下命令语言:
机组1历史报警.Where="AlarmDate>=#"+查询开始时间+"# and AlarmDate<=#"+查询结束时间+"# " etchData();
机组1历史报警.FetchEnd();
其中:AlarmDate为表中的字段名称,字段类型为日期类型。

在组态王中使用KVADODBGRID控件进行数据库查询时,如何实现时间段的查询
查询语句如下所示:
数据库查询控件.Where="ADate >={d'"+\\本站点\开始时间+"'} and ADate <={d'"+\\本站点\结束时间+"'}";
etchData();
数据库查询控件.FetchEnd();
在组态王中使用KVADODBGRID控件进行数据库查询时,能否对查询出来的数据进行修改,同时将数据更新到数据库中
可以。

通过控件的Editable属性来实现,此属性置0不可编辑,置1可编辑,调用格式如下:
数据库查询控件.Editable=0;
数据库查询控件.Editable=1;
修改后可使用SQLUpdate()函数将数据更新到数据库中。

在组态王中使用KVADODBGRID控件进行数据库查询时,能否对查询出来的数据进行修改,同时将数据更新到数据库中
可以。

通过控件的Editable属性来实现,此属性置0不可编辑,置1可编辑,调用格式如下:
数据库查询控件.Editable=0;
数据库查询控件.Editable=1;
修改后可使用SQLUpdate()函数将数据更新到数据库中。

相关文档
最新文档