以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]父表&子表 一起克隆  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=91474)

--  作者:qwz405
--  发布时间: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

--  作者:有点蓝
--  发布时间: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


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

 

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


--  作者:舞楼名角
--  发布时间: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把你各个列的值合并进去。这样在克隆的时候名称列中加不上”_复制“字符

--  作者:舞楼名角
--  发布时间:2018/7/19 13:28:00
--  
这个代码中名称列已有,也是在datacolchanged把你各个列的值合并进去。这样在克隆的时候名称列中加不上”_复制“字符
--  作者:goodhawk
--  发布时间:2018/7/19 13:38:00
--  
我喜欢用 sqlcommand, 然后直接sql操作
--  作者:有点甜
--  发布时间:2018/7/19 16:23:00
--  
以下是引用舞楼名角在2018/7/19 13:28:00的发言:
这个代码中名称列已有,也是在datacolchanged把你各个列的值合并进去。这样在克隆的时候名称列中加不上”_复制“字符

 

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


--  作者:舞楼名角
--  发布时间: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

--  作者:有点甜
--  发布时间:2018/7/19 17:54:00
--  

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

 

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

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

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