以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据和逻辑查询问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=176628)

--  作者:lgz518
--  发布时间:2022/4/20 22:29:00
--  数据和逻辑查询问题
如何实现如图的查询?
需求是:按分类:选择(产品,客户,雇员),分类内容:(产品,客户,雇员等的数据),按数量(单价,折扣,数量),
条件(大于,小于,不等于,等于),查询内容 是(单价,折扣,数量的数据),已付款的逻辑的条件进行查询。


图片点击可在新窗口打开查看此主题相关图片如下:模糊查询.jpg
图片点击可在新窗口打开查看

下面是实现,字符的字段,如何实现“数字的字段的按条件,及逻辑的字段”?

Dim txt As String = e.Form.Controls("TextBox1").Text

Dim tbl As Table = Tables("订单")

If txt = "" Then   

    tbl.Filter = ""  

Else   

    txt = "\'%" & txt & "%\'"

  tbl.Filter = " 产品 Like " & txt & " Or 客户 Like " & txt & "  Or 雇员 Like " & txt

 \'tbl.Filter = " 产品 Like " & txt & " Or 客户 Like " & txt & "  Or 数量 Like " & txt,这个会报错


End If

--  作者:有点蓝
--  发布时间:2022/4/21 9:01:00
--  
数值列不支持like模糊查询,要转换为字符数据

tbl.Filter = " 产品 Like " & txt & " Or 客户 Like " & txt & "  Or convert(数量,\'System.String\') Like " & txt
--  作者:lgz518
--  发布时间:2022/4/21 9:32:00
--  
老师,还有一个功能如何实现,如选择“数量”,条件(大于,小于,不等于,等于),比如:按数量查询,条件从下拉框选中”大于“700的条件,进行查询?
--  作者:有点蓝
--  发布时间:2022/4/21 9:44:00
--  
tbl.Filter = " 产品 Like " & txt & " Or 客户 Like " & txt & "  Or 数量 " & e.Form.Controls("条件控件").Text & e.Form.Controls("输入700的控件").Text
--  作者:lgz518
--  发布时间:2022/4/21 11:37:00
--  
Dim txt As String = e.Form.Controls("TextBox1").Text

Dim tbl As Table = Tables("订单")

If txt = "" Then   

    tbl.Filter = ""  

Else   

    txt = "\'%" & txt & "%\'"

 tbl.Filter = " 产品 Like " & txt & " Or 客户 Like " & txt & "  Or convert(数量,\'System.String\') Like " & e.Form.Controls("ComboBox2").Text & e.Form.Controls("TextBox1").Text

End If
执行上面,报错,如下图


此主题相关图片如下:查询2.jpg
按此在新窗口浏览图片




--  作者:有点蓝
--  发布时间:2022/4/21 11:43:00
--  
不要画蛇添足,like才需要做转换,其它情况直接使用,另外ComboBox2里不要使用中文的等于大于,而是要改为=、>这种

tbl.Filter = " 产品 Like " & txt & " Or 客户 Like " & txt & "  Or 数量 " & e.Form.Controls("ComboBox2").Text & e.Form.Controls("TextBox1").Text
--  作者:lgz518
--  发布时间:2022/4/21 15:09:00
--  
老师,还是问题,请指导,上实例,谢谢!


[此贴子已经被作者于2022/4/21 16:14:14编辑过]

--  作者:有点蓝
--  发布时间:2022/4/21 15:17:00
--  
模糊查询和精确查询(=、>这些)要分开处理,不能混用
--  作者:有点蓝
--  发布时间:2022/4/21 15:20:00
--  
精确查询要根据类型使用合适的用法:http://www.foxtable.com/webhelp/topics/1284.htm

表达式中的日期用符号#括起来,数值则不需要任何符号括起来,这些和代码中的格式是一样的,唯一不同的是字符串用单引号括起来。

例如:

Tables("订单").Filter = "[产品] = \'PD01\'"  \'字符用单引号括起来
Tables("订单").Filter = "[日期] = #3/17/1999#"  \'日期用#括起来
Tables("订单").Filter = "[折扣] = 0.1"  \'数值直接使用


判断列类型参考:http://www.foxtable.com/webhelp/topics/1375.htm

[此贴子已经被作者于2022/4/21 15:20:15编辑过]

--  作者:lgz518
--  发布时间:2022/4/21 21:24:00
--  
tbl.Filter = " 产品 Like " & txt & " Or 客户 Like " & txt & "  Or 数量 " & e.Form.Controls("ComboBox6").Text & e.Form.Controls("TextBox3").Text
问题1:这个在正表可执行,如何改为副表也可执行?

把上面代码为下面,出现问题:

问题2:改下面,没报错,不执行?
tbl.Filter = "  数量 " & e.Form.Controls("ComboBox6").Text & e.Form.Controls("TextBox3").Text

问题3:改下面,报错,提示,应为结束语句?
tbl.Filter = " 数量 " & e.Form.Controls("ComboBox6").Text & e.Form.Controls("TextBox3").Text" & txt & " Or 金额 " & e.Form.Controls("ComboBox6").Text & e.Form.Controls("TextBox3").Text " & txt & "  Or 折扣 " & e.Form.Controls("ComboBox6").Text & e.Form.Controls("TextBox3").Text