Foxtable(狐表)用户栏目专家坐堂 → [求助]父表&子表 一起克隆


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

主题:[求助]父表&子表 一起克隆

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


加好友 发短信
等级:二尾狐 帖子:526 积分:5089 威望:0 精华:0 注册:2015/4/15 15:25:00
[求助]父表&子表 一起克隆  发帖心情 Post By:2016/10/11 17:24:00 [只看该作者]

目的:克隆一份新的数据,包含子表的所有行,原始数据保持不变
父表的名称是唯一的,即禁止重复

用下面的代码生成新的父表数据,原父表将无数据,其所有子表数据将关联到新父表中,即:""& str &"_复件" 中,请求帮助:



Dim str As String = Tables("订单").Current("名称")

Tables("订单").Current.Clone()
Tables("订单).Current("名称") = ""& str &"_复件"

Dim drs As List(Of DataRow)
drs = Tables("订单").Current.DataRow.GetChildRows("订单明细")
For Each dr As DataRow In drs
    dr.Clone
Next

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


加好友 发短信
等级:超级版主 帖子:110813 积分:564003 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/11 17:57:00 [只看该作者]

父表就不要用clone了

Dim r As Row = Tables("订单").Current
Dim dnew As Row = Tables("订单").AddNew
Dim name As String = r("名称") & "_复件"
For Each c As Col In Tables("订单").Cols
    If c.Name = "名称" Then
        dnew(c.Name) = name
    ElseIf c.Name <> "_Identify" Then
        dnew(c.Name) = r(c.Name)
    End If
Next

Dim drs As List(Of DataRow)
drs = r.DataRow.GetChildRows("订单明细")
Dim rc As DataRow
For Each dr As DataRow In drs
    rc = dr.Clone
    rc("名称") = name
Next


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


加好友 发短信
等级:幼狐 帖子:84 积分:1129 威望:0 精华:0 注册:2014/11/13 16:20:00
  发帖心情 Post By:2018/7/19 12:46:00 [只看该作者]

如果代码中“名称”列是由比如由第二列+第三列+第四列等等好几列不为空时代码组合而成的,而名称是父子表关联列,那么以上代码该如何调整呢?谢谢

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


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

以下是引用舞楼名角在2018/7/19 12:46:00的发言:
如果代码中“名称”列是由比如由第二列+第三列+第四列等等好几列不为空时代码组合而成的,而名称是父子表关联列,那么以上代码该如何调整呢?谢谢

 

建议你加入一列【名称】列,设置表达式或者datacolchanged把你各个列的值合并进去。


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


加好友 发短信
等级:幼狐 帖子:84 积分:1129 威望:0 精华:0 注册:2014/11/13 16:20:00
  发帖心情 Post By:2018/7/19 12:54:00 [只看该作者]

Dim r As Row = Tables("订单").Current
Dim dnew As Row = Tables("订单").AddNew
Dim name As String = r("名称") & "_复件"
For Each c As Col In Tables("订单").Cols
    If c.Name = "名称" Then
        dnew(c.Name) = name
    ElseIf c.Name <> "_Identify" Then
        dnew(c.Name) = r(c.Name)
    End If
Next

Dim drs As List(Of DataRow)
drs = r.DataRow.GetChildRows("订单明细")
Dim rc As DataRow
For Each dr As DataRow In drs
    rc = dr.Clone
    rc("名称") = name
Next

这个代码中名称列已有,也是在datacolchanged把你各个列的值合并进去。这样在克隆的时候名称列中加不上”_复制“字符

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


加好友 发短信
等级:幼狐 帖子:84 积分:1129 威望:0 精华:0 注册:2014/11/13 16:20:00
  发帖心情 Post By:2018/7/19 13:28:00 [只看该作者]

这个代码中名称列已有,也是在datacolchanged把你各个列的值合并进去。这样在克隆的时候名称列中加不上”_复制“字符

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


加好友 发短信
等级:幼狐 帖子:120 积分:1134 威望:0 精华:0 注册:2018/3/22 15:58:00
  发帖心情 Post By:2018/7/19 13:38:00 [只看该作者]

我喜欢用 sqlcommand, 然后直接sql操作

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


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

以下是引用舞楼名角在2018/7/19 13:28:00的发言:
这个代码中名称列已有,也是在datacolchanged把你各个列的值合并进去。这样在克隆的时候名称列中加不上”_复制“字符

 

报什么错?你执行的时候遇到什么问题?


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


加好友 发短信
等级:幼狐 帖子:84 积分:1129 威望:0 精华:0 注册:2014/11/13 16:20:00
  发帖心情 Post By:2018/7/19 17:45:00 [只看该作者]

我取消了红色部分的代码,因为红色部分会重新生成“名称”列的内容,所有没有成功,取消红部分,改为手动录入,还是可以的。
Dim r As Row = Tables("订单").Current
Dim dnew As Row = Tables("订单").AddNew
Dim name As String = r("名称") & "_复件"
For Each c As Col In Tables("订单").Cols
    If c.Name = "名称" Then
        dnew(c.Name) = name
    ElseIf c.Name <> "_Identify" Then
        dnew(c.Name) = r(c.Name)
    End If
Next

Dim drs As List(Of DataRow)
drs = r.DataRow.GetChildRows("订单明细")
Dim rc As DataRow
For Each dr As DataRow In drs
    rc = dr.Clone
    rc("名称") = name
Next

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


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

回复9楼,你不是需要【克隆】行么?为什么不给各个列赋值?你可以改成如

 

dnew("某列1") = r("某列1")

dnew("某列2") = r("某列2")

dnew("某列3") = r("某列3")


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