
本文于2023年6月4日首发于本人同名公众号,更多文章案例请搜索关注!
☆本期内容概要☆
用户窗体设置:收费结算模块设置(5)
数据正确性校验
大家好,我是冷水泡茶,前几期我们分享了【收费管理系统】的设计,有几天没有搞它了,回顾一下:

不知不觉都写了十多期了,可见做个小项目还是要花很多时间与精力的,再把过程写出来,尽量能让人看懂,那也是不太容易的事。闲话少叙,我们继续吧。
今天的目标是把“收费结算“模块数据保存代码完成。
下面我们一起来做吧:
1、暂时修改“tb收费明细”字段显示宽度,以便观察数据,把“备注”改为非必填字段:


最后,我们再把它调整过来,对列宽进行了适当调整,使得窗体显示正常:


2、修改窗体Usf_AddAndModify上的“保存”按钮的代码,增加一段针对收费结算模块的特别处理:
Private Sub CmdSave_Click() Dim arrTable() Dim LvItem As ListItem Dim NullCount As Integer Dim arrID() As String '先不确定数据类型,用来存放split(strdeletedid) Dim arrAccCode() As String Dim iCtrl As Control On Error Resume Next If CmdChangeColWidth.Caption = "固定列宽" Then Call CmdChangeColWidth_Click End If If ModifyStatus = 0 And DeleteStatus = 0 Then MsgBox "数据无任何修改,无需保存!" Exit Sub End If '******↓↓↓↓↓↓↓↓收费结算模块保存前预处理↓↓↓↓↓↓↓↓***** If Me.LvDetail.ListItems.Count = 0 Then Exit Sub '如果没有记录,退出保存。 ModifyStatus = 0 End If If currTable = "tb收费明细" Then If Me.CmbCustomer = "" Then MsgBox "客户未填写!" Exit Sub End If If Me.CmbDoctor = "" Then MsgBox "医生未填写!" Exit Sub End If If Me.CmbSource = "" Then MsgBox "客户来源未填写!" Exit Sub End If If Me.CmbDepartment = "" Then MsgBox "科室未填写!" Exit Sub End If '检查是否已存在单号 SQL = " Select count(*) from tb收费明细 where 单号='" & Me.TxbNumber & "'" If RecordValue(dataFile, SQL) > 0 Then MsgBox ("已存在单号,不能保存!") Exit Sub End If '梳理数据,删除收费项目为空的记录 '补全listview字段值 With Me.LvDetail For i = .ListItems.Count To 1 Step -1 If Len(Trim(.ListItems(i).SubItems(Pxy(tbTitle, "收费项目") - 1))) = 0 Then .ListItems.Remove i Else .ListItems(i).SubItems(Pxy(tbTitle, "单号") - 1) = Me.TxbNumber .ListItems(i).SubItems(Pxy(tbTitle, "日期") - 1) = Me.TxbDate .ListItems(i).SubItems(Pxy(tbTitle, "客户") - 1) = Me.CmbCustomer .ListItems(i).SubItems(Pxy(tbTitle, "渠道") - 1) = Me.CmbSource .ListItems(i).SubItems(Pxy(tbTitle, "科室") - 1) = Me.CmbDepartment .ListItems(i).SubItems(Pxy(tbTitle, "医生") - 1) = Me.CmbDoctor .ListItems(i).SubItems(Pxy(tbTitle, "收款人") - 1) = currUserName End If Next End With '再判断一下有没有记录 If Me.LvDetail.ListItems.Count = 0 Then MsgBox "没有可保存的记录!" Exit Sub '如果没有记录,退出保存。 ModifyStatus = 0 End If '检查记录的完整性 With Me.LvDetail For i = 1 To .ListItems.Count For j = 2 To .ColumnHeaders.Count - 1 If Len(Trim(.ListItems(i).SubItems(j - 1))) = 0 Then Msg = Msg & "第" & i & "行,第" & j & "列" & Chr(10) End If Next Next End With If Msg <> "" Then MsgBox Msg & "以上单元格未正确填写!" Exit Sub End If End If '******↑↑↑↑↑↑↑↑收费结算模块保存前预处理↑↑↑↑↑↑↑↑******
代码解析:从第16行开始,都是本次增加的。
(1)Line17~37,各种数据有效性判断
(2)Line38~43,检查单号是否已存在,方法是查询数据库“tb收费明细”表中,单号=me.txbnumber的记录,如果能查到,说明单号已存在,则不能保存。
(3)Line44~60,循环ListView,删除收费项目为空的记录,对于收费项目不为空的记录,根据表头控件信息,填写单号、日期、客户、渠道、科室、医生、收款人等信息。
(4)Line67~80,检查数据完整性,方法是循环ListView的每条记录,除第1列和最后一列的其他所有列,判断是否有内容,这里使用len+trim的方法,避免遗漏看不见的空格,如果有空记录,则给出提示,不能保存。
3、收费项目输入正确性校验:
InkEdit控件退出时,检查输入的收费项目是否存在于tb收费项目表中。
'根据收费项目,检查收费项目输入的准确性,查询单价填入 If .ColumnHeaders(intCol) = "收费项目" Then SQL = "select count(*) from tb收费项目 where 项目全称='" & InkEdit1 & " '" If RecordValue(dataFile, SQL) = 0 Then MsgBox "无此收费项目,请添加后再操作!" InkEdit1 = "" Exit Sub End If
今天我们就做到这,看一下最终成果:

所有记录正常填写,保存成功,由于还没有做收费明细的查询功能,所以我们先到数据库里查看记录,符合预期。
如果记录输入不符合要求,大多会进行判断,给出提示,但这并不能完全避免输入错误,有些情况必须经过不断测试后才能发现,我们后期再解决。
由于时间与篇幅的关系,今天就到这吧。后面会继续,敬请关注!还请大家多多点赞、留言、分享,谢谢大家,我们下期再会。
☆猜你喜欢☆

本文于2023年6月4日首发于本人同名公众号,更多文章案例请搜索关注!