Foxtable(狐表)用户栏目专家坐堂 → 自动输入并更新的问题


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

主题:自动输入并更新的问题

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


加好友 发短信
等级:童狐 帖子:209 积分:1607 威望:0 精华:0 注册:2012/9/7 20:24:00
自动输入并更新的问题  发帖心情 Post By:2012/11/26 19:30:00 [只看该作者]

有两个表:委外表和委外明细,委外明细是根据委外表的内容按档案编号分割表示,代码如下:

Select Case e.DataCol.Name
    Case "档案编号", "序号"
        e.DataRow("颜色") = StrToNarrow(e.DataRow("颜色"))
        Dim ys() As Char  = {","}
        Dim xh() As Char  = {",", ";"}
        Dim ary_ys() As String = e.DataRow("颜色").Split(ys)
        Dim ary_xh() As String = e.DataRow("序号").Split(xh)
        Dim ary_xh1() As String = e.DataRow("序号").Split(",")
        DataTables("委外明细").DeleteFor("档案编号 = '" & e.DataRow("档案编号") & "'")
        For i As Integer = 0 To ary_xh1.Length - 1
            Dim ary_xh2() As String = ary_xh1(i).Split(";")
            For j As Integer = 0 To ary_xh2.Length - 1
                Dim dr As DataRow  = DataTables("委外明细").AddNew
                dr("档案编号") = e.DataRow("档案编号")
                dr("颜色") = ary_ys(i)
                dr("序号") = ary_xh2(j)
            Next
        Next
End Select

现在的问题是,上面的红色代码保证了委外明细的内容可以更新,但是这种更新方法是把委外明细相同档案编号的行全部删除再重新添加,当委外明细的其它列写有内容时,这种更新方法就会产生矛盾,有没有更好的更新方法呢,也就是说更新时只替换掉颜色或序号不相同的行


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

图片点击可在新窗口打开查看此主题相关图片如下:222.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目49改.table

[此贴子已经被作者于2012-11-26 19:34:14编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/26 20:37:00 [只看该作者]

 大概这样子吧。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目49改.table



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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2012/11/26 21:11:00 [只看该作者]

好像这样效率高一点吧。

 

Select Case e.DataCol.Name
    Case "颜色","序号"
        Dim dt As DataTable = DataTables("委外明细")
        Dim ys As String = StrToNarrow(e.DataRow("序号"))
        dt.DeleteFor("档案编号 = '" & e.DataRow("档案编号") & "' And [序号] Not In ('" & ys.Replace(",","','") & "')") 

        Dim Vs() As String = StrToNarrow(ys).Split(",")
        Dim s As String = "|" & dt.GetComboListString("序号","[档案编号] = '" & e.DataRow("档案编号") & "'","_Identify") & "|"
        For i As Integer = 0 To Vs.Length - 1
            If not s.Contains(Vs(i))
                Dim dr As Row  = Tables("委外明细").AddNew
                dr("档案编号") = e.DataRow("档案编号")
                dr("序号") = Vs(i)
                If e.DataRow("颜色").Split(",").Length -1 >= i
                    dr("颜色") = e.DataRow("颜色").Split(",")(i)
                End If
            End If
        Next
End Select

[此贴子已经被作者于2012-11-26 21:11:14编辑过]

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


加好友 发短信
等级:童狐 帖子:209 积分:1607 威望:0 精华:0 注册:2012/9/7 20:24:00
  发帖心情 Post By:2012/11/26 21:25:00 [只看该作者]

两种方法都能行,正在研究中


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2012/11/26 21:52:00 [只看该作者]

以下是引用zcw728909在2012-11-26 21:25:00的发言:

两种方法都能行,正在研究中

 

如果用二楼的要加个判断,否则如果颜色列的分隔数据少于序号列会报错的。


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


加好友 发短信
等级:童狐 帖子:209 积分:1607 威望:0 精华:0 注册:2012/9/7 20:24:00
  发帖心情 Post By:2012/11/26 21:53:00 [只看该作者]

两位前辈不好意思,刚才没有说清楚,应该是:

1.当颜色不一样而序号一样时,只把颜色更新,不用更新整个行;当序号不一样时才更新整个行

2.我以前的代码里有个分号“;”,主要是当序号里有值用分号隔开时,对应的颜色是一样的,如下图:


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

图片点击可在新窗口打开查看此主题相关图片如下:666.jpg
图片点击可在新窗口打开查看
C版的代码好像没有这种功能
[此贴子已经被作者于2012-11-27 8:15:20编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/27 8:49:00 [只看该作者]

 大概这样吧。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目49改.table



 回到顶部