以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多行多列的插入数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=47254)

--  作者:bobolan521
--  发布时间:2014/3/6 22:20:00
--  多行多列的插入数据

表A

       姓名    工序1    工序2    工序3    

       小王       1          0         3        

       小李       2          3         0        

       小红       0          4         5        

 

请问一下该用什么代码能将表A里大于0的记录读取写到表B里

表B

       姓名    工序    数量

       小王    工序1    1

       小王    工序3    3

       小李    工序1    2

       小李    工序2    3

       小红    工序2    4

       小红    工序3    5


--  作者:有点酸
--  发布时间:2014/3/6 22:24:00
--  

dim gsx() AS string = {"工序1","工序2","工序3"}

for each dr as datarow in datatables("表A").Datarows

     for each gx as string in gxs

           if dr(gx) > 0 then

               dim dr1 as datarow = datatables("表B").Addnew

               dr1("姓名") = dr("姓名")

               dr1("工序") = gx

               dr1("数量") = dr(gx)

          end if

     next

next


--  作者:bobolan521
--  发布时间:2014/3/6 22:34:00
--  
好像不能运行
--  作者:有点酸
--  发布时间:2014/3/6 22:38:00
--  

Dim gsx() As String = {"工序1","工序2","工序3"}
For Each dr As DataRow In DataTables("表A").Datarows
    For Each gx As String In gsx
        If dr(gx) > 0 Then
            Dim dr1 As DataRow = DataTables("表B").Addnew
            dr1("姓名") = dr("姓名")
            dr1("工序") = gx
            dr1("数量") = dr(gx)
        End If
    Next
Next

 

再不行的话,就自己设计好表A和表B,输入数据发上来,方便别人测试。


--  作者:bobolan521
--  发布时间:2014/3/6 22:45:00
--  

你好麻烦你再帮我看一下,如果根据表B 生成表A呢

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

[此贴子已经被作者于2014-3-6 22:53:08编辑过]

--  作者:bobolan521
--  发布时间:2014/3/6 22:48:00
--  

麻烦你再帮忙看一下,用什么代码能利用B表返回去生成A表呢

[此贴子已经被作者于2014-3-6 22:59:13编辑过]

--  作者:y2287958
--  发布时间:2014/3/7 6:02:00
--  
If MainTable.Name = "表B"
    DataTables("表B").DataRows.Clear
    For Each dr As DataRow In DataTables("表A").DataRows
        For Each dc As DataCol In DataTables("表A").DataCols
            If dc.Name <> "姓名" AndAlso dr(dc.Name) > 0
                Dim dr1 As DataRow = DataTables("表B").AddNew
                dr1("姓名") = dr("姓名")
                dr1("工序名称") = dc.Name
                dr1("数量") = dr(dc.Name)
            End If
        Next
    Next
End If

--  作者:zyqzyy
--  发布时间:2014/3/7 8:47:00
--  

请参考帮助

http://www.foxtable.com/help/topics/0625.htm


--  作者:lsy
--  发布时间:2014/3/7 8:58:00
--  

附件传不了,贴代码:

表A转表B:

DataTables("表B").DataRows.Clear()
For Each adr As DataRow In DataTables("表A").DataRows
    If adr.IsNull("姓名") = False Then
        For Each adc As DataCol In DataTables("表A").DataCols
            If adc.Name.StartsWith("工序") Then
                Dim bdr As DataRow = DataTables("表B").AddNew()
                bdr("姓名") = adr("姓名")
                bdr("工序") = adc.Name
                bdr("数量") = adr(adc.Name)
            End If
        Next
    End If
Next
DataTables("表B").Save()
MainTable = Tables("表B")

 

表B转表A(C):

DataTables("表C").DataRows.Clear()
Dim vals As List(Of String) = DataTables("表B").SQLGetValues("姓名","姓名 Is Not Null")
For Each val As String In vals
    Dim ddr As DataRow = DataTables("表C").AddNew()
    ddr("姓名") = val
    For Each bdr As DataRow In DataTables("表B").DataRows
        For Each ddc As DataCol In DataTables("表C").DataCols
            If ddc.Name = bdr("工序") AndAlso bdr("姓名") = val Then
                ddr(ddc.Name) = bdr("数量")
            End If
        Next
    Next
Next
Tables("表C").Sort = "姓名 Desc"
MainTable = Tables("表C")


--  作者:bobolan521
--  发布时间:2014/3/8 18:40:00
--  
谢谢lsy,我试过你写的代码可以用
[此贴子已经被作者于2014-3-8 18:41:09编辑过]