Foxtable(狐表)用户栏目专家坐堂 → 筛选出现错误,重新加载后又可以


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

主题:筛选出现错误,重新加载后又可以

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
筛选出现错误,重新加载后又可以  发帖心情 Post By:2018/3/4 17:42:00 [显示全部帖子]

打开项目时,在第一个打开的窗口可以正常筛选,切换到第二个打开的窗口时就会出现如图类型的错误,但在加载树重新加载后又可以正常筛选,切换到第三次打开的窗口时又会出现类似的问题,反复检查了代码,一直没找出问题,请问老师,怎么才能找出问题?

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180304173629.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 17:53:00 [显示全部帖子]

而且用“开发者”登录时,筛选就不存在上述问题

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 20:26:00 [显示全部帖子]

在表的BeforeLoad事件有如下代码,刚好用户属于以下三个用户组时出现问题,开发者就不会。反复检查了,列名没有错,就是不知问题在哪?
If User.Group = "乡镇" 
    Dim fl As String = "[乡] = '" & User.Name & "'"
    If e.DataTable.LoadFilter = "" Then
        e.DataTable.LoadFilter = fl
    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then 
        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl
    End If
End If

If User.Group = "县办" 
    Dim fl As String = "[县] = '" & User.Name & "'"
    If e.DataTable.LoadFilter = "" Then
        e.DataTable.LoadFilter = fl
    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then 
        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl
    End If
End If

If User.Group = "建设办" 
    Dim fl As String = "[项目名称] = '" & User.Name & "'"
    If e.DataTable.LoadFilter = "" Then
        e.DataTable.LoadFilter = fl
    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then 
        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl
    End If
End If

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 20:26:00 [显示全部帖子]

在表的BeforeLoad事件有如下代码,刚好用户属于以下三个用户组时出现问题,开发者就不会。反复检查了,列名没有错,就是不知问题在哪?
If User.Group = "乡镇" 
    Dim fl As String = "[乡] = '" & User.Name & "'"
    If e.DataTable.LoadFilter = "" Then
        e.DataTable.LoadFilter = fl
    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then 
        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl
    End If
End If

If User.Group = "县办" 
    Dim fl As String = "[县] = '" & User.Name & "'"
    If e.DataTable.LoadFilter = "" Then
        e.DataTable.LoadFilter = fl
    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then 
        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl
    End If
End If

If User.Group = "建设办" 
    Dim fl As String = "[项目名称] = '" & User.Name & "'"
    If e.DataTable.LoadFilter = "" Then
        e.DataTable.LoadFilter = fl
    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then 
        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl
    End If
End If

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 20:46:00 [显示全部帖子]


分别弹出:

图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:222.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:333.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 21:06:00 [显示全部帖子]

我还在项目的LoadUserSetting事件设置了如下代码:

If User.Name = "开发者" Or User.Name = "管理员" Then
    DataTables("S征地记录").LoadFilter = ""
Else
    DataTables("S征地记录").LoadFilter = "乡 = '" & User.Name & "' or 县 = '" & User.Name & "' or 项目名称 = '" & User.Name & "'"
End If

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 21:16:00 [显示全部帖子]

“乡镇”是用户组名,“乡”是列名。而且我试着把表的BeforeLoad代码全部删除后,还是有同样的问题

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 21:25:00 [显示全部帖子]

列名是“乡”,标题名是“乡镇”,多次复核了

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/4 22:02:00 [显示全部帖子]

老师,能说清楚点吗?我的代码里除了用户组名是“乡镇”外,其它是用列名“乡”啊。需要怎么改?是把用户组名也改为“乡"吗?

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/3/5 21:09:00 [显示全部帖子]

老师,检查了好久,确定列名不存在问题,可是筛选还是时行时不行,我怀疑是窗口中代码的问题,代码采用了变量VARS。请老师能否帮看看
我有四个表窗口,每个窗口中代码如下:
1、征地记录窗口:
(1)窗口AfterLoad事件代码:
If User.Name = "开发者" Or User.Name = "管理员" Then
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C
    cmd.CommandText = "S ELECT DISTINCT 项目名称,县,乡,村,屯,组 F rom {S征地记录}"
    dt = cmd.ExecuteReader()
    Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
    trv.BuildTree(dt,"项目名称|县|乡|村|屯|组")
    trv.Nodes.Insert("加载所有数据",0)
Else
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C
    cmd.CommandText = "S ELECT DISTINCT 项目名称,县,乡,村,屯,组 From {S征地记录} where 乡 = '" & User.Name & "' or 县 = '" & User.Name & "' or 项目名称 = '" & User.Name & "'"
    dt = cmd.ExecuteReader()
    
    Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
    trv.BuildTree(dt, "项目名称|县|乡|村|屯|组")
    trv.Nodes.Insert("显示所有行",0)
End If
vars("filter") = DataTables("S征地记录").LoadFilter

(2)窗口中加载树的NodeMouseDoubleClick事件的代码:
Dim Filter As String = "1=1"

Dim dr = e.node.FullPath.split("\") '获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[项目名称] = '" & dr(0) & "'"
        Case 1
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "'"
        Case 2
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡] = '" & dr(2) & "'"
        Case 3
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡] = '" & dr(2) & "' And [村] = '" & dr(3) & "'"
        Case 4
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡] = '" & dr(2) & "' And [村] = '" & dr(3) & "' And [屯] = '" & dr(4) & "'"
        Case 5
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡] = '" & dr(2) & "' And [村] = '" & dr(3) & "' And [屯] = '" & dr(4) & "'And [组] = '" & dr(5) & "'"
    End Select
End If


If User.Name = "开发者" Or User.Name = "管理员" Then
    DataTables("S征地记录").LoadFilter = filter
    DataTables("S征地记录").LoadOver="协议书编号"
    DataTables("S征地记录").LoadReverse = True
    DataTables("S征地记录").LoadTop= 5
    DataTables("S征地记录").Load
    Tables("S征地记录").sort="协议书编号"
Else
    DataTables("S征地记录").loadfilter = "(乡 = '" & User.Name & "' or 县 = '" & User.Name & "' or 项目名称 = '" & User.Name & "') and " & Filter
    DataTables("S征地记录").LoadOver="协议书编号"
    DataTables("S征地记录").LoadReverse = True
    DataTables("S征地记录").LoadTop= 5
    DataTables("S征地记录").Load
    Tables("S征地记录").sort="协议书编号"
End If
e.Form.Controls("TextBox1").Value = 1 & "/" & DataTables("S征地记录").TotalPages
vars("filter") = DataTables("S征地记录").LoadFilter

(3)窗口中”开始筛选“按钮的代码:
Dim Filter As String
With e.Form.Controls("DateTimePicker1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "支付日期 >= '" & .Value & "'"
    End If
End With
With e.Form.Controls("DateTimePicker2")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "支付日期 <= '" & .Value & "'"
    End If
End With

If e.Form.Controls("RadioButton8").Checked = True ' 如果付款状态选择了"已付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
        Filter = Filter & "支付日期 Is Not Null"
End If
If e.Form.Controls("RadioButton9").Checked = True ' 如果付款状态选择了"未付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "支付日期 Is Null"
End If


If e.Form.Controls("RadioButton5").Checked = True ' 如果付款状态选择了"已付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "乡镇审核 = 1"
End If
If e.Form.Controls("RadioButton6").Checked = True ' 如果付款状态选择了"未付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "乡镇审核 = 0 Or 乡镇审核 Is Null"
End If

If e.Form.Controls("RadioButton2").Checked = True ' 如果付款状态选择了"已付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "是否结算 = 1"
End If
If e.Form.Controls("RadioButton3").Checked = True ' 如果付款状态选择了"未付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "是否结算 = 0 Or 是否结算 Is Null"
End If

If Filter = "" Then filter = "1=1"
Dim f As String = vars("filter")
f = iif(f > "", f & " and " & filter, filter)
Tables("S征地记录").DataTable.LoadFilter = f
Tables("S征地记录").DataTable.Load
Tables("S征地记录").sort="协议书编号"
e.Form.Controls("TextBox1").Value = 1 & "/" & DataTables("S征地记录").TotalPages

(4)窗口中"撤销筛选”按钮的代码:
With DataTables("S征地记录")
    .LoadFilter = vars("filter")
    .LoadPage = 0 '加载第一页
    .Load()
    e.Form.Controls("TextBox1").Value = 1 & "/" & .TotalPages
End With
Tables("S征地记录").sort="协议书编号"

2、房屋记录窗口:
(1)窗口AfterLoad事件代码:
If User.Name = "开发者" Or User.Name = "管理员" Then
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C    
    cmd.CommandText = "S ELECT DISTINCT 项目名称,县,乡镇,村屯,屯,组 F rom {S迁纪录房屋}"
    dt = cmd.ExecuteReader()
    Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
    trv.BuildTree(dt,"项目名称|县|乡镇|村屯|屯|组")
    trv.Nodes.Insert("加载所有数据",0)
Else
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C
    cmd.CommandText = "S ELECT DISTINCT 项目名称,县,乡镇,村屯,屯,组 F rom {S迁纪录房屋} where 乡镇 = '" & User.Name & "' or 县 = '" & User.Name & "' or 项目名称 = '" & User.Name & "'"
    dt = cmd.ExecuteReader()
    
    Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
    trv.BuildTree(dt, "项目名称|县|乡镇|村屯|屯|组")
    trv.Nodes.Insert("显示所有行",0)
End If

vars("filter") = DataTables("S迁纪录房屋").LoadFilter

(2)窗口中加载树代码:
Dim Filter As String = "1=1"

Dim dr = e.node.FullPath.split("\") '获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[项目名称] = '" & dr(0) & "'"
        Case 1
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "'"
        Case 2
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡镇] = '" & dr(2) & "'"
        Case 3
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡镇] = '" & dr(2) & "' And [村屯] = '" & dr(3) & "'"
        Case 4
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡镇] = '" & dr(2) & "' And [村屯] = '" & dr(3) & "' And [屯] = '" & dr(4) & "'"
        Case 5
            Filter = "[项目名称] = '" & dr(0) & "' And [县] = '" & dr(1) & "' And [乡镇] = '" & dr(2) & "' And [村屯] = '" & dr(3) & "' And [屯] = '" & dr(4) & "'And [组] = '" & dr(5) & "'"
    End Select
End If

If User.Name = "开发者" Or User.Name = "管理员" Then
    DataTables("S迁纪录房屋").LoadFilter = filter
    DataTables("S迁纪录房屋").LoadOver="协议书编号"
    DataTables("S迁纪录房屋").LoadReverse = True
    DataTables("S迁纪录房屋").LoadTop= 5
    DataTables("S迁纪录房屋").Load
    Tables("S迁纪录房屋").sort="协议书编号"
Else
    DataTables("S迁纪录房屋").loadfilter = "(乡镇 = '" & User.Name & "' or 县 = '" & User.Name & "' or 项目名称 = '" & User.Name & "') and " & Filter
    DataTables("S迁纪录房屋").LoadOver="协议书编号"
    DataTables("S迁纪录房屋").LoadReverse = True
    DataTables("S迁纪录房屋").LoadTop= 5
    DataTables("S迁纪录房屋").Load
    Tables("S迁纪录房屋").sort="协议书编号"
End If

vars("filter") = DataTables("S迁纪录房屋").LoadFilter
e.Form.Controls("TextBox1").Value = 1 & "/" & DataTables("S迁纪录房屋").TotalPages

(3)窗口中“开始筛选”按钮代码:
Dim Filter As String
With e.Form.Controls("DateTimePicker1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "支付日期 >= '" & .Value & "'"
    End If
End With
With e.Form.Controls("DateTimePicker2")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "支付日期 <= '" & .Value & "'"
    End If
End With

If e.Form.Controls("RadioButton8").Checked = True ' 如果付款状态选择了"已付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
        Filter = Filter & "支付日期 Is Not Null"
End If
If e.Form.Controls("RadioButton9").Checked = True ' 如果付款状态选择了"未付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "支付日期 Is Null"
End If


If e.Form.Controls("RadioButton5").Checked = True ' 如果付款状态选择了"已付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "乡镇审核 = 1"
End If
If e.Form.Controls("RadioButton6").Checked = True ' 如果付款状态选择了"未付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "乡镇审核 = 0 Or 乡镇审核 Is Null"
End If

If e.Form.Controls("RadioButton2").Checked = True ' 如果付款状态选择了"已付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "县办审核 = 1"
End If
If e.Form.Controls("RadioButton3").Checked = True ' 如果付款状态选择了"未付"
    If Filter >"" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "县办审核 = 0 Or 县办审核 Is Null"
End If

If Filter = "" Then filter = "1=1"
Dim f As String = vars("filter")
f = iif(f > "", f & " and " & filter, filter)
Tables("S迁纪录房屋").DataTable.LoadFilter = f
Tables("S迁纪录房屋").DataTable.Load
Tables("S迁纪录房屋").sort="协议书编号"
e.Form.Controls("TextBox1").Value = 1 & "/" & DataTables("S迁纪录房屋").TotalPages

(4)窗口中“撤消筛选”按钮代码:
With DataTables("S迁纪录房屋")
    .LoadFilter = vars("filter")
    .LoadPage = 0 '加载第一页
    .Load()
    e.Form.Controls("TextBox1").Value = 1 & "/" & .TotalPages
End With

Tables("S迁纪录房屋").sort="协议书编号"

其它两个窗口中的代码类似。

 回到顶部
总数 13 1 2 下一页