Office中国论坛/Access中国论坛

标题: [技巧分享] 如何使用SQL SERVER的认证机制在ADP的窗体中登录 [打印本页]

作者: tango    时间: 2002-9-5 07:04
标题: [技巧分享] 如何使用SQL SERVER的认证机制在ADP的窗体中登录
又一个抛砖引玉之作。我的小程序已经能够设置角色成员和新建用户了,真得很有趣。
先来个基础吧。

××××××××××××
准备工作
××××××××××××

1.  建立一个窗体 frmLogon
2.  放两个TXT,名称为
  1) txtUser
  2) txtPassword
3. 放一个命令按钮,名称为cmdLogon

×××××××××××××
代码段
×××××××××××××

dim strUserName as string'全局变量用户名

Private Sub cmdLogon_Click()
On Error GoTo ErrorHandler'有错误发生了,那应该是没法登录吧!

Static intLoginFailedTimes As Integer'错误次数,三次登录不成就废了他

If intLoginFailedTimes > 2 Then

    MsgBox "达到最大错误充许次数,程序关闭...see you"
    Application.CloseCurrentDatabase

End If
   
    Dim obj As Object
    Const conPropNotFoundError = 3270

    '这句是关键,用户输入的用户名和密码,让SQLSERVER自己去确认对不对,如果连上了用SQL SERVER的角色权限控制用户举动,如果没连上,则产生错误,由ErrorHandler处理。

    CurrentProject.OpenConnection "rovider=SQLOLEDB.1; Password=" & Me.txtPassword & "; Persist Security Info=false; User ID=" & Me.txtUser & ";Initial Catalog= DataBaseName; Data Source= YourSQLServerName"
   
    ' 返回指向当前数据库的 Database 对象变量。
    Set dbs = CurrentProject

    Dim strUserName As String
   
    '我用一个表tbIOperator存储了关于此用户在本程序内的各项设置,把信息提取出来,放在标题栏上

    strUserName = DLookup("[str姓名]", "[tbIOperator]", "[str操作人] like '" & Me.txtUser & "'")'用户的中文姓名

    strPlace = DLookup("[str负责地区]", "[tbIOperator]", "[str操作人] like '" & Me.txtUser & "'")'用户的负责地区,以供跨地域操作时使用
   
    If strUserName = "" Then
        strUserName = Me.txtUser
    End If
   
    '设置标题栏
    dbs.Properties!AppTitle = "[技巧分享] || 当前用户 : " & strUserName & " || 负责地区 : " & strPlace
   
    DoCmd.ShowToolbar "menu bar", acToolbarNo '隐藏菜单栏
    DoCmd.ShowToolbar "mnuAppMenu", acToolbarYes '显示本程序菜单栏

    ' 更新屏幕上的标题栏。
    Application.RefreshTitleBar
   

    DoCmd.Close
    Exit Sub
   
ErrorHandler:
    If Err.Number = conPropNotFoundError Then'没发现程序的标题栏属性则生成。
        Set obj = dbs.CreateProperty("AppTitle", dbText, "技巧分享:: User:" & strUserName)
        dbs.Properties.Append obj
        Resume Next
    Else'我想大概除了上边一个错误外,只有错误的用户登录才会引起吧?
        MsgBox "无权登入...输入的用户名或密码有误,请确认重输入"
        intLoginFailedTimes = intLoginFailedTimes + 1
    End If

End Sub
[em26]

可不可以啊,大家?
如果有人知道如何用最简单的办法把一个数据库的所有表,视图的角色权限生成脚本,以便移植到另外一台服务器上的话,也请分享一下吧!我用了许多的办法让SQLSERVER自动生成脚本,但只能生成角色名称,而没有生成角色对于表,视图的权限,让我很郁闷啊,自己一条条的打命令,要累死的。


[此贴子已经被作者于2002-9-4 23:03:36编辑过]


作者: zhuyiwen    时间: 2002-9-5 08:21
非常不错,但在实际的程序操作中,一般都不这么做。

不过这样非常好!
作者: HG    时间: 2002-9-5 17:32
好想法,我一般對SQL的用法都是調用存儲過程。
對SQL安全方面的存儲過程也很多,且可以用VBA來調用,
是不是調用SQL原有的sp_系列的安全方面的存儲過程,傳遞參數給它,讓它去搞定,更方面一些哪?
作者: tango    时间: 2002-9-6 05:22
我也知道用sp_系列过程的,可是这样好象更加方便一点,连接和认证一次搞定,不是吗?
作者: adge    时间: 2003-5-1 22:30
在ADP中怎么调用sp_系列过程啊,能不能举个连接的例子。

作者: renzhm    时间: 2003-5-7 16:53
呵呵,一般我们不会使用MSSQL的用户来进行用户登陆!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3