以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]请看下这段代码哪儿有问题 为何我执行结果不正确  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=59344)

--  作者:mxm121
--  发布时间:2014/11/2 17:48:00
--  [求助]请看下这段代码哪儿有问题 为何我执行结果不正确
在搞客户端单点登录 出现点问题

在afteropenproject里添加如下代码

With Tables("用户登录状态表")                \'将新登录用户信息写入
    .AddNew
    .Current("user_ID") = User.Name
    .Current("computer_ID") = ComputerId
    .Current("login_time") = Date.Now
    .Current("refresh_time") = Date.Now
    .Current("state") = 1
End With

Dim drs As List(of DataRow)  = DataTables("用户登录状态表").SQLSelect("user_ID = \'" & user.Name & "\'")
If drs IsNot Nothing Then
    For Each dr As DataRow In drs
        If dr("computer_ID") <> ComputerId Then
            dr("state") = 0
        End If
        If dr("computer_ID") = ComputerId And dr("login_time") <> Tables("用户登录状态表").Current("login_time") Then
            dr("state") = 0
        End If
    Next
End If

执行红色这段 为什么state列为什么不能置0呢




--  作者:有点甜
--  发布时间:2014/11/2 17:57:00
--  

不理解你的用意

 

With Tables("用户登录状态表")                \'将新登录用户信息写入
    .AddNew
    .Current("user_ID") = User.Name
    .Current("computer_ID") = ComputerId
    .Current("login_time") = Date.Now
    .Current("refresh_time") = Date.Now
    .Current("state") = 1
    .Current.Save
End With


Dim drs As List(of DataRow)  = DataTables("用户登录状态表").SQLSelect("user_ID = \'" & user.Name & "\'")
If drs IsNot Nothing Then
    For Each dr As DataRow In drs
        If dr("computer_ID") <> ComputerId Then
            dr("state") = 0
        End If
        If dr("computer_ID") = ComputerId And dr("login_time") <> Tables("用户登录状态表").Current("login_time") Then
            dr("state") = 0
        End If
    Next
End If


--  作者:mxm121
--  发布时间:2014/11/2 18:18:00
--  
哦 查找记录里有相同用户名的行,如果机器码和本机不同 直接置state为0
机器码与本机相同的 只要不是本次登录的记录 将state置0

每个客户端会周期性刷新记录 同时查看state 如果是0 则提示在其他地方登录 删除自己的记录 然后退出

还会做个服务器端 查询刷新时间 如果某用户异常退出 不刷新了 就清楚记录

--  作者:mxm121
--  发布时间:2014/11/2 18:22:00
--  
试了一下 还是不行啊 在代码里加了msgbox显示 dr("state")是0 但是表里刷还是1
--  作者:mxm121
--  发布时间:2014/11/2 19:06:00
--  
把save加到红色标记的地方才对  不知道为什么会是这样 能解释下修改和存储的过程不  

With Tables("用户登录状态表")                \'将新登录用户信息写入
    .AddNew
    .Current("user_ID") = User.Name
    .Current("computer_ID") = ComputerId
    .Current("login_time") = Date.Now
    .Current("refresh_time") = Date.Now
    .Current("state") = 1
End With

Dim drs As List(of DataRow)  = DataTables("用户登录状态表").SQLSelect("user_ID = \'" & user.Name & "\'")
If drs IsNot Nothing Then
    For Each dr As DataRow In drs
        dr("state") = 0
        If dr("computer_ID") <> ComputerId Then
            dr("state") = 0
            dr.Save()
        End If
        
        If dr("computer_ID") = ComputerId And dr("login_time") <> Tables("用户登录状态表").Current("login_time") Then
            dr("state") = 0
            dr.Save()
        End If
    Next
End If

--  作者:有点甜
--  发布时间:2014/11/2 19:06:00
--  

Dim drs As List(of DataRow)  = DataTables("用户登录状态表").SQLSelect("user_ID = \'" & user.Name & "\'")
If drs IsNot Nothing Then
    For Each dr As DataRow In drs
        If dr("computer_ID") <> ComputerId Then
            dr("state") = 0

            dr.Save
        End If
        If dr("computer_ID") = ComputerId And dr("login_time") <> Tables("用户登录状态表").Current("login_time") Then
            dr("state") = 0

            dr.Save
        End If
    Next
End If