为什么不能修改密码?

sd2125190 2003-12-16 10:52:10
做简单学生管理系统中,在修改密码中出了问题,为什么不能实现?
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String
Dim DB As String
DB = App.Path & "\students.mdb"
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB
SQL = "select * from 登录表 where 密码='" & login.password.Text & "'"
rs.Open SQL, conn, adOpenStatic, adLockOptimistic
If rs.RecordCount > 0 Then
If Text1.Text = Text2.Text Then

rs!密码 = Text1.Text
rs.Update
Else
MsgBox "修改密码和确认密码不一致!"
Text1.Text = ""
Text2.Text = ""
End If
End If
End Sub
//login.password.text是登录窗口的文本
...全文
84 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
rs.Find "密码='" & login.password.Text & "'"

这句不用,如果代码执行了,记录肯定改了啊

没有任何错误提示么
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
但是还是不对,记录没有改
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String
Dim DB As String
DB = App.Path & "\students.mdb"
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB
SQL = "select * from 登录表 where 密码='" & login.password.Text & "'"
rs.Open SQL, conn, adOpenDynamic, adLockOptimistic
If Not rs.EOF And Not rs.BOF Then

If Text1.Text = Text2.Text Then
rs.Find "密码='" & login.password.Text & "'"
rs.Fields("密码") = Text2.Text
rs.Update
Unload Me
Else
MsgBox "修改密码和确认密码不一致!"
Text1.Text = ""
Text2.Text = ""
End If
End If
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
谢谢了
SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
adOpenDynamic和adOpenStatic都是游标类型
动态和静态的区别

静态类型返回的记录集已经脱离和数据库的实时联系
动态的记录集,在用户更改、新增等操作时会自动反应到数据库端去

动态占用的资源要多于静态,所以查询用静态就行,更新要使用动态游标
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
为什么要改为adOpenDynamic,请解释一下两者的区别和怎么使用它?
是不是文本型要加',其它类型不要加?
谢谢!
pennyzhueng 2003-12-16
  • 打赏
  • 举报
回复
up
SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
如果密码是数字型的,这句修改
SQL = "select * from 登录表 where 密码=" & login.password.Text & ""

另外不使用If rs.RecordCount > 0 Then 来判断是否存在记录

使用 if not rs.eof and not rs.bof then 来判断

另外rs.Open SQL, conn, adOpenStatic, adLockOptimistic 改为

rs.Open SQL, conn, adOpenDynamic, adLockOptimistic

sd2125190 2003-12-16
  • 打赏
  • 举报
回复
为什么?
SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
呵呵,你的代码根本没有向数据库写啊,当然不可能添加到数据库

另外,你还是重开一贴吧,这个太长了
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
我意思是添加、保存后,记录没有添加到数据库中
SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
你保存中什么都没有做啊
也没有条件查询,你说没有记录是什么意思

学生年级数据表中是没有数据,而且你的代码有错误

改正如下
Dim SQL_grade As String
Dim SQL_information As String
Dim DB As String
DB = App.Path & "\students.mdb"
'学生年级表
SQL_grade = "select * from 学生年级"
If conn.State = 1 Then
conn.Close
End If
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB
rs_grade.Open SQL_grade, conn, adOpenDynamic, adLockOptimistic
'学生信息表
MsgBox rs_grade.RecordCount
SQL_information = "select * from 学生信息表"
rs.Open SQL_information, conn, adOpenStatic, adLockOptimistic
MsgBox rs.RecordCount
cmdAdd.Enabled = True
cmdSave.Enabled = False
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
还有个问题:在“学生年级”表中按“保存”,为什么数据库中没有记录?这是为什么?
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
我收到了,谢谢你啊!麻烦你了
SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
已经发回给你了,按照我的代码就可以了
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
是啊,主键查找怎么做?
jhzhou882 2003-12-16
  • 打赏
  • 举报
回复
应该说清楚什么错误.
从代码上看这句话有问题
SQL = "select * from 登录表 where 密码='" & login.password.Text & "'"
login.password.Text 是密码吧
你应该用主键查找(ID或者用户名因为密码可能重复)
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
对不起,我是一名初学者有些看不懂,你说的话太专业了,是不是密码表中没有设主键啊?
我还没有收到
hooligan00011@hotmail.com
SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
已经发送给你了

你修改密码的时候缺少主键值,因为你引用的控件的资源已经回收了
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
到底错在哪里?
sd2125190 2003-12-16
  • 打赏
  • 举报
回复
hooligan00011@163.com
谢谢你
加载更多回复(2)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧