“添加和删除用户”这个窗体看起来并不难,但是还是要注意一些细节的。昨天被小伙伴安利了一个做流程图的网页,在敲代码之前画一画流程图确实可以让自己的逻辑更加清晰☟☟☟
问题
实时错误‘91’
对象变量或with块变量未设置
想必这个错误大家再熟悉不过了,但是这次一开始我真的不知道错在哪儿,后来通过师哥的博客发现:原来在模块中有限制如果有INSERT、DELECT、UPDATE语句,则会执行错误类型判断语句,查询错误。
决绝办法:将DELECT删除掉就可以啦~
补充
大家有没有想过一个问题:如果在这个窗体中将所有的用户都删除掉之后,我们再登录我们打包发布的系统岂不是怎样都登录不成功?然而解决这个问题的方法也很简单,仅需要在数据库的User_Info表中添加一个删除不掉的数据,或者说查询的时候可以查询排除这条数据之外的所有内容。例如:
在上图中我在数据表中插入了一条数据(框框中),为了避免这个用户不被删除,在SELECT查询时,可以写成以下这样:
txtSQL = "select * from User_Info where level='" & Trim(comboLevel.Text) & "'" & "and userID <> '00' "
部分代码展示:
Private Sub cmdDelete_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset
'在数据库对应的表中删除所选中的几行中的内容
'在数据库中查找对应数据
txtSQL = "select * from User_Info where userID='" & Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0)) & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
'判断是否选中了网格控件中需要设置的起始行
'选中一行删除,要考虑到第一行(表头)不能删除
With MSFlexGrid1
If .RowSel = 0 Then '起始行
'RowSel设置或返回一个范围的单元格的起始行或终止行
'colse为一定范围的单元格返回或设置的起始列和终止列
MsgBox "请选择数据", vbOKOnly + vbExclamation, "提示"
Exit Sub
Else
If .RowSel > 0 Then
'判断选中级别用户是否为空
If mrc.EOF Then
MsgBox "该级别用户为空,没有可删除的对象!", 48, "提示"
Exit Sub
Else
'判断用户是否在登录
If Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, 0)) = UserName Then
MsgBox "该用户正在登陆,不能删除", vbOKOnly + vbExclamation, "警告"
Exit Sub
Else
'删除数据库中与选中的行一直的数据(删除查询数据库)
mrc.Delete
'MSFlexGrid1.RemoveItem MSFlexGrid1.RowSel '删除选中的行
MsgBox "用户已经删除", 48, "恭喜"
End If
End If
End If
End If
End With
End Sub