以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  记录退出时间  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190270)

--  作者:edisontsui
--  发布时间:2024/1/27 14:48:00
--  记录退出时间
Dim drf As DataRow = DataTables("系统版本").SQLFind("用户名 = \'" & User.name & "\'")
If drf IsNot Nothing Then
    drf("退出时间") = Date.now
    drf.save
End If

上面代码放在 beforecloseproject 里面,用于记录用户退出系统的时间。但是,好像有时候记录不到退出时间,请问是什么原因呢?比如,同样在我的电脑登录,用开发者登录,可以记录退出时间;如果用其他用户登录,就不会记录退出时间。谢谢。

--  作者:有点蓝
--  发布时间:2024/1/27 14:57:00
--  
使用的内置用户,还是自定义用户管理?
--  作者:edisontsui
--  发布时间:2024/1/27 16:01:00
--  
应该是内置用户管理吧,我没有专门设计过用户登录界面。
--  作者:有点蓝
--  发布时间:2024/1/27 16:10:00
--  
代码在什么事件的?

调试
msgbox(User.name)
Dim drf As DataRow = DataTables("系统版本").SQLFind("用户名 = \'" & User.name & "\'")
msgbox(drf IsNot Nothing)
If drf IsNot Nothing Then
    drf("退出时间") = Date.now
    drf.save
End If

--  作者:edisontsui
--  发布时间:2024/1/29 14:40:00
--  
暂时测试结果是没问题,我再观察一段时间。谢谢。
--  作者:edisontsui
--  发布时间:2024/2/22 10:13:00
--  
代码是放在 beforecloseproject 这个事件里面。现在还是有部分用户的退出时间无法记录下来。好像是跟用户组别有关:在执行4楼的代码时,某些组别的用户不会显示 msgbox(User.name) 和 msgbox(drf IsNot Nothing)。但是我也没有限制哪个用户组别是否执行代码。请问还有什么原因呢?
--  作者:有点蓝
--  发布时间:2024/2/22 10:30:00
--  
msgbox代码不可能会受什么组别影响。要么代码根本就没有执行,也就是程序是强制退出的,比如

1、断电被关机
2、没有退出程序,直接关机
3、到任务管理器强制退出

--  作者:edisontsui
--  发布时间:2024/2/22 11:26:00
--  
是正常关闭系统的,就是点击系统右上角的 x 来退出系统的。现在发现,就是“营销”和“仓库”这个两个组的用户执行 beforecloseproject 就会有问题,其他组别都没有问题。
我们再看下面的 beforeOpenProject 代码,这些代码,所有组别执行都没有问题:
\'记录用户登录时的 IP 地址
Dim IPAdress As System.Net.IPAddress
Dim HostName As String
HostName = System.Net.Dns.GetHostName \'获得本机的机器名
Dim l As Integer = System.Net.Dns.GetHostByName(HostName).AddressList.Length
Dim s As String = ""
For i As Integer = 0 To l - 1
    IPAdress = System.Net.Dns.GetHostByName(HostName).AddressList.getValue(i) \'获得本机的IP
    s &= IPAdress.Tostring & ","
Next
s = s.trim(",")

If drf IsNot Nothing Then
    drf("系统发布日期") = Publishdate
    drf("登录时间") = Date.now
    drf("计算机名称") = SysInfo.ComputerName 
    drf("IP地址") = s
    drf("组别") = User.group
    drf.save
Else
    Dim dra1 As DataRow = DataTables("系统版本").AddNew()
    dra1("用户名") = User.name
    dra1("系统发布日期") = Publishdate
    dra1("登录时间") = Date.now
    dra1("计算机名称") = SysInfo.ComputerName   
    dra1("IP地址") = s
    dra1("组别") = User.group 
    dra1.save
End If
\'记录用户登录信息结束


--  作者:有点蓝
--  发布时间:2024/2/22 11:39:00
--  
drf是什么东西?
--  作者:edisontsui
--  发布时间:2024/2/22 12:35:00
--  
不好意思,抄漏一行给你,下面这行是在8楼的代码最前面的:
Dim drf As DataRow = DataTables("系统版本").SQLFind("用户名 = \'" & User.name & "\'")