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) 建立排序选项(根据我的项目实用,选用单选分别为按照日期升序、日期降序、数值
升序、数值降序一次列示出来。 当然如果选项过多可建立复选框进行组合, 在程序中
进行编写组合查询功能。 );
1 / 4
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" ); }
把日期和时间合并一个字符串
记录触发时开始插入记录
插入时序号 +1
4) 控件自定义函数:由日期控件中创建自动生成;
建立日期控件并定义 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) 查询排序按钮程序
2 / 4
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";}
}
(ds_mode==1) {WHE=" 操 作 员 ='"+user_req+"'"+"ORDER BY 日 期 时 间
if
ASC";
}
test.Where=WHE;
test.FetchData();
test.FetchEnd();
6) 其它按钮标签组态简单可双击对象参看
六、 运行查看
1) 点击 REFRESH,数据库全部显示,可以看到日期并未排序;
2) 选择按系统管理员查询;
3) 选择按日期查询,并选择起始和结束日期,并选择排序选项,再点击查询排序按钮;
顺利的话,可以选择其它选项查看效果。
3 / 4
以前出现过类似问题,就是程序不用编程,理应数据库插入和显示应该按照日期顺
序,但实际上数据库不知何时就出现控件显示乱序,咨询过亚控技术,说是数据库
问题,其它数据库也会有排序乱问题。最近通过学习例程,掌握了查询排序的方法
~~~
和技巧,虽然不影响数据的存储,但锦上添花应该完美!和同行共享交流
西安朗利电气设备有限公司
2014-4-30
4 / 4