转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
BOM表查询的VB实现方法         ★★★★

BOM表查询的VB实现方法

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2632 更新时间:2009/4/23 15:37:21

相关需求及信息请点击这里查看。

用VB代码实现方法

引用:无,部件:无

设计:在Form1中右下角加入一个CommandButton,名称默认为Command1,窗体的AutoRedraw属性设为True

窗体文件一:Form1

Option Explicit

Private mBom As Collection              ''''这是入口的集合
Private mBomReturn As Collection        ''''这是出口的集合,未经处理
Private mBomReturnLast As Collection    ''''这是出口的集合,经过处理


Private Sub AddBomRecord()
''''在这里往mBom加入数据库里面的原内容,为求简便,我不想连接数据库
''''直接往里面写入记录了,如果需要,你就直接连接数据库,分析一下里面的
''''代码,然后再往mBom里面写入记录
''''FG      SA1     2.0000
''''FG      SA2     3.0000
''''SA1     PT1     4.0000
''''SA1     PT2     5.0000
''''SA2     PT1     6.0000
''''SA2     PT3     7.0000

Dim mBomValue As cBomValue

Set mBomValue = New cBomValue

mBomValue.AssBom = "FG"
mBomValue.BomPoint = "SA1"
mBomValue.Quantity = 2

mBom.Add mBomValue

Set mBomValue = New cBomValue

mBomValue.AssBom = "FG"
mBomValue.BomPoint = "SA2"
mBomValue.Quantity = 3

mBom.Add mBomValue

Set mBomValue = New cBomValue

mBomValue.AssBom = "SA1"
mBomValue.BomPoint = "PT1"
mBomValue.Quantity = 4

mBom.Add mBomValue

Set mBomValue = New cBomValue

mBomValue.AssBom = "SA1"
mBomValue.BomPoint = "PT2"
mBomValue.Quantity = 5

mBom.Add mBomValue

Set mBomValue = New cBomValue

mBomValue.AssBom = "SA2"
mBomValue.BomPoint = "PT1"
mBomValue.Quantity = 6

mBom.Add mBomValue

Set mBomValue = New cBomValue

mBomValue.AssBom = "SA2"
mBomValue.BomPoint = "PT3"
mBomValue.Quantity = 7

mBom.Add mBomValue

End Sub

Private Sub Command1_Click()

Dim i As Integer
Dim m As cBomValue

''''进行计算

''''注意以下两个新建实例,必须放置于GetBomList前,该操作也有清空现有数据的作用,否则会造成错误
''''即第一次运行后保存了数据于该两个变量中,并未清除相关记录,而下一次运行则在现有的基础上再进行加操作,因此数据错误了。

Set mBomReturn = New Collection
Set mBomReturnLast = New Collection

Call GetBomList

''''计算后,mBomReturnLast返回的就是最终结果
If mBomReturnLast.Count < 0 Then
    MsgBox "没有记录!", vbInformation + vbOKOnly, "BOM表计算"
    Exit Sub
Else

    ''''在窗体中打印出列表的内容
    Me.Cls
   
    Print "Assbom" & vbTab & "Point" & vbTab & "Quantity"
   
    For i = 1 To mBomReturnLast.Count
        Set m = mBomReturnLast.Item(i)
       
        Print m.AssBom & vbTab & m.BomPoint & vbTab & m.Quantity
    Next i
End If


End Sub

Private Sub Form_Load()

''''窗体调用处新建实例,然后再装入数据

Set mBom = New Collection

AddBomRecord

End Sub

''''***************************************************************
''''*
''''*  以下为进行计算部分的代码,注意Collection里面的处理
''''*
''''***************************************************************


Private Sub GetBomList()
    Dim mBomTop As Collection       ''''这里保存了顶级产成品
    Dim i As Integer
    Dim j As Integer
    Dim m As cBomReturnValue
    Dim mLast As cBomValue
    Dim bFind As Boolean
   
   
   
    Set mBomTop = New Collection
   
   
    ''''装入顶级产成品
   
    LoadBomTop mBomTop
   
    ''''对顶级产品进行下级的判断
   
    For i = 1 To mBomTop.Count
        ''''最后一个参数为1,表示一个单位的产成品
        Call CalcNextBom(mBomTop.Item(i), mBomTop.Item(i), "1")
    Next i
   
   
    ''''最终得以mBomReturn,这里面已初步形成了结果了
   
    ''''再进行表达式计算,得到的值返回到mBomReturnLast中,注:mBomReturnLast这个集合加入cBomValue内容
   
   
    For i = 1 To mBomReturn.Count
        ''''处理一下最终结果,如果没有在Collection里面发现相同的AssBom及BomPoint,则新增加一个,如果已发现,仅只是数量相加
        Set m = mBomReturn(i)
       
        ''''查找是否已加入
        bFind = False
        For j = 1 To mBomReturnLast.Count
            Set mLast = mBomReturnLast(j)
           
            If Trim(mLast.AssBom) = Trim(m.AssBom) And Trim(mLast.BomPoint) = Trim(m.BomPoint) Then
                ''''如果发现有相同的,则加入相关数字
                mLast.Quantity = mLast.Quantity + CalcExpression(m.Expression)
                bFind = True
            End If
           
        Next j
       
        If bFind = False Then
            ''''如果没有找到
            Set mLast = New cBomValue
            mLast.AssBom = Trim(m.AssBom)
            mLast.BomPoint = Trim(m.BomPoint)
            mLast.Quantity = CalcExpression(Trim(m.Expression))
           
            mBomReturnLast.Add mLast
           
        End If
    Next i
   
    ''''所有操作完毕
End Sub

Private Sub LoadBomTop(ByRef BomTop As Collection)
    ''''装入顶级产成品,并返回到BomTop中
    ''''即存储过程中GetBomList中的第一个游标的创建@bomTop
   
    Dim i As Integer
    Dim j As Integer
    Dim n As Integer
   
   
    Dim bMark As Boolean    ''''这只是一个标识符,表明是否发现非顶级
    Dim bMarkAdd As Boolean ''''用于判断是否已加入到BomTop中的标识
   
   
    ''''判断方法,如果AssBom不在BomPoint中,那就是顶级了
    Dim sBomAssBom As String
   
    For i = 1 To mBom.Count
        sBomAssBom = Trim(mBom.Item(i).AssBom)
       
        ''''再进行循环
        bMark = False
       
        For j = 1 To mBom.Count
            If sBomAssBom = Trim(mBom.Item(j).BomPoint) Then
                bMark = True
            End If
        Next j
       
        If bMark = False Then
            ''''如果没有发现有相同的,则BomTop加入
           
            ''''加入前需要进行判断是否已加入
           
            For n = 1 To BomTop.Count
                If BomTop.Item(n) = sBomAssBom Then
                    bMarkAdd = True
                End If
            Next n
           
            If bMarkAdd = False Then
     

[1] [2] [3]  下一页


[C语言系列]C#winform中,MdiParent中每个子窗口都只能打开一…  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台