菜单

2.5.9 数据查询

下载

1 用途

【数据查询】控件用于显示数据表记录,通常结合数据库查询功能一起使用,运行效果如下:

2 属性

2.1 控件

控件名,页面内唯一。

2.2 查询语句

假设已使用其它工具在default.db中创建了用户表【rptDatas】,

点击“查询语句”属性,出现下图,

1)点击选择“rtpDatas”表,

2)在字段选择中,勾选要显示的字段名,“显示名称”中输入列标题,

标题多语言设置:

假设标题“溶解度”要使用多语言,做法如下:

  1. 在多语言标签中添加“溶解度”标签,设置各语种翻译;
  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指向自定义数据库

最近修改: 2025-03-27Powered by