以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]选择非今天日期时,计数代码失效(已解决)  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=58016)

--  作者:yyzlxc
--  发布时间:2014/10/10 9:20:00
--  [求助]选择非今天日期时,计数代码失效(已解决)
代码目的,对同一日期和员工ID的记录进行计数,在“实时采集”表的DataColChanged事件如下代码,点击手工数据按钮,可以在指定日期增加一组数据(从采集模板表复制),并在计数列显示当天的第几组数据。
问题:只有选择今天的日期,计数正常;否则计数失效。如何解决,请各位老师指教,谢谢!


    Case "员工ID"
        If e.DataCol.Name = "员工ID" Then
            If e.DataRow.IsNull("员工ID") Then
                e.DataRow("计数") = Nothing
            Else
                If e.DataRow.IsNull("计数") Then
                    Dim max As String \'最大计数
                    Dim idx As Integer
                    Dim rq As String = e.DataRow("日期")
                    Dim ygid As String = e.DataRow("员工ID")
                    max = e.DataTable.Compute("Max(计数)","日期 = \'"& rq &"\' And 员工ID = \'"& ygid &"\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得最大计数
                    If max > "" Then \'如果存在最大计数
                        idx = CInt(max) + 1 \'获得最大计数,并加1
                    Else
                        idx = 1 \'否则计数等于1
                    End If
                    e.DataRow("计数") = idx
                End If
            End If
        End If

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb



[此贴子已经被作者于2014-10-10 13:38:38编辑过]

--  作者:有点甜
--  发布时间:2014/10/10 9:33:00
--  

改一下

 

max = e.DataTable.Compute("Max(计数)","日期 = #"& rq &"# And 员工ID = \'"& ygid &"\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得最大计数


--  作者:yyzlxc
--  发布时间:2014/10/10 9:39:00
--  
谢谢甜老师的回复,代码修改后,好像不起作用,依然如故,还请指教,谢谢!!
--  作者:有点甜
--  发布时间:2014/10/10 9:40:00
--  

 请认真测试。


--  作者:yyzlxc
--  发布时间:2014/10/10 9:46:00
--  
测试后,依旧如故,上传修改后的项目。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb



--  作者:有点甜
--  发布时间:2014/10/10 9:51:00
--  

 没有问题啊


--  作者:yyzlxc
--  发布时间:2014/10/10 9:54:00
--  
那我把有数据的项目上传,求解。谢谢甜老师!!


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.foxdb



--  作者:有点甜
--  发布时间:2014/10/10 9:55:00
--  

你要先输入日期,再输入员工ID号。

 

代码改成这样

 

Case "员工ID"
        If e.DataCol.Name = "员工ID" Then
            If e.DataRow.IsNull("员工ID") Then
                e.DataRow("计数") = Nothing
            Else
                If e.DataRow.IsNull("计数") Then
                    Dim max As String \'最大计数
                    Dim idx As Integer
                    Dim rq As String = e.DataRow("日期")
                    Dim ygid As String = e.DataRow("员工ID")
                    max = e.DataTable.Compute("Max(计数)","日期 = #"& rq &"# And 员工ID = \'"& ygid &"\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得最大计数
                    If max > "" Then \'如果存在最大计数
                        idx = CInt(max) + 1 \'获得最大计数,并加1
                    Else
                        idx = 1 \'否则计数等于1
                    End If
                    e.DataRow("计数") = idx
                End If
            End If
        End If


--  作者:yyzlxc
--  发布时间:2014/10/10 10:50:00
--  
将下面的代码加在按钮中,问题解决,谢谢甜老师的指教,但估计可能是DataColChanged事件的一个bug,待考证。

    For Each dr As DataRow In DataTables("实时采集").DataRows
        If dr.IsNull("日期") Then
            dr("计数") = Nothing
        Else
            If dr.IsNull("计数") Then
                Dim max As String \'最大编号
                Dim idx As Integer
                Dim rq As String = dr("日期")
                Dim ygid As String = dr("员工ID")
                max = DataTables("实时采集").Compute("Max(计数)","日期 = \'"& rq &"\' And 员工ID = \'"& ygid &"\' And 序号 <> " & dr("序号")) \'取得最大计数
                If max > "" Then \'如果存在最大计数
                    idx = CInt(max) + 1 \'获得最大计数,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                dr("计数") = idx
            End If
        End If
    Next

--  作者:有点甜
--  发布时间:2014/10/10 10:52:00
--  
 不可能是bug,你怎么操作,怎么不正常?我测试很正常啊