Dim Fc As Integer
Dim rc As Integer
Dim tf As Boolean
tf = False
cn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;" & "Data Source=xixi"
cn.Open
cn.CursorLocation = adUseClient
Set rs = cn.Execute("select * from pass")
If rs.EOF And rs.BOF Then '
    MsgBox "没有用户!", vbOKOnly, "提示"
    cn.Close
    Exit Sub
Else
    rs.MoveFirst
    Do While Not rs.EOF
            If Text1.Text = rs.Fields(0).Value And Text2.Text = rs.Fields(1).Value Then
'            MsgBox "ok!"
                tf = True
                Exit Do
            End If
    rs.MoveNext
    Loop
End If
    If tf = False Then
        MsgBox "用户名或密码有误!", vbOKOnly, "提示"
        cn.Close
        Exit Sub
    ElseIf tf = True Then
        form1.Hide
        Form2.Show
    End If
为什么输入正确时
为什么form2不能显示

解决方案 »

  1.   

    1、Set rs = cn.Execute("select * from pass")这样取会取出表PASS中的所有字段,你先确认一下该表中有多少个字段,如只有用户名和密码是可以这样用.
    2、或改成这样用:Set rs = cn.Execute("select 用户名,密码 from pass")
      

  2.   

    是登录时的密码验证吗?
    写得太复杂了啊。
    Set rs = new adodb.recordset
    cn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;" & "Data Source=xixi"
    cn.Open
    rs.CursorLocation = adUseClient
    rs.open "select password from pass where 存用户名那个字段='" & text1.text & "'",cn
    If rs.EOF And rs.BOF Then '
        MsgBox "没有用户!", vbOKOnly, "提示"
    else
        if text2.text = rs.fields("password") then
            form1.Hide
            Form2.Show
        else
            MsgBox "用户名或密码有误!", vbOKOnly, "提示"
        End If
    end if
    rs.close
    cn.close
      

  3.   

    dim rs as new adodb.recordset
    dim islogin as boolean
    islogin=false
    rs.open "select * from pass where username='用户名' and pass='密码'",conn,3,2
    if not rs.eof then
      msgbox "ok"
      islogin=true
    else
      msgbox "bad"
    end if
    rs.close
    conn.close
    if islogin then
      form1.visible=false
      form2.show 1
    end if
      

  4.   

    晕,怎么能这样判断啊!?效率太低了吧!
    改成这样吧:
    dim sql as string
    sql="select * from pass where 用户名='"& text1.text &"' and 密码='"& text2.text &"'" 
    rs.open sql,cn
    If rs.EOF  Then '
        MsgBox "密码错误或者用户名不对!", vbOKOnly, "提示"
        rs.Close
        set rs=nothing
        Exit Sub
    Else
        rs.Close
        set rs=nothing
        form1.Hide
        Form2.Show
    End If
      

  5.   

    Dim Fc As Integer
    Dim rc As Integer
    Dim tf As Boolean
    tf = False
    cn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;" & "Data Source=xixi"
    cn.Open
    cn.CursorLocation = adUseClient
    set rs =new ADODB.RecordSet
    rs.open "select * from pass",cn,adOpenDynamic,adLockReadOnly
    If rs.EOF = True then
        MsgBox "没有用户!", vbOKOnly, "提示"
        rs.Close
        cn.Close
        Exit Sub
    end if
        Do Until rs.EOF
            If Text1.Text = rs.Fields!user And Text2.Text = rs.Fields!pass Then
                 MsgBox "ok!"
                 tf = True
                 Exit Do
            End If
        rs.MoveNext
        tf=false
        Loop
        rs.close    If tf = False Then
            MsgBox "用户名或密码有误!", vbOKOnly, "提示"
        Else
            form1.Hide
            Form2.Show
        End If
      

  6.   

    上边是我根据你的改的,不过最好的方法应该是pweixing(幸运米,幸运得米!)写的那样,直接查找用户名和密码,如果找不到就是用户名或密码错误,如果想判断是不是仅仅是用户名错误,那应该查找用户所对应的密码,如果存在则用户名正确,然后判断密码
      

  7.   

    改成这样用:Set rs = cn.Execute("select 用户名,密码 from pass where 用户名='" & Text1.Text & "'" (假如是用户名的文本框)")
    Dim Fc As Integer
    Dim rc As Integer
    Dim tf As Boolean
    tf = False
    cn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;" & "Data Source=xixi"
    cn.Open
    cn.CursorLocation = adUseClient
    Set rs = cn.Execute("select 用户名,密码 from pass where 用户名='" & Text1.Text & "'" ")
    If rs.EOF And rs.BOF Then '
        MsgBox "没有用户!", vbOKOnly, "提示"
        cn.Close
        Exit Sub
    Else
            If Text1.Text = rs.Fields(0).Value And Text2.Text = rs.Fields(1).Value Then
                MsgBox "ok!"
                tf = True
            else
                tf = false
            
            End If
    End If
        If tf = False Then
            MsgBox "用户名或密码有误!", vbOKOnly, "提示"
            cn.Close
            Exit Sub
        ElseIf tf = True Then
            form1.Hide
            Form2.Show
        End If
      

  8.   

    我想到了,你的用户名和密码是什么类型数据的
    把所有的rs.fields用Trim过滤一下,可能存在空格,然后再进行比较
      

  9.   

    把你自己的rs.Fields(0).Value全换成Trim(rs.Fields(0).Value)
    把你自己的rs.Fields(1).Value全换成Trim(rs.Fields(1).Value)
      

  10.   

    你的问题应该是
    If Text1.Text = rs.Fields(0).Value And Text2.Text = rs.Fields(1).Value
    这句的问题
    你看记录集第一个字段和第2个字段分别对应用户名和密码吗?
    这个需要你设断点,单步调试下
    另外你这个程序的确是效率太低了,何必要这么写呢?
    直接
    select * from pass where 用户名='"& text1.text &"' and 密码='"& text2.text &"'
    然后看返回的记录数是否>0如果是就通过认证了,根本不需要用到循环的
    你可以参考pweixing(幸运米,幸运得米!) 写的。
      

  11.   

    补充下,楼上这种情况也要考虑到呵呵
    你可以把sql这么写
    select * from pass where 用户名='"& Trim(text1.text) &"' and 密码='"& Trim(text2.text) &"'
      

  12.   

    还有一点,你的数据库中的数据类型最好不要设成char,强烈建议你把用户名和密码的列设成是varchar类型,不然的话位数不足会补空格的,这样就算你的用户名和密码打对了验证的时候也不行的
    "myusername"<>"myusername      "
      

  13.   

    不是那样的,他的text可能没有写错,数据库中的写错了,数据如果是char类型16位的话,如果只输了8位,后边的8位会自动补成空格的
    这样注册的时候用户名是"12345678",而数据库里就是"12345678        "了
    所以还是改数据库比较方便,大家给的语句都是非常好的