-BOM表查詢的VB實(shí)現(xiàn)方法_第1頁(yè)
-BOM表查詢的VB實(shí)現(xiàn)方法_第2頁(yè)
-BOM表查詢的VB實(shí)現(xiàn)方法_第3頁(yè)
-BOM表查詢的VB實(shí)現(xiàn)方法_第4頁(yè)
-BOM表查詢的VB實(shí)現(xiàn)方法_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

如果文檔合適請(qǐng)下載打賞支持用VB代碼實(shí)現(xiàn)方法引用:無(wú),部件:無(wú)設(shè)計(jì):在 Form1中右下角加入一個(gè) CommandButton,名稱默認(rèn)為 Command1,窗體的AutoRedraw屬性設(shè)為 True窗體文件一:Form1OptionExplicitPrivatemBomAsCollection'這是入口的集合PrivatemBomReturnAsCollection'這是出口的集合,未經(jīng)處理PrivatemBomReturnLastAsCollection'這是出口的集合,經(jīng)過(guò)處理PrivateSubAddBomRecord()'在這里往 mBom加入數(shù)據(jù)庫(kù)里面的原內(nèi)容,為求簡(jiǎn)便,我不想連接數(shù)據(jù)庫(kù)'直接往里面寫入記錄了,如果需要,你就直接連接數(shù)據(jù)庫(kù),分析一下里面的'代碼,然后再往 mBom里面寫入記錄'FGSA12.0000'FGSA23.0000'SA1PT14.0000'SA1PT25.0000'SA2PT16.0000'SA2PT37.0000DimmBomValueAscBomValueSetmBomValue=NewcBomValuemBomValue.AssBom="FG"mBomValue.BomPoint="SA1"mBomValue.Quantity=2mBom.AddmBomValueSetmBomValue=NewcBomValuemBomValue.AssBom="FG"mBomValue.BomPoint="SA2"mBomValue.Quantity=3mBom.AddmBomValueSetmBomValue=NewcBomValuemBomValue.AssBom="SA1"mBomValue.BomPoint="PT1"mBomValue.Quantity=4mBom.AddmBomValueSetmBomValue=NewcBomValuemBomValue.AssBom="SA1"mBomValue.BomPoint="PT2"mBomValue.Quantity=5mBom.AddmBomValueSetmBomValue=NewcBomValuemBomValue.AssBom="SA2"1如果文檔合適請(qǐng)下載打賞支持mBomValue.BomPoint="PT1"mBomValue.Quantity=6mBom.AddmBomValueSetmBomValue=NewcBomValuemBomValue.AssBom="SA2"mBomValue.BomPoint="PT3"mBomValue.Quantity=7mBom.AddmBomValueEndSubPrivateSubCommand1_Click()DimiAsIntegerDimmAscBomValue'進(jìn)行計(jì)算'注意以下兩個(gè)新建實(shí)例,必須放置于 GetBomList前,該操作也有清空現(xiàn)有數(shù)據(jù)的作用,否則會(huì)造成錯(cuò)誤'即第一次運(yùn)行后保存了數(shù)據(jù)于該兩個(gè)變量中,并未清除相關(guān)記錄,而下一次運(yùn)行則在現(xiàn)有的基礎(chǔ)上再進(jìn)行加操作,因此數(shù)據(jù)錯(cuò)誤了。SetmBomReturn=NewCollectionSetmBomReturnLast=NewCollectionCallGetBomList'計(jì)算后,mBomReturnLast返回的就是最終結(jié)果IfmBomReturnLast.Count<0ThenMsgBox"沒(méi)有記錄!",vbInformation+vbOKOnly,"BOM 表計(jì)算"ExitSubElse'在窗體中打印出列表的內(nèi)容Me.ClsPrint"Assbom"&vbTab&"Point"&vbTab&"Quantity"Fori=1TomBomReturnLast.CountSetm=mBomReturnLast.Item(i)Printm.AssBom&vbTab&m.BomPoint&vbTab&m.QuantityNextiEndIfEndSubPrivateSubForm_Load()'窗體調(diào)用處新建實(shí)例,然后再裝入數(shù)據(jù)SetmBom=NewCollectionAddBomRecordEndSub2如果文檔合適請(qǐng)下載打賞支持'***************************************************************'*'*以下為進(jìn)行計(jì)算部分的代碼,注意 Collection里面的處理'*'***************************************************************PrivateSubGetBomList()DimmBomTopAsCollection'這里保存了頂級(jí)產(chǎn)成品DimiAsIntegerDimjAsIntegerDimmAscBomReturnValueDimmLastAscBomValueDimbFindAsBooleanSetmBomTop=NewCollection'裝入頂級(jí)產(chǎn)成品LoadBomTopmBomTop'對(duì)頂級(jí)產(chǎn)品進(jìn)行下級(jí)的判斷Fori=1TomBomTop.Count'最后一個(gè)參數(shù)為 1,表示一個(gè)單位的產(chǎn)成品CallCalcNextBom(mBomTop.Item(i),mBomTop.Item(i),"1")Nexti'最終得以 mBomReturn,這里面已初步形成了結(jié)果了'再進(jìn)行表達(dá)式計(jì)算,得到的值返回到mBomReturnLast中,注:mBomReturnLast這個(gè)集合加入cBomValue內(nèi)容Fori=1TomBomReturn.Count'處理一下最終結(jié)果,如果沒(méi)有在 Collection里面發(fā)現(xiàn)相同的 AssBom及BomPoint,則新增加一個(gè),如果已發(fā)現(xiàn),僅只是數(shù)量相加Setm=mBomReturn(i)'查找是否已加入3如果文檔合適請(qǐng)下載打賞支持bFind=FalseForj=1TomBomReturnLast.CountSetmLast=mBomReturnLast(j)IfTrim(mLast.AssBom)=Trim(m.AssBom)AndTrim(mLast.BomPoint)=Trim(m.BomPoint)Then'如果發(fā)現(xiàn)有相同的,則加入相關(guān)數(shù)字mLast.Quantity=mLast.Quantity+CalcExpression(m.Expression)bFind=TrueEndIfNextjIfbFind=FalseThen'如果沒(méi)有找到SetmLast=NewcBomValuemLast.AssBom=Trim(m.AssBom)mLast.BomPoint=Trim(m.BomPoint)mLast.Quantity=CalcExpression(Trim(m.Expression))mBomReturnLast.AddmLastEndIfNexti'所有操作完畢EndSubPrivateSubLoadBomTop(ByRefBomTopAsCollection)'裝入頂級(jí)產(chǎn)成品,并返回到 BomTop中'即存儲(chǔ)過(guò)程中 GetBomList中的第一個(gè)游標(biāo)的創(chuàng)建 @bomTopDimiAsIntegerDimjAsIntegerDimnAsIntegerDimbMarkAsBoolean'這只是一個(gè)標(biāo)識(shí)符,表明是否發(fā)現(xiàn)非頂級(jí)DimbMarkAddAsBoolean'用于判斷是否已加入到 BomTop中的標(biāo)識(shí)'判斷方法,如果AssBom不在BomPoint中,那就是頂級(jí)了DimsBomAssBomAsString4如果文檔合適請(qǐng)下載打賞支持Fori=1TomBom.CountsBomAssBom=Trim(mBom.Item(i).AssBom)'再進(jìn)行循環(huán)bMark=FalseForj=1TomBom.CountIfsBomAssBom=Trim(mBom.Item(j).BomPoint)ThenbMark=TrueEndIfNextjIfbMark=FalseThen'如果沒(méi)有發(fā)現(xiàn)有相同的,則 BomTop加入'加入前需要進(jìn)行判斷是否已加入Forn=1ToBomTop.CountIfBomTop.Item(n)=sBomAssBomThenbMarkAdd=TrueEndIfNextnIfbMarkAdd=FalseThen'如果沒(méi)有加入過(guò),則加入BomTop.AddsBomAssBomEndIfEndIfNextiEndSub'GetBomTrueList的存儲(chǔ)過(guò)程用 VB來(lái)描述PrivateSubCalcNextBom(sAssBomAsString,sAssPointAsString,sExpAsString)DimdQuanAsDoubleDimsExpressionAsStringDimsPointAsStringDimBomTopAsString'創(chuàng)建point_cursor處的游標(biāo)DimmBomPointAsCollection5如果文檔合適請(qǐng)下載打賞支持SetmBomPoint=NewCollection'裝入相關(guān)的集合CallLoadNextPoint(mBomPoint,sAssPoint)'裝入完畢后,再進(jìn)行判斷是否為明細(xì)級(jí)半成品,如果不是,遞歸一次本函數(shù),如果是,加入到mBomReturn里面去DimiAsIntegerDimmBomReturnValueAscBomReturnValueFori=1TomBomPoint.Count'判斷是否為明細(xì)級(jí)IfIsDetailPoint(Trim(mBomPoint.Item(i).BomPoint))=TrueThen'如果是明細(xì)級(jí),則加入到cBomReturnValueSetmBomReturnValue=NewcBomReturnValuemBomReturnValue.AssBom=Trim(sAssBom)mBomReturnValue.BomPoint=Trim(mBomPoint.Item(i).BomPoint)'構(gòu)建表達(dá)式mBomReturnValue.Expression=sExp&"*"&Trim(CStr(mBomPoint.Item(i).Quantity))mBomReturnValue.Quantity=mBomPoint.Item(i).Quantity'加入mBomReturn.AddmBomReturnValueElse'如果不是明細(xì)項(xiàng),則再次遞歸,注意傳入的第一個(gè)參數(shù),總是頂級(jí) Bom,僅作標(biāo)識(shí)符用Call CalcNextBom(sAssBom, Trim(mBomPoint.Item(i).BomPoint), sExp & "*" &Trim(CStr(mBomPoint.Item(i).Quantity)))EndIfNextiEndSubPrivateSubLoadNextPoint(ByRefBomPointAsCollection,ByValPointNameAsString)'相當(dāng)于 GetBomTrueList 中的游標(biāo)中的 selectdistinct point,sl from tewhereAssbom=6如果文檔合適請(qǐng)下載打賞支持@pointNameDimiAsIntegerDimjAsIntegerDimbMarkAsBooleanDimmPointValueAscPointValueFori=1TomBom.CountbMark=FalseIfTrim(mBom.Item(i).AssBom)=Trim(PointName)Then'判斷是否已加入Forj=1ToBomPoint.CountIfTrim(BomPoint.Item(j).BomPoint)=Trim(mBom.Item(i).BomPoint)AndBomPoint.Item(j).Quantity=mBom.Item(i).QuantityThenbMark=TrueEndIfNextjIfbMark=FalseThen'表示沒(méi)有加入SetmPointValue=NewcPointValuemPointValue.BomPoint=Trim(mBom.Item(i).BomPoint)mPointValue.Quantity=mBom.Item(i).QuantityBomPoint.AddmPointValueEndIfEndIfNextiEndSubPrivateFunctionIsDetailPoint(ByValPointNameAsString)AsBoolean'判斷是否為底級(jí)半成品'只需要判斷 PointName不在mBom的AssBom項(xiàng)中即可DimiAsIntegerFori=1TomBom.CountIfTrim(mBom.Item(i).AssBom)=Trim(PointName)Then'如果找到了,直接返回 False,并退出函數(shù)IsDetailPoint=FalseExitFunctionEndIfNexti7如果文檔合適請(qǐng)下載打賞支持'如果到了這里還沒(méi)有找到,那么就肯定是底級(jí)了IsDetailPoint=TrueEndFunctionPublicFunctionCalcExpression(strExpAsString)AsDouble'計(jì)算處理中的表達(dá)式,注意,只有乘法DimsItemExp()AsStringDimdReturnValueAsDoubleDimiIndexAsIntegersItemExp=Split(Trim(strExp),"*")IfUBound(sItemExp)<0ThenCalcExpression=0ElsedReturnValue=1ForiIndex=0ToUBound(sItemExp)IfTrim(sItemExp(iIndex))=""ThensItemExp(iIndex)=0EndIfdReturnValue=dReturnValue*CDbl(sItemExp(iIndex))NextiIndexCalcExpression=dReturnValueEndIfEndFunction類模塊一:類名: cBomReturnValueOptionExplicit'保持屬性值的局部變量PrivatemvarAssBomAsString'局部復(fù)制PrivatemvarBomPointAsString'局部復(fù)制PrivatemvarQuantityAsDouble'局部復(fù)制PrivatemvarExpressionAsString'局部復(fù)制PublicPropertyLetExpression(ByValvDataAsString)'向?qū)傩灾概芍禃r(shí)使用,位于賦值語(yǔ)句的左邊。'Syntax:X.Expression=5mvarExpression=vDataEndProperty8如果文檔合適請(qǐng)下載打賞支持PublicPropertyGetExpression()AsString'檢索屬性值時(shí)使用,位于賦值語(yǔ)句的右邊。'Syntax:Debug.PrintX.ExpressionExpression=mvarExpressionEndPropertyPublicPropertyLetQuantity(ByValvDataAsDouble)'向?qū)傩灾概芍禃r(shí)使用,位于賦值語(yǔ)句的左邊。'Syntax:X.Quantity=5mvarQuantity=vDataEndPropertyPublicPropertyGetQuantity()AsDouble'檢索屬性值時(shí)使用,位于賦值語(yǔ)句的右邊。'Syntax:Debug.PrintX.QuantityQuantity=mvarQuantityEndPropertyPublicPropertyLetBomPoint(ByValvDataAsString)'向?qū)傩灾概芍禃r(shí)使用,位于賦值語(yǔ)句的左邊。'Syntax:X.BomPoint=5mvarBomPoint=vDataEndPropertyPublicPropertyGetBomPoint()AsString'檢索屬性值時(shí)使用,位于賦值語(yǔ)句的右邊。'Syntax:Debug.PrintX.BomPointBomPoint=mvarBomPointEndPropertyPublicPropertyLetAssBom(ByValvDataAsString)'向?qū)傩灾概芍禃r(shí)使用,位于賦值語(yǔ)句的左邊。'Syntax:X.AssBom=5mvarAssBom=vDataEndPropertyPublicPropertyGetAssBom()AsString'檢索屬性值時(shí)使用,位于賦值語(yǔ)句的右邊。'Syntax:Debug.PrintX.AssBomAssBom=mvarAssBomEndProperty類模塊二:類名: cBomValueOptionExplicit'保持屬性值的局部變量PrivatemvarAssBomAsString'局部復(fù)制PrivatemvarBomPointAsString'局部復(fù)制9如果文檔合適請(qǐng)下載打賞支持PrivatemvarQuantityAsDouble'局部復(fù)制PublicPropertyLetQuantity(ByValvDataAsDouble)'向?qū)傩灾概芍禃r(shí)使用,位于賦值語(yǔ)句的左邊。'Syntax:X.Quantity=5mvarQuantity=vDataEndPropertyPublicPropertyGetQuantity()AsDouble'檢索屬性值時(shí)使用,位于賦值語(yǔ)句的右邊。'Syntax:Debug.PrintX.QuantityQuantity=mvarQuantityEndPropertyPublicPropertyLetBomPoint(ByValvDataAsString)'向?qū)傩灾概芍禃r(shí)使用,位于賦值語(yǔ)句的左邊。'Syntax:X.BomPoint=5mvarBomPoint=vDataEndPropertyPublicPropertyGetBomPoint()AsString'檢索屬性值時(shí)使用,位于賦值語(yǔ)句的右邊。'Syntax:Debug.PrintX.BomPointBomPoint

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論