我在登陆窗口登陆以后,想要修改密码,下面是密码修改代码
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中有一个是真,或者当前的记录已被删除,所需的操作要求一个当前的记录。唉,菜鸟我没招了,救救我,谢谢兄弟们了
~~~~~ ~~~~~
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
加上我第一楼的代码就是我所有的代码了,请指教!!!!!!
If rs.RecordCount>0 Then
rs.Fields("password").Value = Trim(Text1.Text)
rs.Update
MsgBox "密码修改成功"
frmpassword.Hide
End If
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呢!
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这个我也是从例子上看的,我也不大理解,但是我登陆是没有问题的。这个问题具体怎么解决还请给个具体的代码!谢谢!
对于我们菜鸟来说首先不是考虑安全问题,而是可行性问题。
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()"做成一个函数,这样可以进行错误跟踪.
哎啊,还是没有改过来也没有提示,呵呵,气死了!
应该没有问题吧
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
*******************************
objRs1.CursorLocation = adUseClient’设置客户端游标