由于系统默认使用sqlite数据库,要使用mssql,要多写几行代码。且mssql版本不低于2012,要支持offset关键字
示例工程下载地址:https://gitee.com/clawclaw/sttmssql
1.拖放一个[数据查询]控件
1.1属性-查询语句
方法1:在系统数据库default.db中建一个与mssql相同的表结构,便于组态
方法2:任选一个表,直接写一个sql语句,如select 1 as c1, 2 as c2, 3 as c3 from S_CFG,在后续进行修改
本文以方法2为例
1.2属性-表格设计:必设项
2.其他控件如图
3.代码
3.1定义一个IDatabase * psqlserver = NULL;
3.2连接按钮事件
void Frm02::wMButton1_clk_cb(uint16_t code, LvEvent e) {
/*wMButton1(连接)的点击事件*/
string ip = wMText1->getText();
string strport = wMText2->getText();
int port = StringUtil::safeStoi(strport);
string uid = wMText3->getText();
string pwd = wMText4->getText();
string dbname = wMText5->getText();
string dbid = ip+strport+uid+pwd+dbname;
IDatabase* ptmp = DBMgr::getdb(dbid, DBTYPE::MSSQL, ip, port, uid, pwd, dbname);
cout<<dbid<<endl;
if(ptmp) {
psqlserver = ptmp;
vm->setChar("varLast", "connect ok");
} else {
vm->setChar("varLast", "connect fail");
}
}
3.3查询按钮事件
void Frm02::wMButton2_clk_cb(uint16_t code, LvEvent e) {
/*wMButton2(查询)的点击事件*/
//1.把这句复制下来,修改一下:重新设定字段及显示的标题:c1,c2,c3是查询结果的中字段名;“第1列,第2列,第3列”为表头
wMSqliteTable1->setMainArg(0, 172, 1024, 427, "c1,第1列,98;c2,第2列,98;c3,第3列,97", 7, false, 6);
//2.设定数据源连接
tv_wMSqliteTable1->resetDB(psqlserver);
//3.查询语句,这个sql的结果将作为refine的表
string sql = wMText6->getText();
string str = "(" + sql +") t1";
//4.设置排序字段(如不设置为第1个字段)
tv_wMSqliteTable1->m_key = "c1";
//5.设置是否倒序
tv_wMSqliteTable1->enDesc(true);
//6.执行"select * from " + str
tv_wMSqliteTable1->refine(str);
//7.更新表格控件
tv_wMSqliteTable1->drawData(true);
}
3.4执行按钮事件
void Frm02::wMButton3_clk_cb(uint16_t code, LvEvent e) {
/*wMButton3(执行)的点击事件*/
string sql = wMText7->getText();
psqlserver->execute(sql);
}
4.屏上运行
4.1屏上需带2个库及1个配置文件(见示例工程)
4.2将odbcinst.ini移到/etc下
void Frm02::onLoad() {
#if __arm__
string result;
Util::exeSync("mv /customer/prm/odbcinst.ini /etc/", "r", result);
Util::exeSync("sync", "r", result);
#endif
}
5.运行界面
连接成功
查询
执行再查询