以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据加载问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=172655)

--  作者:ycs5801
--  发布时间:2021/10/24 22:20:00
--  数据加载问题
Dim Filter As String
With e.Form.Controls("combobox3")
    If .Value IsNot Nothing Then
        Filter &= "发起部门 = \'" & .Value & "\'"
    End If
End With
With e.Form.Controls("startdate1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "发起时间 >= \'" & .Value & "\'"
    End If
End With
With e.Form.Controls("enddate1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "发起时间 <= \'" & .Value & "\'"
    End If
End With
If e.Form.Controls("checkbox3").checked=True
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = filter & "是否完成=1"
ElseIf e.Form.Controls("checkbox3").checked=False
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = filter & "是否完成=0"
End If
filter=filter & "责任部门=user.name and 是否单发=0"
If Filter > "" Then
    With Tables("主表").DataTable
        .LoadFilter =  Filter
        .LoadOrder = "发起时间 Desc"
        .Load()
    End  With
    Tables("主窗口_Table3").Sort = "日期 DESC"
End If

这段代码除了黄色标记部分都是正常的,现在加入黄色标记部分想实现的功能是:排除掉责任部门不等于user.name并且是否单发=1的行。

--  作者:有点蓝
--  发布时间:2021/10/24 22:29:00
--  
多看几遍:http://www.foxtable.com/webhelp/topics/1284.htm

filter=filter & "责任部门=\'" & user.name & "\' and 是否单发=0"
--  作者:ycs5801
--  发布时间:2021/10/24 22:57:00
--  
这样写最后筛选出的结果是责任部门列的值都是当前登录用户的行,而且是否单发列没有被勾选。而我要的是责任部门列中也存在不是当前登录用户名的行,只是把责任部门列不是当前登录用户名且是否单发被勾选的行排除掉。
--  作者:有点蓝
--  发布时间:2021/10/24 23:12:00
--  
不可能的。拿这个条件去数据库执行有没有问题?
--  作者:ycs5801
--  发布时间:2021/10/24 23:26:00
--  
 "责任部门=\'" & user.name ,老师,这句筛选的结果不就是把责任部门列都筛选成当前登录用户的行吗?
--  作者:有点酸
--  发布时间:2021/10/25 8:27:00
--  
要严谨一些:

if filter > "" Then      
filter=filter &  " And (责任部门=\'" & user.name & "\' and 是否单发=0)"
Else      
filter=  "责任部门=\'" & user.name & "\' and 是否单发=0"
end if

\'还有预期反复检查代码,不如直接显示一下和成的表达式是什么,这才是编程
messagebox.show(filter)
[此贴子已经被作者于2021/10/25 8:27:12编辑过]

--  作者:ycs5801
--  发布时间:2021/10/25 9:28:00
--  
比如说我的责任部门有财务部,工程部,综合部,我现在是综合部登录,如果这样,是不是显示的都是综合部的行?而实际上,如果责任部门列是财务部且是否单发为0的行,我也想显示。
--  作者:有点酸
--  发布时间:2021/10/25 9:51:00
--  
好办,这就不是and,而是or了:

filter= "责任部门 =\'" & user.name &  "\' or  (责任部门=\'" & user.name & "\' and 是否单发=0)"

--  作者:ycs5801
--  发布时间:2021/10/25 10:14:00
--  

filter= "责任部门 =\'" & user.name &  "\' or  (责任部门<>\'" & user.name & "\' and 是否单发=0)"

应该不等于吧

--  作者:有点酸
--  发布时间:2021/10/25 10:55:00
--  
您的需要,您清除,messagebox显示合成的条件,根须需要调整。