我现在做的是一个登录窗口,一个combo1,用来读取数据库中users中的用户名,
一个text1,用来输入密码。刚才的代码是form_load()中的代码,现在是按钮
command1_click()的代码,我的想法是按钮按下后,判断用户名和密码是否一致。
如果一致mainfrm.show,否则,继续输入密码。
代码如下:
Private Sub Command1_Click()
    If Text1.Text = "" Or Combo1.Text = "" Then
        Msg "请选择用户名或输入密码", 0 + 48, "提示"
        Text1.SetFocus
    End If
    If Val(Text1.Text) = Asc(Combo1.Index) Then
        'msgbox "正确"
        mainfrm.Show
        Unload Me
    Else
        MsgBox "密码错误", 0 + 16, "错误"
        Text1.SetFocus
        Exit Sub
    End If
End Sub
问题有三个:
1、输入一个错误的密码,提示Msg "请选择用户名或输入密码", 0 + 48, "提示"
   子程序或函数未定义。
2、输入正确的密码,提示If Val(Text1.Text) = Asc(Combo1.Index) Then
   实时错误:“343”,对象不是一个数组。
3、我输入密码的时候想让输入的内容以*显示出来。现在是输入的字母和数字全部原样显示。

解决方案 »

  1.   

    问题2、3已经解决。
    问题2错在Asc(Combo1.Index),应该写成Asc(Combo1.ListIndex)
    问题3应该设置PasswordChar为*还有问题1没有解决,还望各位大侠帮助。谢谢先
      

  2.   

    给你一个例子!
    这是一个登陆窗体的全部代码
    Option Explicit
    Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nSize As Long) As Long
    Public OK As Boolean
    '记录确定次数
    Dim miCount As Integer
    Private Sub Form_Load()
        Dim sBuffer As String
        Dim lSize As Long
        sBuffer = Space$(255)
        lSize = Len(sBuffer)
        Call GetUserName(sBuffer, lSize)
        If lSize > 0 Then
            txtUserName.Text = ""
        Else
            txtUserName.Text = vbNullString
        End If
        OK = False
        miCount = 0
    End Sub
    Private Sub cmdCancel_Click()
        OK = False
        Me.Hide
    End Sub
    Private Sub cmdOK_Click()
        Dim txtSQL As String
        Dim mrc As ADODB.Recordset
        Dim Msgtext As String
        'ToDo: create test for correct password
        'check for correct password
        
        UserName = ""
        If Trim(txtUserName.Text = "") Then
            MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
            txtUserName.SetFocus
        Else
            txtSQL = "select * from 用户信息表 where user_ID = '" & txtUserName.Text & "'"
            Set mrc = ExecuteSQL(txtSQL, Msgtext)
            If mrc.EOF = True Then
                MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
                txtUserName.SetFocus
            Else
                If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then
                    OK = True
                    mrc.Close
                    Me.Hide
                    UserName = Trim(txtUserName.Text)
                Else
                    MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告"
                    txtPassword.SetFocus
                    txtPassword.Text = ""
                End If
            End If
        End If
        
        miCount = miCount + 1
        If miCount = 3 Then
            Me.Hide
        End If
        Exit Sub
    End Sub
    ————————————————————————————————————————
    public username as string
    这是在模板里定义的代码
      

  3.   

    我手里有一整套完整的程序。
    我是照着这套程序写的。这套程序里用的就是Msg
    会不会是有什么控件里有msg?
      

  4.   

    Private Sub Command1_Click()
        If Text1.Text = "" Or Combo1.Text = "" Then
            MsgBox "请选择用户名或输入密码", 48, "提示"  //删除0+,改msg为msgbox
            Text1.SetFocus
            Exit sub                                      //退出这个过程
        End If
        If Trim(Text1.Text) = Trim(Combo1.Text) Then     //修改
            msgbox "正确"
            mainfrm.Show
            Unload Me
        Else
            MsgBox "密码错误", 16, "错误"
            Text1.SetFocus
            Exit Sub
        End If
    End Sub在要输入密码的那个文本框的PassWord属性中敲入一个*号就ok
      

  5.   

    ASC是取ASC码的函数~当然报错了~
      

  6.   

    msgbox "请选择用户名或输入密码",vbInformation+vbOKOnly,"提示"
      

  7.   

    1。vb里不是msg而是msgbox
    2。你为什么要用ASC函数来做,这个本身方法就不对,况且你取combo.index干什么?
    3。把那个输入密码的text控件属性的PasswordChar设置为*