我在登陆窗口登陆以后,想要修改密码,下面是密码修改代码
Private Sub Command1_Click()
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset conn.ConnectionString = "Driver={sql server};server=10.8.61.29;uid=sa;pwd=feng;database=feng"
conn.Open
 rs.Open "select password from login where password='" & Trim(Text1.Text) & "'", conn, 1, 3 If rs.EOF = True And rs.BOF Then
 rs.Fields("password").Value = Trim(Text1.Text)
  rs.UpdateMsgBox "密码修改成功"
frmpassword.HideEnd If
End Sub出错提示:实时错误‘3021’
BOF或EOF中有一个是真,或者当前的记录已被删除,所需的操作要求一个当前的记录。唉,菜鸟我没招了,救救我,谢谢兄弟们了

解决方案 »

  1.   

    If NOT rs.EOF And NOT rs.BOF) Then
       ~~~~~          ~~~~~
      

  2.   

    嗯,谢谢truewill,这样写出错提示是没有了,可是“密码修改成功”的提示却没出来。密码也没有被修改。是不是我其它地方没弄好呢? 我登陆窗的代码是
    Private Sub Cmdok_Click()
     'On Error Resume Next
     Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.ConnectionString = "Driver={sql server};server=10.8.61.29;uid=sa;pwd=feng;database=feng"
    conn.Openrs.Open "select name,password from login where name='" & Trim(txtusername.Text) & "' And password='" & Trim(txtpassword.Text) & "'", conn, adOpenStatic, adLockReadOnly, adCmdText
    If rs.EOF = True And rs.BOF Then
     MsgBox "请核对您的用户或者密码,并重新登陆!", vbExclamation
    txtpassword.Text = ""
    txtpassword.SetFocus
    Else
    frmlogin.Hide
    frmmain.Show
    'rs.Close
    End If
    End SubPrivate Sub cmdcancel_Click()
    End
    End SubPrivate Sub Form_Load()
    txtusername.Text = ""
    txtpassword.Text = ""
    End Sub
    标准模块里的代码
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    加上我第一楼的代码就是我所有的代码了,请指教!!!!!!
      

  3.   

    你试试这样
    If rs.RecordCount>0 Then
        rs.Fields("password").Value = Trim(Text1.Text)
        rs.Update
        
        MsgBox "密码修改成功"
        frmpassword.Hide
    End If
      

  4.   

    几点意见,大家探讨:
    1、采用类似“rs.Open "select name,password from login where name='" & Trim(txtusername.Text) & "' And password='" & Trim(txtpassword.Text) & "'", conn, adOpenStatic, adLockReadOnly, adCmdText”代码实现登录认证的方法,安全性太差了。
    比如:我不知道密码,但我输入以下字符“a'or'a'='a”,至于用户名嘛,随便输入“123”啦。就完全可以绕过你的密码防范,这是因为此时传输至数据库中的SQL语句已经变成“select * from login where name='123' and  password='a' or 'a='a'"了!
    你也可以说我在密码框中限制用户输入单引号,但我还可以用“CTRL+C”+“CTRL+V”,哼哼哼(狂笑)。2、
    “ rs.Open "select password from login where password='" & Trim(Text1.Text) & "'", conn, 1, 3 If rs.EOF = True And rs.BOF Then
     rs.Fields("password").Value = Trim(Text1.Text)
      rs.Update”
    *******************************************
    楼主的这段代码意思大概是说如果当前用户在TEXT1中输入的密码在表中没有记录(表示是一个新的密码),就用新的密码来代替旧的密码吧。但是:"If rs.EOF = True And rs.BOF Then"是什么意思?truewill(无处不在)修改成“If NOT rs.EOF And NOT rs.BOF) Then”,一样让人搞不懂。就好象我在问你多大年龄,你却回答我“我既不是刚出生,也还没有老死”一样可笑。如果rs为NULL,直接写成“if rs.eof”不就可以了吗?!如果rs为NULL,又怎么会出现“rs.bof”的情况呢?呵呵。
    ************************************************
    至于为什么修改不了密码,原因非常简单,你的RS已经EOF了,又怎么可能UPDATE呢!
      

  5.   

    rs.Open "select password from login where password='" & Trim(Text1.Text) & "'", conn, 1, 3
     If rs.RecordCount > 0 Then
     rs.Fields("password").Value = Trim(Text1.Text)
     rs.Update
    MsgBox "密码修改成功"
    frmpassword.HideEnd If
    还是没有msgbox输出,郁闷
    ——————————————————
    fyming() 兄弟真幽默,哈哈,
    If  rs.EOF  =  True  And  rs.BOF这个我也是从例子上看的,我也不大理解,但是我登陆是没有问题的。这个问题具体怎么解决还请给个具体的代码!谢谢!
    对于我们菜鸟来说首先不是考虑安全问题,而是可行性问题。
      

  6.   


    rs.Open "select password from login where password='" & Trim(Text1.Text) & "'", conn, 1, 3
     If rs.RecordCount > 0 Then
        conn.execute("update login set password='" & Trim(Text1.Text) & "'")
        MsgBox "密码修改成功"
        frmpassword.Hide
     end if
    *******************************直接手写的,你试试看吧.不过我们通常都把"conn.execute()"做成一个函数,这样可以进行错误跟踪.
      

  7.   

    execute 这个不需要另外定义吧?
    哎啊,还是没有改过来也没有提示,呵呵,气死了!
      

  8.   

    我的SQL表名为 login 字段有 name_id(int),name(char),password(char) 三个字段
    应该没有问题吧
      

  9.   

    哈哈哈。问题搞定了。我在fyming()兄弟给的代码上加了一个字符"="就OK了,昏昏,真诚感谢各位的帮助!给分给分
      

  10.   


    rs.Open "select password from login where password='" & Trim(Text1.Text) & "'", conn, 1, 3
     If rs.EOF Then
        conn.execute("update login set password='" & Trim(Text1.Text) & "'")
        MsgBox "密码修改成功"
        frmpassword.Hide
     end if或者:
    rs.Open "select password from login where password='" & Trim(Text1.Text) & "'", conn, 1, 3
     If rs.EOF Then
        rs.addnew
        rs.Fields("password").Value = Trim(Text1.Text)
        rs.Update
        MsgBox "密码修改成功"
        frmpassword.Hide
     end if
    *******************************
      

  11.   

    记得以前我写时也出现这个提示,如数据库中有数据,是要设置:
    objRs1.CursorLocation = adUseClient’设置客户端游标