以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  sql语句的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89932)

--  作者:ap9709130
--  发布时间:2016/9/1 16:12:00
--  sql语句的问题

我这个窗口一直没有修改过,以前一直都没有问题,这段时间不能用了,还有几个窗口也发现这个问题,是SQL语句的问题,为什么会这样呢?

代码如下:

With Tables("备案分析窗口_Tbab").DataTable
    
    .LoadFilter = "[_Identify] In (S el ect max([_Identify]) from {备案信息确定表3} group by 备案编号)"
    \'MessageBox.show(.LoadFilter)
    \'.LoadFilter = ""
    \'.LoadOrder = "Identify DESC"
    .LoadTop = 30
    .LoadOver = "_Identify"
    .LoadReverse = True
    .LoadPage = 0
    MessageBox.show(1)
    .Load()
    MessageBox.show(2)
    Dim a As WinForm.Label = e.Form.Controls("Label1")
    a.text = "共计" & .TotalPages & "页.当前页为1页."
End With
经过测试,是Load 那里就出错了,这种语句要怎么改呢?


--  作者:ap9709130
--  发布时间:2016/9/1 16:20:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:c)y{no~7}nqvu36wcebfq.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2016/9/1 16:24:00
--  
提示什么错误?

去掉
    .LoadOver = "_Identify"
    .LoadReverse = True
试试

--  作者:有点蓝
--  发布时间:2016/9/1 16:25:00
--  
那是查询超时了,sql中数据多的话用In的效率是很差的,特别还要分页
--  作者:ap9709130
--  发布时间:2016/9/1 16:44:00
--  
以前为什么没有问题,还挺快的。数据库只是多了些数据,不会太多的。
--  作者:ap9709130
--  发布时间:2016/9/1 16:52:00
--  
试了三楼的方法,不行。还是会出错
--  作者:ap9709130
--  发布时间:2016/9/1 16:59:00
--  

还有就是:原来我的SQL语句:以前一直都没有问题,用了快一年多了。这段时间也开始出错,图也上上面那个。

 

FilterVal = "订单编号 in (s el ect [_Identify] from {销售订单主表} where 订单类型 = \'" & lx & "\' And 送货日期 >= \'" & dt1 & "\' and 送货日期 <= \'" & dt2 & "\' and 所属公司 = \'" & gs & "\' And CID In (S e lect [_Identify] from {客户资料表} where " & Filter3 & " And 所属公司 = \'" & gs & "\'))"

 

但是我改成这样以后,就没有问题了。

 

FilterVal = "订单编号 in (s el ect [_Identify] from {销售订单主表} where 订单类型 = \'" & lx & "\' And 送货日期 >= \'" & dt1 & "\' and 送货日期 <= \'" & dt2 & "\' and 所属公司 = \'" & gs & "\') And CID In (S el ect [_Identify] from {客户资料表} where " & Filter3 & " And 所属公司 = \'" & gs & "\')"

 

速度也没有问题。真是奇怪!


--  作者:ap9709130
--  发布时间:2016/9/1 17:06:00
--  
LoadFilter = "[_Identify] In (S el ect max([_Identify]) from {备案信息确定表3} group by 备案编号)"   这种真的不会改了。当初是大红袍老师教我写的。
--  作者:有点蓝
--  发布时间:2016/9/1 17:46:00
--  
这种用“in”的越用到后面问题越大,尽量避免使用。

把下面sql做成视图试试:
S el ect max([_Identify]) from {备案信息确定表3} group by 备案编号

然后改成这样
LoadFilter = "[_Identify] In (S el ect [_Identify] from {视图名称} )"

特殊用法建议用sql自己分页

--  作者:ap9709130
--  发布时间:2016/9/2 11:55:00
--  

有点蓝老师

 

如何做视图啊?能说的祥细点,或者给点资料来看看吗?多谢!