1 用途
【数据查询】控件用于显示数据表记录,通常结合数据库查询功能一起使用,运行效果如下:
2 属性
2.1 控件
控件名,页面内唯一。
2.2 查询语句
假设已使用其它工具在default.db中创建了用户表【rptDatas】,
点击“查询语句”属性,出现下图,
1)点击选择“rtpDatas”表,
2)在字段选择中,勾选要显示的字段名,“显示名称”中输入列标题,
标题多语言设置:
假设标题“溶解度”要使用多语言,做法如下:
- 在多语言标签中添加“溶解度”标签,设置各语种翻译;
- 在“显示名称”中将“溶解度”改为“_L溶解度”;
多语言标签设置请参考第八章多语言用法。
3)自动生成SQL语句,然后点击【确定】按钮即可,如下所示,
2.3 表格设计
通过表格设计器来设置列宽、字体大小、颜色等属性。如下图所示:
注意:可选列是在2.2“查询语句”中选中的列,而不是表格全部列。
2.4 行数
设置表格的总行数,(默认为7)。
2.5 关联记录变量
关联页码 |
将当前页序号写入某个变量,可用来显示当前页序号 |
关联总页数 |
将总页数写入某个变量,可用来显示总页数 |
关联每页行数 |
将每页行数写入某个变量,可用来显示 |
关联总行数 |
将总行数写入某个变量,可用来显示 |
2.7 自动行高
如果单元格内容超出单元格的宽度,选择是否换行。
2.8 其余属性
参考其它控件的属性设置。
3 动态查询的实现
上述第2节中属性设置目的是搭建表格的字段并设置样式,下面就要配合SQL语句来实现条件查询。
void Frm03::wMButton3_clk_cb(uint16_t code, LvEvent e) {
/*查询*/
int nY, nM,nD, nH;
vm->getInt("年", nY);
vm->getInt("月", nM);
vm->getInt("日", nD);
vm->getInt("时", nH);
string sM, sD;
sM = to_string(nM);
if(nM<10) sM = "0" + sM;
sD = to_string(nD);
if(nD<10) sD = "0" + sD;
//准备查询语句
string sql;
//使用子查询,确保SQL语句里面的字段与表格设置一致!!
//sql = StringUtil::snprintf("(select substr(mTime,6,11) as mTime,mRJY,mBHD,mWD,mPH,mYD,mZD,mYW from rptDatas where mDate='%d%s%s' and mHour='%d' order by mId desc) ABCD", nY, sM.c_str(), sD.c_str(), nH);
sql = StringUtil::snprintf("(select mId, substr(mTime,6,11) as mTime,mRJY,mBHD,mWD,mPH,mYD,mZD,mYW from rptDatas where mDate='%d%s%s' and mHour='%d') ABCD", nY, sM.c_str(), sD.c_str(), nH);
//打印输出SQL语句,用于查看
//cout << sql << endl;
//传递
tv_wMSqliteTable3->refine(sql);
//刷新表格
tv_wMSqliteTable3->drawData(true);
}
核心点是:
1)使用标准SQL语句,创建子查询替换原来表对象;
2)在子查询里面实现条件过滤;
3)字段必须和原来表格定义的完全一致;
4 完整参考示例
此演示工程涉及展示以下功能:
1)多modbusRTU设备数据通讯;
2)定时数据保存到数据库(使用标准SQL语句写SQLite数据库);
3)数据查询使用表格显示;
4)数据查询使用“曲线图”控件显示曲线;
下载后请参考项目管理,导入工程源码到工作空间打开,
5 其他注意事项
1) 如果连接的不是默认default.db, 需要调用一下tv_wMSqliteTable1->resetDB(db);//db指向自定义数据库