accessvb开发(accessvba代码大全)

hi,大家好呀accessvb开发,手机边亲爱accessvb开发的你还好吗!

今天accessvb开发我们接着来讲一下BOM。我们在经历了几周的等待后,今天终于要迎来大结局了。今天我们就来把BOM最后一个功能来讲解一下。

首先,我们先来讲解一下什么是BOM展开(注意我这里并不是官方解释,也不是权威解释,所以有讲的不正确的地方请指正),BOM的展开是从一个层级开始将所有的子项一一展开,比如我们BOM示例中用到的电脑的数据,我们电脑的主机箱展开就是,机箱、主板、硬盘、显卡、网卡、电源、内存,同时还要将主板的子项展开,那就是还有CPU、北桥、南桥、CMOS电池等等,一直要展开到组装电脑用到的螺丝。

从以上的举例我们可以知道,就是要把BOM中子项的子项全展开,展开到最小项为止,那这样其实就是用到了递归(大家非常期待的递归),最终BOM展开后我们将数据挂到树上呈现出来。那我们分几步来操作一下。

×

01、建窗体

如下图,我们需要新建一个窗体,在窗体上放一个文本框(txtProductCode),一个按钮(btnOK),一个树控件(Bom_Tree),一个标签控件(Label_Path),一个子窗体控件(frmChild)

accessvb开发

子窗体为数据表窗体,窗体的数据源为(qryBOM):

SELECT tblBOM.ID, tblBOM.ProductID, tblBOM.ProductParentID, tblBOM.Qty, tblBOM.Unit, tblBOM.IsEnabled, tblBOM.Remark, tblProduct.ProductCode AS 子物料代码, tblProduct.ProductName AS 子物料名称, tblProduct_1.ProductName AS 父物料名称, tblProduct_1.ProductCode AS 父物料代码FROM (tblBOM LEFT JOIN tblProduct ON tblBOM.ProductID = tblProduct.ID) LEFT JOIN tblProduct AS tblProduct_1 ON tblBOM.ProductParentID = tblProduct_1.ID;

×

02、添加代码Private Sub btnOK_Click()GetTreeEnd SubPrivate Sub Form_Load()Me.Bom_Tree.Nodes.ClearMe.frmChild.Form.RecordSource = "select * from qryBOM where 1=2"Me.Label_Path.Caption = ""End SubPrivate Sub GetTree()On Error GoTo ErrorHandlerDim objNode As Object ' MSComctlLib.NodeMe.Bom_Tree.Nodes.ClearDim strID As LongDim strName As StringstrID = Nz(DLookup("ID", "tblProduct", "ProductCode='" & Me.txtProductCode & "'"), 0)strName = Nz(DLookup("ProductName", "tblProduct", "ProductCode='" & Me.txtProductCode & "'"), 0)Set objNode = Me.Bom_Tree.Nodes.Add(, , "K", strName) '添加树控件底层节点Call ShowBOM(strID)objNode.Expanded = True 'ExitHere:Exit SubErrorHandler:MsgBox Err.Description, vbCriticalResume ExitHereEnd SubPrivate Sub ShowBOM(strID As Long)On Error GoTo ErrorHandlerDim rst As ObjectDim strSQL As StringDim strP As StringstrSQL = "select * from qryBOM where ProductParentID=" & Nz(strID, 0)Set rst = CurrentDb.OpenRecordset(strSQL)Do Until rst.EOFIf DCount("*", "qryBOM", "ProductID=" & Nz(strID, 0)) = 0 Or Nz(DLookup("ID", "tblProduct", "ProductCode='" & Me.txtProductCode & "'"), 0) = strID ThenstrP = "K"ElsestrP = "K" & rst!ProductParentIDEnd IfMe.Bom_Tree.Nodes.Add strP, tvwChild, "K" & rst!ProductID, rst!子物料名称 '添加树控件节点If DCount("*", "qryBOM", "ProductParentID=" & Nz(rst!ProductID, 0)) > 0 ThenCall ShowBOM(rst!ProductID)End Ifrst.MoveNextLooprst.CloseExitHere:Set rst = NothingExit SubErrorHandler:MsgBox Err.Description, vbCriticalResume ExitHereEnd SubPrivate Sub Bom_Tree_LostFocus()Set Me.Bom_Tree.DropHighlight = Me.Bom_Tree.SelectedItemEnd SubPrivate Sub Bom_Tree_GotFocus()Set Me.Bom_Tree.DropHighlight = NothingEnd SubPrivate Sub Bom_Tree_NodeClick(ByVal Node As Object)Dim strSQL As StringMe.Label_Path.Caption = Node.FullPathMe.Bom_Tree.SetFocusDim objNode As NodeSet objNode = Me.Bom_Tree.SelectedItemIf objNode.Key <> "K" ThenIf DCount("*", "qryBOM", "ProductParentID=" & CLng(Mid(objNode.Key, 2))) > 1 ThenstrSQL = "select * from qryBOM where ProductParentID=" & CLng(Mid(objNode.Key, 2))ElsestrSQL = "select * from qryBOM where ProductID=" & CLng(Mid(objNode.Key, 2))End IfElsestrSQL = "select * from qryBOM where 父物料名称='" & objNode.Text & "'"End IfMe.frmChild.Form.RecordSource = strSQLEnd Sub

我们自己写了一个函数,在这里我们用到了递归,具体的我们在后面的视频中说明

accessvb开发

×

03、运行测试

最后一步就是运行测试了

accessvb开发

注意,展开需要输入完整的产品代码,不能用模糊查询。

我们这次分享的内容主要是用于学习树控件,我们只是整了一个简单的BOM系统 ,如果需要当作一个系统来使用的话,还需要把目前的功能完善,那这个任务就交给大家吧。

accessvb开发

发布于 2024-05-28 11:05:22
收藏
分享
海报
0 条评论
55
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~