ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5848|回复: 11

[求助] 递归问题/关于配件表管理系统中查询父子

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-11-30 17:56 | 显示全部楼层 |阅读模式
请各位大侠帮忙:
    在VBA添加零配件窗体的代码的  ‘零配件查询查询所有零配件“  中,我想在查询一个配件后,再对这个配件进行是否有子配件的查询,然后对子配件有没有子配件进行查询,初步是想写5层左右。但查询第一层子配件可以,写第二层的代码时就出现了错误“对象打开时不允许操作”。请帮忙!谢谢!
    又采用递归的方式重新写了一下,上面的问题没有了,但listview中的结果变得乱七八糟的了。请大侠帮忙一下,谢谢!

好像是在写入listview中的时候,顺序不对了。

[ 本帖最后由 weixiaoji 于 2010-12-2 20:14 编辑 ]

产品配件表管理20101130.rar

160.86 KB, 下载次数: 134

产品配件表管理20101202.rar

112.71 KB, 下载次数: 138

TA的精华主题

TA的得分主题

发表于 2010-12-2 12:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

〖Excel Home友情提示〗

   

很遗憾通知楼上朋友,您的帖子在24小时之内没有任何回复!

通常情况下,本论坛发布的主题帖会在8小时被回复或处理。您的帖子在24小时之内未被回复,其中的原因可能是

1、问题表述不清、模棱两可,难以理解,帮助者被搞晕了,夺帖而出;
2、没有上传必要的附件,或附件被遗忘在某个角落;
3、发帖提问时,语气带棱角、带挑衅,不幸被列入不受欢迎的帖子;
4、所提问题不成立,或提不合理的要求,乐于助人者使出“走为上”之计;
5、话题较偏、较冷或者发布到了不合适的版块,暂时无人问津,顾影自怜。


为了提高您的问题解决效率,我们推荐您阅读以下文章:
* 如何发表新话题和上传附件:http://club.excelhome.net/thread-45649-1-1.html
* 发帖的技巧:http://club.excelhome.net/thread-176339-1-1.html
* EH技术论坛的最佳学习方法:http://club.excelhome.net/thread-117862-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-2 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
自己顶一下,请大侠出手!

TA的精华主题

TA的得分主题

发表于 2010-12-2 16:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Private Sub 零配件中零配件查询()

    Dim Str$, Stg$, SQL$, mydata$
    Dim i%, j%

    For i = 1 To 7
        Str = Me.Controls("ComboBox" & i).Value
        If Len(Str) Then Stg = Stg & IIf(Len(Stg), " And ", "") & Me.Controls("Label" & i).Caption & " Like '%" & Str & "%'"
    Next

'---------------------这里你没有链接数据库啊,前面初始化的时候你已经close了,下面三句。
‘    rs.Close
’    Set rs = Nothing
‘    Set Cnn = Nothing
    mydata = ThisWorkbook.Path & "\配件表.mdb"
    Set Cnn = New ADODB.Connection
    With Cnn
        .Provider = "microsoft.jet.oledb.4.0"
        .Open mydata
    End With

    SQL = "Select * From 零配件名称表" & IIf(Len(Stg), " Where " & Stg, "")
    rs.Open SQL, Cnn, adOpenKeyset, adLockOptimistic

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-2 20:12 | 显示全部楼层

回复 4楼 yf_992258 的帖子

谢谢大灰狼大侠。
但我的问题不是出在这里,我又重新写了一下,1楼的贴子有更新附件。问题我也写出来了,请您再帮忙看一下,谢谢!

TA的精华主题

TA的得分主题

发表于 2010-12-20 10:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
select 成品配件表.配件表编号,零配件名称表.配件唯一编号,零配件名称表.配件名称,成品配件表.用量,零配件名称表.颜色,零配件名称表.规格型号,零配件名称表.材料类别,零配件名称表.使用原料,零配件名称表.单重,成品配件表.总重,零配件名称表.配件来源,零配件名称表.配件标记,零配件名称表.修改版次,零配件名称表.备注 from 零配件名称表 inner join 成品配件表 on 成品配件表.配件唯一编号 = 零配件名称表.配件唯一编号

以上语句查询无结果。所以你得不出相应的结果来

另外,建议你更改一下数据库结构,只留下一个零配件名称表及成品配件表,其余表显得有些多余

成品配件表的字段如下:ID、母件编号、子件编号、基数、用量

[ 本帖最后由 wynbfqny 于 2010-12-20 10:15 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-12-19 17:04 | 显示全部楼层
Dim i%, j%, mydata$
    mydata = ThisWorkbook.Path & "\配件表.mdb"
    Set Cnn = New ADODB.Connection
    With Cnn
        .Provider = "microsoft.jet.oledb.4.0"
        .Open mydata
    End With

    For i = 1 To 7
        Str = Me.Controls("ComboBox" & i).Value
        If Len(Str) Then Stg = Stg & IIf(Len(Stg), " And ", "") & Me.Controls("Label" & i).Caption & " Like '%" & Str & "%'"
    Next
    SQL = "Select * From 零配件名称表" & IIf(Len(Stg), " Where " & Stg, "")
    rs.Open SQL, Cnn, adOpenKeyset, adLockOptimistic

    With ListView2
        .ColumnHeaders.Clear
        .ListItems.Clear
        .View = lvwReport
        .FullRowSelect = True
        .Gridlines = True
        For i = 0 To rs.Fields.Count - 2
            .ColumnHeaders.Add , , rs.Fields(i).Name
        Next i
        .ListItems.Clear
        For i = 1 To rs.RecordCount
            .ListItems.Add , , rs.Fields(0).Value
            For j = 1 To rs.Fields.Count - 2
                If rs.Fields(j).Value <> "" Then
                    .ListItems(i).SubItems(j) = rs.Fields(j).Value
                Else
                    .ListItems(i).SubItems(j) = ""
                End If
            Next j
            rs.MoveNext
        Next i
    End With
    rs.Close
    Set rs = Nothing
    Set Cnn = Nothing
    Label9.Caption = "共查到" & ListView2.ListItems.Count & "条记录"

TA的精华主题

TA的得分主题

发表于 2010-12-19 17:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
另外,你的“零配件查询查询所有零配件”这个代码明显不对,请更正成以上代码(更改查询语句)

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-19 20:59 | 显示全部楼层

回复 7楼 wynbfqny 的帖子

谢谢大侠的指正。但我的问题不是在这里,主要是在查询子件的时候。比如说A是个组件,下面有B、C两个子件,其中B的下面又有D、E两个子件,要把这些全面展开来,我是用递归的方式写的,但写得不对,请帮忙再看一下。是在成品配件表管理中,当在左边的LISTVIEW中双击成品名称时,右边的LISTVIEW中要把成品配件表完全展开显示出来。这个时候采用的递归,请帮忙看一下这里。谢谢!或者采用别的方式能做出来也可以,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-22 11:59 | 显示全部楼层

回复 9楼 wynbfqny 的帖子

谢谢大侠的指点,我先试一下,改一下数据库的结构,重新写出来后再发上来,到时再请你帮忙,TKS!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 19:22 , Processed in 0.035682 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表