以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  再请教下代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=164249)

--  作者:wangglby
--  发布时间:2021/5/1 9:41:00
--  再请教下代码

想实现以下功能

 

表B的编码列内容 取自表A的编码,该编码的行数取自表A编码对应的数量。

 

比如表A的编码 aaa 数量为2 ,如果表B没有编码为aaa的行,则在表B增加2行,编码为aaa,如果表B只有1行编码为aaa的行,则再增加1行,

如果表B已经有编码aaa已经有3行,则删除掉最后1行。如果表B已经有编码aaa已经有2行,则不用处理。

 

 


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

 

辛苦


--  作者:有点酸
--  发布时间:2021/5/1 10:03:00
--  
For Each dra As DataRow In DataTables("表A")
    For i As Integer = 1 To dra("数量")
       Dim drb As DataRow = DataTables("表B").AddNew
       drb("编码") = dra("编码")
    Next
Next

--  作者:wangglby
--  发布时间:2021/5/1 11:21:00
--  
谢谢 假期也不休 辛苦了
--  作者:wangglby
--  发布时间:2021/5/1 14:16:00
--  
在外面 还没测试,初看代码  i 好像没用到
--  作者:hongsejiyi
--  发布时间:2021/5/1 19:43:00
--  
应用时,应该把输出的语句删除

Dim t1 As Table = Tables("表A")
Dim t2 As Table = Tables("表B")
Dim nr1,nr2 As String
Dim sl1,sl2,sl3 As Integer
For Each r As Row In t1.Rows
    nr1=r("第一列")
    nr2=r("第二列")
    If not r.IsNull("第一列") Then \'不为空行的情况下进行处理
        sl1=cint(nr2)
        sl2=t2.Compute("count(第一列)","第一列=\'" & nr1 & "\'") \'计算表B中出现的次数
        If sl1>sl2 Then
            output.show(nr1 & "应该增加:" & sl1-sl2 & "条")
            For j As Integer=1 To sl1-sl2  \'数量差 sl1-sl2
                Dim r2 As Row = t2.AddNew  \'增加新行
                r2("第一列")=nr1   \'写入数据
            Next
        ElseIf sl1<sl2 Then
            output.show(nr1 & "应该减少:" & sl2-sl1 & "条")
            For j As Integer =1 To sl2-sl1
                sl3=t2.Compute("max(_Identify)","第一列=\'" & nr1 & "\'") \'查找最大的行号,为删除最后一行做准备
                \'sl3=t2.FindRow("[第一列]=\'" & nr1 & "\'",sl2-1)
                t2.Rows(sl3-1).Delete()
            Next
        Else
            output.show(nr1 & "应该不变")
        End If
    End If
Next

--  作者:wangglby
--  发布时间:2021/5/1 22:21:00
--  
谢谢