大家能帮帮小弟吗?我用vb做一个系统登陆sql server时,想把登陆sql server的账号作为登陆数据库的用户名和密码,问题是,我如果把登录名输错,系统自动弹出一个对话框,说“用户‘登录名’登陆失败”,点确定后,程序弹出adodc1的refresh方法失败,我的想法是让窗体收到这个登陆失败对话框的消息后,点击确定按钮,后让程序退出,请问有办法解决吗?急等!!! 谢谢大家了!

解决方案 »

  1.   

    1,不建议用SQL的登录账号作为应用程序的登录用户来使用,在应用程序中修改SQL的账号密码难度较大,通常的做法是在应用程序数据库中建立一个用户档案表,连接数据库后再通过用户档案表来处理用户登录,这样的好处是可以在应用程序中控制用户的新增、修改、停用与删除等
    2,不建议用adodc控件绑定数据库,而是使用ado对象通过代码来连接数据
    3,使用错误陷井来处理程序出错以下是一个例子,可以参考:'创建对象连接数据库
    dim conn as new adodb.connection
    With conn
        If .State = adStateOpen Then .Close
        .ConnectionString = "driver=SQL Server;server=SQL所在服务器名或IP地址;uid=sa;pwd=sa的密码;database=数据库名"
        .CommandTimeout = 0
        .Open
    End With'以下是一段登录的代码
    Private Sub cmdenter_Click()
    On Error GoTo ErrHandle
        dim ar_tmp as new adodb.recordset
                        
        If Trim(dpLoginDate.Value) = "" Then
            MsgBox "请输入登录日期!", 48, "提示"
            Exit Sub
        End If
        
        Screen.MousePointer = vbHourglass
        
        If Trim(txtcUserName.Text) = "" Then
            MsgBox "请输入登录用户!", 48, "提示"
            Screen.MousePointer = vbDefault
            txtcUserName.SetFocus
            Exit Sub
        End If
        
        StrSql = " select cUserCode,cUserName,cUserpwd,bUserAdmin,bUserFbd from base_users " _
               & " where cUserCode='" & Trim(txtcUserName.Text) & "'"
        If ar_Tmp.State <> adStateClosed Then ar_Tmp.Close
        ar_Tmp.Open StrSql, g_strDBConn, adOpenKeyset, adLockReadOnly
        If ar_Tmp.RecordCount = 0 Then
            MsgBox "登录用户错误!", 48, "提示"
            Screen.MousePointer = vbDefault
            ar_Tmp.Close
            Exit Sub
        Else
            If Not (IsNull(ar_Tmp!cUserPwd) Or ar_Tmp!cUserPwd = "") Then
                If Trim(ar_Tmp!cUserPwd) <> Trim(txtcPassword.Text) Then
                    MsgBox "登录密码错误!", 48, "提示"
                    If ar_Tmp.State <> adStateClosed Then ar_Tmp.Close
                    Screen.MousePointer = vbDefault
                    Exit Sub
                End If
            Else
                If Trim(txtcPassword.Text) <> "" Then
                    MsgBox "登录密码错误!", 48, "提示"
                    If ar_Tmp.State <> adStateClosed Then ar_Tmp.Close
                    Screen.MousePointer = vbDefault
                    Exit Sub
                End If
            End If
            
            If ar_Tmp!buserFbd = True Then
                MsgBox "此用户已经停用!", 48, "提示"
                If ar_Tmp.State <> adStateClosed Then ar_Tmp.Close
                Screen.MousePointer = vbDefault
                Exit Sub
            End If
            
            '是否系统管理员
             If ar_Tmp!bUserAdmin = True Then
                g_blnUserAdmin = True
            Else
                g_blnUserAdmin = False
            End If
        End If
        If ar_Tmp.State <> adStateClosed Then ar_Tmp.Close
           
        Screen.MousePointer = vbDefault
        Exit Sub
    '错误处理
    ErrHandle:
        If ar_Tmp.State = adStateOpen Then ar_Tmp.Close
        MsgBox "操作失败,错误原因为:" & Err.Description, vbExclamation, "提示"
        Exit Sub
    End Sub