以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [分享]狐表自定义用户登录的问题和对策2  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=21615)

--  作者:shenyl0211
--  发布时间:2012/7/18 22:10:00
--  [分享]狐表自定义用户登录的问题和对策2

1、如果甲以甲的用户名登录,乙也用甲的用户名登录,显然是不合理的,因此,需要增加一张登录管理表,含四列内容,在登录窗口代码中进行控制,点“登录”后的代码如下:

\'考虑用户切换,从登录管理表中删除本机当前已登录用户再切换,在退出系统的菜单按钮代码前和关闭项目事件前的代码中也同样适用,只是删除 if ...和 end if 两行,并增加保存命令:DataTables("登录管理").save(),保证用户登录记录删除成功。在登录窗口的“退出”按钮中也要增加该保存命令。
Dim i As Integer
If _username IsNot Nothing Then
    MainTable=Tables("登录管理")
    With CurrentTable
        i = .Findrow("登录用户= \'" & _username & "\'",0,False)
        If i>-1 Then
            .Rows(i).Delete()
        End If
    End With
End If

\'登录处理
Dim UserName As String = e.Form.Controls("UserName").Value
Dim cmd As New SQLCommand
Dim dt As DataTable
Dim dr0,dr1 As DataRow
cmd.C
If UserName = ""  Then
    Messagebox.show("请选择用户!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
End If
cmd.CommandText = "Select * From {项目经理管理} Where [项目经理] = \'" & UserName & "\'"
If cmd.CommandText  = ""  Then
    Messagebox.show("用户名错!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
End If
dt = cmd.ExecuteReader
dr1 = dt.DataRows(0)
If e.Form.Controls("PassWord").Value = dr1("用户密码") Then
    _UserName = UserName
    _UserRoles = dr1("用户角色")
    If _UserRoles ="实体会计" Or  _UserRoles ="实体领导" Then
        _UserGroup = dr1("实体名称")
    End If
    e.Form.Close
Else
    Messagebox.show("密码错误!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
End If
FileSys.WriteAllText("d:\\项目管理系统\\数据文件\\用户登录.txt",_username,False, Encoding.Default)

\'判断同名用户是否已经登录,并作相应处理
With DataTables("登录管理")
    dr0 = .Find("登录用户= \'" & _username & "\'")
\'已登录的处理
    If dr0 IsNot Nothing Then
        Dim name As String=dr0("电脑名称")
        Dim IP As String=dr0("登录地址")
        Dim rq As Date=dr0("登录时间")
        MessageBox.Show("该用户已登录, 请确认或联系管理员或开发者!" & vbcrlf & "其电脑名称是 " & name & vbcrlf & "其登录地址是 " & IP & vbcrlf & "其登录时间是 " & rq,"错误",MessageBoxButtons.ok,MessageBoxIcon.Error)
        Syscmd.Project.Exit(False) \'退出系统
    End If
\'未登录的处理
    Dim HostName As String
    HostName=System.Net.Dns.GetHostName \'获得本机的机器名
    Dim IPAdress As System.Net.IPAddress
    IPAdress=System.Net.Dns.GetHostByName(HostName).AddressList.GetValue(0) \'获得本机的IP
    Dim dt2 As Date
    cmd.CommandText = "Select GetDate()"
    dt2 = cmd.ExecuteScalar()\'服务器的日期和时间
    dr0 = .AddNew()
    dr0("登录用户")=_username
    dr0("电脑名称")=HostName
    dr0("登录地址")=IPAdress.ToString
    dr0("登录时间")=dt2
    .save()
End With

2、项目文件路径如果不是想象的那样,会导致权限控制失效,需在BeforeOpenProject事件中增加下列代码。其中.foxdb和.foxex文件路径不同。

Dim s As String = FileSys.GetParentPath(e.File)
If e.file<>"D:\\项目管理系统\\设计资料\\项目管理系统.foxdb" Then
    If s<>"D:\\项目管理系统\\数据文件\\project" Then
        e.cancel=True
        e.HideSplashForm = True
        MessageBox.Show("项目文件安装路径错误, 请更正后重试!","警告",MessageBoxButtons.ok,MessageBoxIcon.warning)
    End If
End If

3、屏幕字体不能用125%显示,否则会出错。

希望大家多多交流心得。

[此贴子已经被作者于2012-7-18 22:14:33编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/7/19 6:32:00
--  

呵呵,多谢分享。

 

图片点击可在新窗口打开查看


--  作者:swagger
--  发布时间:2018/3/11 14:29:00
--  
谢谢分享
--  作者:zhenghangbo
--  发布时间:2018/6/18 22:21:00
--  外部表的时候,解题思路
这样思路行不行:
1:建立一张外部表“用户管理”,打开项目或切换账号的时候,每个账户登录先与“用户管理”对比有没有该用户,如果没有增加记录4列内容。如果已有该用户则提示该用户已经登入退出系统。在项目LoadUserSetting事件写代码。

2:在点击“切换按钮”click处添加代码。DataTables("用户管理").DeleteFor("[用户名] =  \'" & User.name &"\'")  \'切换用户的时候表中删除该用户

3:在项目的BeforeCloseProject事件添加代码 DataTables("用户管理").DeleteFor("[用户名] =  \'" & User.name &"\'") ’退出系统后表中删除此用户

--  作者:zhenghangbo
--  发布时间:2018/6/18 22:30:00
--  
建了一个本地的项目(没有连接外部数据库),试了下了,可以实现。不知道有没有更好的方法了。
--  作者:有点甜
--  发布时间:2018/6/19 9:24:00
--  
以下是引用zhenghangbo在2018/6/18 22:30:00的发言:
建了一个本地的项目(没有连接外部数据库),试了下了,可以实现。不知道有没有更好的方法了。

 

用openQQ处理

 

http://www.foxtable.com/webhelp/scr/3009.htm

 

http://www.foxtable.com/webhelp/scr/3053.htm