做完SQLite的Labview接口后,开始做Labview查询数据库的查询界面程序。界面的上部分是查询条件,点击查询按钮后,把查找的结果显示到中间的表格上,点击查询结果表格的条码栏,就会在下左表展开对应的测试项目及单项结果。如点击下边左表的测试项目列就会在下边右表展开所用的模块及测试时间,见下图。
界面
程序框图,习惯用while+条件结构+事件结构做,做了4个事件,一是填完条件后点击查询按钮的事件:
查询按钮事件
查询按钮事件的要点在SQL语句的生成,一是查询条件多,二是有些是没用到,这时是空的,需要判定条件的字符串是否为空,为空真时就是空的字符串,假时,带有and的字符串,注意要用单引号括起来查询条件,还有要加空格,避免连接字符串时上下单词连了,SQLites识别不出来了会报错的,调试时也发现此问题。再有是要格式化日期字符串,因取到的字符串是带有日期时间的,我们只需要日期就好了。
点击查询结果产生鼠标点击事件,要注意取出鼠标点在表格的行和列,通过列比较,如果是在条码列才执行查询表格动作。
条码查询事件
下边左表的点击查询事件实现同中表的条码查询事件。只是列值和SQL语句不一样。
在调试过程中有几个bug,1是提表格中没有列;2是where附近有语法错误;3是每次运行都有上次查询结果在界面。
1、提示表格中没有列,对比了SQL命令字符串,与数据库是一样的,没办法加了个私服串显示控件,看是什么问题,结果发现因字符串太长了,用了分段连接,没有加空格,上下连成一个单词,软件认不出数据表了,见下图
2、是where附近有语法错误,通过字符串显示的SQL语句,发现是,where 后面直接连了and,在where 后面加1=1 再与and连接就不报错了。整个语句是select ID,Barcode,Mode,Department,WorkShop,Shift,Line,Station,JIGLoR,WorkOrderNumber,Op_UserID,TestModel,TestResult,TestDate,TestUseTime,Remark from tb_TestRecord_Barcode where and TestDate>='2020-04-21' and TestDate<='2020-04-23'。
3、就像开头那一幅图片 一样,每次运行都有上一次查询的结果“残留”,后面没办法,只好在初始化时给表格赋值个空数组。还有是日期控件,没初始化时显示的是字母“yyyy-mm-dd