Foxtable(狐表)用户栏目专家坐堂 → 重复值判断提示及输入


  共有2009人关注过本帖树形打印复制链接

主题:重复值判断提示及输入

帅哥哟,离线,有人找我吗?
蓝蚂蚁
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:672 积分:7879 威望:0 精华:0 注册:2016/6/11 11:10:00
重复值判断提示及输入  发帖心情 Post By:2018/11/8 9:18:00 [只看该作者]

DataColChanging中代码如下,其作用是:判断本表中是否有重复的住院号,如果有(一般情况下不会超过有3个重复的),则提示已有几条记录及相关信息,同时把该输入的住院号自动变成:住院号-已有记录数+1(如181003,如果已有重复2个,则输入的住院号变成:181003-3)
Select Case e.DataCol.Name
    Case "住院号"
        Dim Result As DialogResult
        With DataTables("高值耗材病人使用登记表")
            Dim drs As List(Of DataRow)
            drs = .Select("住院号 = '" & e.NewValue & "'")
            If drs.count>1 Then
                If drs.count=1 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 是否继续录入?", "

提示",                           MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                ElseIf drs.count=2 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 姓名:"& drs(1)("患

者姓                     名") &" ,手术日期:"& drs(1)("手术日期") &"  是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                End If
                If Result = DialogResult.Yes Then
                    e.DataRow("住院号")=" & e.NewValue & " & "-" & "drs.conut+1"
                Else
                    e.Cancel = True
                End If
            End If
        End With
End Select
现在的问题:当输入确定有重复的住院号时,没有任何提示,是不是上面的代码有问题?
【说明:住院号单元格输入内容方式是用帮助中的:自定义录入界面之三的方式输入的,
其DropDownOpened代码:
Dim txt As String = e.Form.DropDownBox.Text
Dim tbl As Table = Tables("中联电脑高值耗材使用情况明细弹出窗口_Table1")
If txt = "" Then
    tbl.Filter = "已登记=false"
Else
    txt = "'%" & txt & "%'"
    tbl.Filter = "已登记=False And (姓名 Like " & txt & " Or 住院号 Like " & txt & " Or Convert([手术日期], 'System.String') Like " & txt & "   Or 开单科室 Like " & txt 

&")"
End If
e.Form.DropDownBox.Select() '将输入焦点返回下拉列表框
其DropDownClosed代码:
If e.Form.DropTable.Name="高值耗材病人使用登记明细主窗口_Table2" Or  e.Form.DropTable.Name="高值耗材病人使用登记表" Then
    If e.Selected Then '如果选择了值
        Dim tbl As Table = Tables("中联电脑高值耗材使用情况明细弹出窗口_Table1")
        If tbl.Current IsNot Nothing Then
            e.Form.DropDownBox.Value = tbl.Current("住院号")
            e.Form.DropTable.Current("患者姓名") = tbl.Current("姓名")
            e.Form.DropTable.Current("性别") = tbl.Current("性别")
            e.Form.DropTable.Current("年龄") = tbl.Current("年龄")
            e.Form.DropTable.Current("科室") = tbl.Current("开单科室")
            e.Form.DropTable.Current("床号") = tbl.Current("床号")
            e.Form.DropTable.Current("手术日期") = tbl.Current("手术日期")            
            If e.Form.DropTable IsNot Nothing Then '如果是通过表下拉的
                e.Form.DropTable.FinishEditing()
            Else '如果是通过窗口下拉的
                e.Form.DropDownBox.WriteValue()
            End If
        End If
    End If
End If
[此贴子已经被作者于2018/11/8 9:21:00编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/8 9:24:00 [只看该作者]

试试改成

 

Select Case e.DataCol.Name
    Case "住院号"
        Dim Result As DialogResult
        With DataTables("高值耗材病人使用登记表")
            Dim drs As List(Of DataRow)
            drs = .Select("住院号 = '" & e.NewValue & "'")
            If drs.count>0 Then
                If drs.count=1 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 是否继续录入?", "提示",                           MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                ElseIf drs.count=2 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 姓名:"& drs(1)("患者姓名") &" ,手术日期:"& drs(1)("手术日期") &"  是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                End If
                If Result = DialogResult.Yes Then
                    e.DataRow("住院号")= e.NewValue & "-" & drs.count+1
                Else
                    e.Cancel = True
                End If
            End If
        End With
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
蓝蚂蚁
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:672 积分:7879 威望:0 精华:0 注册:2016/6/11 11:10:00
  发帖心情 Post By:2018/11/8 9:46:00 [只看该作者]

如已有的住院181003有重复的,并且有2个,但我新增记录时,在住院号中输入181003时,没有任何提示,输入后按回车还是181003

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/8 10:20:00 [只看该作者]

Dim e


Select Case e.DataCol.Name
    Case "住院号"
        Dim Result As DialogResult
        With DataTables("高值耗材病人使用登记表")
            Dim drs As List(Of DataRow)
            drs = .Select("住院号 = '" & e.NewValue & "'")
            If drs.count>0 Then
                If drs.count=1 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 是否继续录入?", "提示",                           MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                ElseIf drs.count=2 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 姓名:"& drs(1)("患者姓名") &" ,手术日期:"& drs(1)("手术日期") &"  是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                Else
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复,是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

                   
                End If
                If Result = DialogResult.Yes Then
                    e.DataRow("住院号")= e.NewValue & "-" & drs.count+1
                Else
                    e.Cancel = True
                End If
            End If
        End With
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/8 10:21:00 [只看该作者]

如果还有问题,实例发上来测试。

 回到顶部
帅哥哟,离线,有人找我吗?
蓝蚂蚁
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:672 积分:7879 威望:0 精华:0 注册:2016/6/11 11:10:00
  发帖心情 Post By:2018/11/8 11:42:00 [只看该作者]

有提示,但提示重复的界面中点确定,单元格内容不变。(即依然是181003)
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:住院号.zip


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/8 12:02:00 [只看该作者]

参考

 

Select Case e.DataCol.Name
    Case "住院号"
        Dim Result As DialogResult
        With DataTables("高值耗材病人使用登记表")
            Dim drs As List(Of DataRow)
            drs = .Select("住院号 = '" & e.NewValue & "'")
            If drs.count>0 Then
                If drs.count=1 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                ElseIf drs.count=2 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 姓名:"& drs(1)("患者姓名") &" ,手术日期:"& drs(1)("手术日期") &"  是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                End If
                If Result = DialogResult.Yes Then
                    e.newvalue = e.NewValue & "-" & drs.count                   
                Else
                    e.Cancel = True
                End If
                ' Else
                '     MessageBox.Show("未找到相同的记录", "提示")
            End If
        End With
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
蓝蚂蚁
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:672 积分:7879 威望:0 精华:0 注册:2016/6/11 11:10:00
  发帖心情 Post By:2018/11/8 14:50:00 [只看该作者]

已经解决了 ,辛苦老师。再请教一个问题,上面的一条代码:
drs = .Select("住院号 = '" & e.NewValue & "'") 可以换成:
drs = .Select("住院号 like '" & e.NewValue & "%'")吗?即查找181003开头的(因为:发现一个新问题:如已有181003 以后录入有181003的 ,都是181003-1)

图片点击可在新窗口打开查看此主题相关图片如下:image 1.jpg
图片点击可在新窗口打开查看


      

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/8 14:56:00 [只看该作者]

以下是引用蓝蚂蚁在2018/11/8 14:50:00的发言:
已经解决了 ,辛苦老师。再请教一个问题,上面的一条代码:
drs = .Select("住院号 = '" & e.NewValue & "'") 可以换成:
drs = .Select("住院号 like '" & e.NewValue & "%'")吗?
 

 

Select Case e.DataCol.Name
    Case "住院号"
        Dim Result As DialogResult
        With DataTables("高值耗材病人使用登记表")
            Dim drs As List(Of DataRow)
            drs = .Select("住院号 = '" & e.NewValue & "'")
            If drs.count>0 Then
                If drs.count=1 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 是否继续录入?", "提示",                           MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                ElseIf drs.count=2 Then
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复, 姓名:"& drs(0)("患者姓名") &" ,手术日期:"& drs(0)("手术日期") &" 姓名:"& drs(1)("患者姓名") &" ,手术日期:"& drs(1)("手术日期") &"  是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                Else
                    Result=MessageBox.Show(""& e.NewValue  &"共有"& drs.count &"处重复,是否继续录入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

                   
                End If
                If Result = DialogResult.Yes Then
                    e.newvalue = e.NewValue & "-" & drs.count
                Else
                    e.Cancel = True
                End If
            End If
        End With
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
蓝蚂蚁
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:672 积分:7879 威望:0 精华:0 注册:2016/6/11 11:10:00
  发帖心情 Post By:2018/11/8 15:25:00 [只看该作者]

不行,应该是我表达得不够清楚。
举例:
行号   住院号   ......(后面列省略)
1      181003    
2      181003-1       (输入:181003,就希望他变成:181003-1,这个已经能实现) 
3      181003-2       (再次输入:181003,就希望他变成:181003-2,但实际上按照上面的代码它也是变成:181003-1) 


 回到顶部
总数 14 1 2 下一页