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


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

主题:datacolchanged

帅哥哟,离线,有人找我吗?
狐狸爸爸
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/6/14 15:51:00 [只看该作者]

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

 

 


 

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


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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

 


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

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | 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中,简单稳妥。


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/6/14 16:17:00 [只看该作者]

用BeforeSaveDataRow还是有漏洞,例如我先保存一下,再修改编号,再保存,就会重复增加了。

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
美女呀,离线,留言给我吧!
秦昌丽
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:51 积分:361 威望:0 精华:0 注册:2013/6/5 10:33:00
  发帖心情 Post By:2013/6/14 16:36:00 [只看该作者]

狐爸爸,我也发现了这个问题,我修改了原来的行,他也会新增一行的,我是不是应该放在别的事件里面编程呢


 回到顶部
美女呀,离线,留言给我吧!
秦昌丽
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:51 积分:361 威望:0 精华:0 注册:2013/6/5 10:33:00
  发帖心情 Post By:2013/6/14 16:38:00 [只看该作者]

以下是引用lsy在2013-6-14 16:11:00的发言:

不如在BeforeSaveDataRow中,简单稳妥。

这样可以同步修改吗?


 回到顶部
美女呀,离线,留言给我吧!
秦昌丽
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:51 积分:361 威望:0 精华:0 注册:2013/6/5 10:33:00
  发帖心情 Post By:2013/6/14 16:39: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

 

 

 

 

 

如上所示,如果我只修改了生产调度令号,会在原来那一行修改吗?


 回到顶部
总数 34 上一页 1 2 3 4 下一页