Foxtable(狐表)用户栏目专家坐堂 → datacolchanged


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

主题:datacolchanged

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/14 13:45:00 [显示全部帖子]

放在Datacolchanged 事件中,不行。

反复在同一行中改动"生产调度令号",而且"电装顾客财产异常处理"找不到此行的话,就会反复增加行,这就违反常识和逻辑。

不如放在BeforeSaveDataRow事件中,一次性处理。

 

If e.DataRow("是否异常") = "异常" Then
    Dim dr As DataRow
    dr = DataTables("电装顾客财产异常处理").Find("生产调度令号 = '" & e.DataRow("生产调度令号") & "'")
    If dr Is Nothing Then
        dr = DataTables("电装顾客财产异常处理").AddNew()
    End If
    dr("生产调度令号") = e.DataRow("生产调度令号")
    dr("客户单位") = e.DataRow("客户单位")
    dr("姓名") = e.DataRow("姓名")
    dr("类别") = e.DataRow("类别")
    dr("财产名称") = e.DataRow("财产名称")
    dr("型号规格") = e.DataRow("型号规格")
    dr("单位") = e.DataRow("单位")
End If

[此贴子已经被作者于2013-6-14 13:46:40编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/14 15:38:00 [显示全部帖子]

以下是引用秦昌丽在2013-6-14 15:19:00的发言:

我的数据肯定是要反复录入的呀,不可能只录入一次的

每次录入,都不保存?一保存不就执行代码了吗?在DataColChanged事件中,你改了一个号,发现错了,又改,这样就多增加了行。

 

[此贴子已经被作者于2013-6-14 15:38:57编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/14 15:59:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-6-14 15:51:00的发言:

呵呵,lsy兄,不用担心重复增加行问题的,因为他原来的代码是先找已经增加的行,如果没有,再增加新的行。

 

 


 

 下载信息  [文件大小:328.0 KB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:例程1.foxdb

实际操作一下就知道了:如果改动或增加一个号,在另一张表上没找到这个号,就会在另一张表上增加一行,后来发现,号输入错误,在原来的单元格中重新输入,在另一张表上仍然没找到这个号,那就又增加一行,这就违反逻辑了。

[此贴子已经被作者于2013-6-14 15:59:39编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/14 16:04:00 [显示全部帖子]

结果就是,后面三行完全一样:

 


图片点击可在新窗口打开查看此主题相关图片如下:girsuog(xqfzvb@vg}z0xqh.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/14 16:11:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-6-14 16:05:00的发言:

哈,确实如此,我考虑不周。

 

这样修改代码,可以解决重复增加的问题:

 

Select Case e.DataCol.name
    Case "生产调度令号","客户单位","姓名","类别","财产名称","型号规格","单位","是否异常"
        Dim dr As DataRow = DataTables("顾客财产异常处理").Find("生产调度令号 = '" & e.DataRow("生产调度令号") & "'")
        If e.DataCol.name = "生产调度令号" Then
            Dim dr1 As DataRow = DataTables("顾客财产异常处理").Find("生产调度令号 = '" & e.OldValue & "'")
            If dr1 IsNot Nothing Then
                dr1.Delete
            End If
        End If
        If e.DataRow("是否异常") = "异常" Then
            If dr Is Nothing Then
                dr = DataTables("顾客财产异常处理").AddNew()
            End If
            dr("生产调度令号") = e.DataRow("生产调度令号")
            dr("客户单位") = e.DataRow("客户单位")
            dr("姓名") = e.DataRow("姓名")
            dr("类别") = e.DataRow("类别")
            dr("财产名称") = e.DataRow("财产名称")
            dr("型号规格") = e.DataRow("型号规格")
            dr("单位") = e.DataRow("单位")
        Else
            If dr IsNot Nothing Then
                dr.Delete
            End If
        End If
End Select

不如在BeforeSaveDataRow中,简单稳妥。


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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/6/14 16:25:00 [显示全部帖子]

以下是引用狐狸爸爸在2013-6-14 16:17:00的发言:
用BeforeSaveDataRow还是有漏洞,例如我先保存一下,再修改编号,再保存,就会重复增加了。

说的也是,录入后,保存前,仔细检查。

也可以逐列判断,如果除了号列以外,其他列都相同,就提示,拒绝保存。

[此贴子已经被作者于2013-6-14 16:30:40编辑过]

 回到顶部