| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1790 人关注过本帖, 1 人收藏
标题:如何用递归实现?
只看楼主 加入收藏
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:0 
没有看到递归
2014-03-19 19:21
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:0 
函数不会搞,之前的VB程式可以优化如下
程序代码:
Private Sub Command1_Click()
PN = Trim(Text1.Text)
If PN = "" Then
    Exit Sub
End If
Assembly = PN
Conn.Execute ("Delete * from BOM_A")
If Rs.State = 1 Then
    Rs.Close
End If
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.Fields("Component")
        Component_Type = Rs.Fields("Component_Type")
        Usage = Rs.Fields("Usage")
        Conn.Execute ("Insert into BOM_A Values('" & PN & "','" & Assembly & "','" & Component & "','" & Component_Type & "'," & Usage & ")")  '--- BOM_A 为 A料的BOM表
        Rs.MoveNext
    Loop
    Rs.Close
Else
    MsgBox "没有找到材料BOM:" & Assembly
    Rs.Close
    Exit Sub
End If

Rs_Qty = 1
Do Until Rs_Qty = 0
    Rs.Open "Select * from BOM_A where [Material] = '" & PN & "' and [Component_Type] <> 'RawPart' and [Component] not in (Select distinct [Assembly] from BOM_A)", Conn, 1, 1
    Rs_Qty = Rs.RecordCount
    If Rs_Qty <> 0 Then
        StrSQL = "Insert into BOM_A Select * from (Select '" & PN & "' as [Material],A.[Component] as [Assembly],B.[Component],B.[Component_Type],B.[Usage] from (Select Distinct [Component] from BOM_A " & _
                     "where [Component_Type] <> 'RawPart' and [Component] not in (Select distinct [Assembly] from BOM_A)) as A Left join BOM B on A.[Component]=B.[Assembly])"
        Conn.Execute (StrSQL)
    Else
        Rs.Close
        Exit Do
    End If
    Rs.Close
Loop

Rs.Open "Select * from BOM_A where [Material] = '" & PN & "'", Conn, 1, 1
Set DataGrid1.DataSource = Rs
DataGrid1.Refresh
End Sub


[ 本帖最后由 owenlu1981 于 2014-3-19 23:05 编辑 ]
2014-03-19 19:33
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 11楼 lowxiong
版主,可否帮忙写一个递归函数,我想学习下,owenlu1981帮我解决了问题,但如果我一次查询多个Assembly就不太方便, 我想是否可用递归加数组可以解决?谢谢

[ 本帖最后由 yuk_yu 于 2014-3-20 09:19 编辑 ]
2014-03-20 09:17
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:0 
回复 13楼 yuk_yu
其实我没有看懂你的意思,但我看懂了你的数据库的数据关系,应该是类似于文件目录的结构,穷尽目录路径的确是递归完成的,但你的意图似乎不是穷尽路径,所以我没看懂。
2014-03-20 13:04
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:0 

目的是找一个产品的所有原材料,也就是通过成品找半成品,通过半成品找原材料
2014-03-20 13:55
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 14楼 lowxiong
我重新作了说明,请帮忙再看看,谢谢
递归.zip (7.74 KB)
2014-03-20 14:22
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:0 
SubAssy:原材料   英语翻译:半成品
Prepped:半成品   英语翻译:准备、预备学校
RawPart:成品     英语翻译:Raw Part,原始的一部分
2014-03-20 14:23
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 15楼 owenlu1981
完全正确!谢谢
2014-03-20 14:23
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 17楼 lowxiong
正确就是成品找半成品,预计工,原材料;半成品找预计工,原材料;预计工找原材料,逐级递减
2014-03-20 14:26
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
都已结贴,再发短消息给我干什么?

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-20 16:24
快速回复:如何用递归实现?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034830 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved