机房收费系统——【添加和删除用户】

小编这两天在研究机房收费系统的添加和删除用户窗体,这个窗体看似简单,却有很多地方易出错,需要仔细研究,认真滤清思路。本窗体小编小看了它的难度,在编写时以为很简单的逻辑一看便知,所以没有画流程图,结果在写代码时吃了暗亏,好几个地方逻辑不够清晰,导致代码运行逻辑有问题,所以大家还是不要眼高手低,一定要缕清思路再动手编程。
在这里插入图片描述关于添加用户的问题为一般的查询和添加数据,比较简单,小编在这里就不做过多的赘述啦!
~敲黑板划重点啦!——删除用户
首先按照流程图,捋清楚逻辑步骤,看似很简单,应该就是查询数据和删除数据的问题,真的这么简单吗?!
首先第一个小问题:FlexGrid控件选中一整行的问题:

   '删除,点击选中一行
    MyFlexGrid.SelectionMode = flexSelectionByRow          '点击的时候选择的是整行
    MyFlexGrid.FocusRect = flexFocusNone                       '选中行显示焦点区域
    MyFlexGrid.HighLight = flexHighlightWithFocus            '该值决定了所选定的行突出显示

ok,这个问题小菜一碟,三个FlexGrid控件的属性就搞定啦!

第二个问题:删除数据:大问题哦,删除数据涉及到两方面:
(2)删除Flexgrid控件中的选中的数据;
(1)删除数据库表中的数据。
删除Flexgrid控件中的数据非常简单,一句代码就搞定:

MyFlexGrid.RemoveItem MyFlexGrid.RowSel   '删除选中的行

按道理讲删除数据库中的数据也不难呀,就是一个删除语句就可以搞定吧,真的是这样吗?!

  '删除数据库中与选中的行一致的数据
   txtSQLUser = "delete from User_Info where  userID= & Trim(.TextMatrix(.Row, 0)) & "  '鼠标选中行0列数据
  txtsql = "delete from User_Info where userID = '" & Trim(MyFlexGrid.TextMatrix(MyFlexGrid.Row, 0)) & "'"
  Set mrcUser = ExecuteSQL(txtSQLuesr, msgtext)

需要注意的是:一定要先(1)删除user表中的该行数据,再(2)删除控件中的数据,否则可能会出现控件中的数据删除后,删除语句找不到与之对应的同一行数据而无法删除数据库中的!
在这里插入图片描述
运行!报错91错误,控件中的数据已经删除成功。但是,打开数据库却发现数据库中的数据未删除!!!

msgtext显示查询错误:下标越界:
仔细检查发现代码写错啦txtUser错写为txtUesr,应该是:
set mruser=executeSQL(txtuser,msgtextUser)
代码修正完毕!运行!仍然报错91错误!!在这里插入图片描述
出现新的错误提示:

断点调试走代码,发现在模块中有限制如果有INSERT,DELECT,UPDATE语句 ,则会执行错误类型判断语句,查询错误!
在这里插入图片描述解决方法:既然使用delect语句有限制,出现各种问题,那么最好的方法是:不用了!!!
那怎么样删除数据库中的数据呢:使用查询语句select,查询出来的数据集mrc.delect 即可。

代码展示:
    '删除,点击选中一行
    MyFlexGrid.SelectionMode = flexSelectionByRow          '点击的时候选择的是整行
    MyFlexGrid.FocusRect = flexFocusNone                       '选中行显示焦点区域
    MyFlexGrid.HighLight = flexHighlightWithFocus            '该值决定了所选定的行突出显示
    
     If Combolevel.Text = "" Then
        MsgBox "请先选择用户级别!", 48, "提示"
        Exit Sub
   End If
   
    txtSQLUser = "select *from User_Info where userID='" & Trim(MyFlexGrid.TextMatrix(MyFlexGrid.RowSel, 0)) & "'"
    Set mrcUser = ExecuteSQL(txtSQLUser, msgtext)
     
    ' 删除,选中一行删除,要考虑表头(第一行)不能删除
     With MyFlexGrid
            .CellAlignment = 4
            If .RowSel = 0 Then  '起始行
                MsgBox "请选择数据", 0 + 48, "提示"
                Exit Sub
            Else
                If .RowSel > 0 Then   'rowsel为一定范围的单元格返回或设置的起始行和或终止行
                                                'colsel为一定范围的单元格返回或设置的起始列和或终止列
                    If mrcUser.EOF = True Then
                        MsgBox "该级别用户为空,没有可删除的对象!", 48, "提示"
                        Exit Sub
                    Else
                        '判断该用户是否正在登陆
                        If Trim(.TextMatrix(.RowSel, 0)) = username Then
                            MsgBox "该用户正在登录,不能删除", 0 + 48, "提示"
                            Exit Sub
                        Else
                                '删除数据库中与选中的行一致的数据(删除查询的数据集)
		                         mrcUser.Delete
                        
                            MyFlexGrid.RemoveItem MyFlexGrid.RowSel   '删除选中的行
                             MsgBox "用户已删除", 0 + 48, "恭喜"
                        End If
                    End If
                End If
            End If
            End With

小编在敲这个窗体时查看了很多大佬的博客,虽然要实现的功能一样,但是每个人的设计思路略有差异,考虑的方面也略有不同,所以大家在编写程序时可以借鉴和学习大佬们的博客,但是一定要有自己的设置思路,不要做代码的搬运工,要明白设计者的思想,明白代码的含义再学习和借鉴。
特此感谢郭倩师姐和晓伟的帮助与指导,站在大佬的肩膀上让我成长的更快。**

猜你喜欢

转载自blog.csdn.net/Ginny97/article/details/87259799