Foxtable(狐表)用户栏目专家坐堂 → 关于查询过于复杂的困惑


  共有3654人关注过本帖树形打印复制链接

主题:关于查询过于复杂的困惑

帅哥哟,离线,有人找我吗?
东坡一剑
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
关于查询过于复杂的困惑  发帖心情 Post By:2013/10/31 21:20:00 [只看该作者]

If Forms("主界面").opened Then
    MyTimers("计划1").Enabled = False
    Forms("主界面").controls("库存警告").Enabled = False
   
    Dim Today As Date = Date.Today
    Dim Names As String = "日一二三四五六"
    Dim Result As String
    Result = "星期" & Names.Chars(Today.DayOfWeek)
    Forms("主界面").controls("登录账号").Text = user.Name
    Forms("主界面").controls("用户姓名").Text = user.Name
    Forms("主界面").controls("用户分组").Text = User.Group
    Forms("主界面").controls("登录日期").Text = Today & " " & Result
    Dim cmd1,cmd2 As new SQLCommand
    Dim dt1,dt2 As DataTable
    Dim s As String
 下面的黑字和红字部分的代码几乎完全一样,红字代码可以正常执行,而黑字部分,执行到绿字部分出错,提示为"查询过于复杂."甚为不解,请大家帮忙看看!
    If user.Group = "兰州嘉禾天悦商贸有限公司"  Then
        cmd1.C
        cmd2.C
        cmd1.CommandText = "Select * from {库存表} where 库房 <>'" & user.Group & "库房'"
        cmd2.CommandText = "Select * from {库存表} where 库房 ='" & user.Group & "库房'"
        dt1 = cmd1.ExecuteReader()
        dt2 = cmd2.ExecuteReader()
MessageBox.Show(1)
        If dt2.DataRows.count > 0 Then
            For Each dr2 As DataRow In dt2.DataRows
                Dim dr1 As DataRow = dt1.Find("货号 = '" & dr2("货号") & "' And 颜色 ='" & dr2("颜色") & "'")
                If dr1 Is Nothing Then
                    s = s & "Or [_Identify] =" & dr2("_Identify")
                End If
            Next
            s = s.trim("O")
            s = s.trim("r")
MessageBox.Show(2)
            If s > "" Then
                Forms("主界面").controls("库存警告").Enabled = True
                Forms("主界面").controls("库存警告").Image = GetImage("kcjg.gif")
                MyTimers("计划1").Enabled = True
 MessageBox.Show(3)  
                DataTables("库存表").LoadFilter = ""
MessageBox.Show(4) 
                DataTables("库存表").LoadFilter = s
MessageBox.Show(s) 
                DataTables("库存表").Load()
 
            Else
                Forms("主界面").controls("库存警告").Image = GetImage("44.gif")
                MyTimers("计划1").Enabled = False
                Forms("主界面").controls("库存警告").Enabled = False
            End If
        End If
    End If

   
    If user.Type = UserTypeEnum.User Then
        If user.Group <> "兰州嘉禾天悦商贸有限公司" Then
            cmd1.C
            cmd1.CommandText = "Select * from {库存表} where 库房 ='" & user.Group & "库房'" & " And 库区 ='展厅'"
            dt1 = cmd1.ExecuteReader()
            cmd2.C
            cmd2.CommandText = "select * from {库存表} where 库房 ='" & user.Group & "库房'" & " And 库区 ='后堂'"
            dt2 = cmd2.ExecuteReader()
            If dt2.DataRows.count > 0 Then
                For Each dr2 As DataRow In dt2.DataRows
                    Dim dr1 As DataRow = dt1.Find("货号 = '" & dr2("货号") & "' And 颜色 ='" & dr2("颜色") & "'")
                    If dr1 Is Nothing Then
                        s = s & "Or [_Identify] =" & dr2("_Identify")
                    End If
                Next
                s = s.trim("O")
                s = s.trim("r")
                If s > "" Then
                    Forms("主界面").controls("库存警告").Enabled = True
                    Forms("主界面").controls("库存警告").Image = GetImage("kcjg.gif")
                    MyTimers("计划1").Enabled = True
                    DataTables("库存表").LoadFilter = ""
                    DataTables("库存表").LoadFilter = s
MessageBox.Show(s)
                    DataTables("库存表").Load()
                Else
                    Forms("主界面").controls("库存警告").Image = GetImage("44.gif")
                    MyTimers("计划1").Enabled = False
                    Forms("主界面").controls("库存警告").Enabled = False
                End If
            End If
        End If
    End If
End If


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/31 21:27:00 [只看该作者]

 这个简单,你msgbox(s)看看就知道了。

 Or 的前面最好记得加空格
 

 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/10/31 21:44:00 [只看该作者]

msgbox(s)已经做了,应该不是你说的问题。因为前后两段的msgbox(s)出现的字符结构都是一样的。唯一不同的是:黑字部分代码msgbox(s)出现的字符串超级长,因为符合条件的记录很多,足有几百条。而红字部分只有短短的几行。我怀疑是当loadfilter的字符串长度有一定的限制。不知是不是这样?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/31 21:52:00 [只看该作者]

 试试改成这种

For Each dr2 As DataRow In dt2.DataRows
    Dim dr1 As DataRow = dt1.Find("货号 = '" & dr2("货号") & "' And 颜色 ='" & dr2("颜色") & "'")
    If dr1 Is Nothing Then
        s = s & dr2("_Identify") & ","
    End If
Next

。。。。。。

DataTables("库存表").LoadFilter = "[_Identify] in (" & s.trim(",") & ")"

 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/10/31 22:04:00 [只看该作者]

谢谢!我试试。

 回到顶部
帅哥哟,离线,有人找我吗?
东坡一剑
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:366 积分:2478 威望:0 精华:0 注册:2013/1/13 23:43:00
  发帖心情 Post By:2013/10/31 22:36:00 [只看该作者]

果然就成功了。

但是之前为什么就不行呢?

难道数据多少确实有影响?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/31 23:02:00 [只看该作者]

 不知道,应该是sql语句的问题,得看你生成了什么的sql语句才能说。

 回到顶部