以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]对数值的查询筛选  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=86460)

--  作者:hzcaqjf
--  发布时间:2016/6/17 17:15:00
--  [求助]对数值的查询筛选
Dim t As Table = Tables("窗口1_table1")
Dim sql As String
Dim st As String = e.Form.Controls("TextBox1").text
If st > "" Then
   sql = "select * fro m {订单} where  CStr(IIf(单价 is null ,0,单价)) = \'" & st & "\' or CStr(IIf(数量 is null ,0,数量)) = \'" & st & "\'"
   t.fill(sql,"yy",True)
   t.AutoSizeCols()
End If

对-1和1之间数值(不包括-1和1)比如-0.2,0.5等数值都不能筛选,而其它数值都可以筛选.求解?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目5.zip



[此贴子已经被作者于2016/6/17 17:18:37编辑过]

--  作者:大红袍
--  发布时间:2016/6/17 19:05:00
--  
Dim t As Table = Tables("窗口1_table1")
Dim sql As String
Dim st As String = e.Form.Controls("TextBox1").text
If st > "" Then
    sql = "select * fr om {订单} where IIf(单价 is null ,0,单价) >= " & st-0.000001 & " and IIf(单价 is null ,0,单价) <= " & st + 0.000001 & " or IIf(数量 is null ,0,数量) >= " & st-0.000001 & " and IIf(数量 is null ,0,数量) <= " & st+0.000001 & ""
    t.fill(sql,"yy",True)
    t.AutoSizeCols()
End If

--  作者:hzcaqjf
--  发布时间:2016/6/17 19:29:00
--  
测试通过!
难道输入数值0.5,在数据库中实际值会变为0.4999999999...? 但大于1的小数值又能精确查询?数据库真是太深奥了.
要不是老师指点,就是想破脑袋也不知如何解决.

--  作者:狐狸爸爸
--  发布时间:2016/6/18 8:29:00
--  

0.5= 0.499999

 

这样的问题,通常不会发生,你的数据应该是从其他地方导入的,之前是其他软件处理的。

 

你在SQL执行窗口,执行一遍:

 

upda te {订单} Set [折扣] = Round(cint([折扣] * 100)/ 100,2)


--  作者:hzcaqjf
--  发布时间:2016/6/18 15:56:00
--  
狐爸: upda te 后还是不能查询大于-1 且 小于 1 的小数值(原代码).
        而大红袍老师的代码能够查询.
        换成新的数据库(foxtable安装系统的"订单.mdb")还是一样.

--  作者:hzcaqjf
--  发布时间:2016/6/18 16:12:00
--  
问题已解决,去掉Cstr 和 \' \' 就也能查询.