![]() |
#2
owenlu19812014-03-19 13:28
用VB+ACCESS做的,SQL的话思路应该差不多
Dim Conn As New ADODB.Connection, Rs As New ADODB.Recordset, Rs_1 As New ADODB.Recordset Dim PN As String, Component As String, Component_Type As String, Usage As Integer Private Sub BOM_Run() PN = A Rs.Open "Select * from BOM where Assembly = '" & PN & "'", Conn, 1, 1 ------ BOM为上阶材料和下阶材料的对应关系表 If Not Rs.EOF Then Rs.Movefirst Do While Not Rs.EOF Component = Rs.Fileds("Component") Component_Type = Rs.Fileds("Component_Type") Usage = Rs.Fileds("Usage") Conn.Excute ("Insert into BOM_A Values('" & PN & "','" & Component & "','" & Component_Type & "'," & Usage & ")") --- BOM_A 为 A料的BOM表 Rs.MoveNext Loop Rs.Close Else MsgBox "没有找到材料BOM:" & PN Rs.Close Exit Sub End If Rs_Qty = 1 Do Until Rs_Qty = 0 Rs.Open "Select * from BOM_A where [Component Type] <> '" & RawPart & "'", Conn, 1, 1 Rs_Qty = Rs.RecordCount If Rs_Qty <> 0 Then Rs.Movefirst Do While Not Rs.EOF PN = Rs.Fileds("Component") Rs_1.Open "Select * from BOM where Assembly = '" & PN & "'", Conn, 1, 1 If Not Rs_1.EOF Then Rs_1.Movefirst Do While Not Rs.EOF Component = Rs_1.Fileds("Component") Component_Type = Rs_1.Fileds("Component_Type") Usage = Rs_1.Fileds("Usage") Conn.Excute ("Insert into BOM_A Values('" & PN & "','" & Component & "','" & Component_Type & "'," & Usage & ")") Rs_1.MoveNext Loop Rs.Close Else MsgBox "没有找到材料BOM:" & PN Rs_1.Close Exit Sub End If Rs.MoveNext Loop Rs.Close Else Rs.Close Exit Do End If Loop MsgBox "展BOM成功!" End Sub |
数据在excel中,我想改为SQL,用递归方便些。
只有本站会员才能查看附件,请 登录
1.输入A,得到B1,B2,B3和Usage
2.再用B1,B2,B3中Component Type不为Rawpart的结果为条件查询,B1得到C1,C2;B2得到D1和各自的Usage
3.C1,C2,D1继续用Component Type不为Rawpart的结果为条件查询,C1结果得到E1和Usage
4. 将一二三每次的到的Component Type为Prepped和Rawpart分开格式如下
5.这个只有三层,我的正式数据层次不确定,但逻辑都这样。因此用递归写成函数可能较好。