箱體類零件工藝分析及知識庫研究(減速機)
箱體類零件工藝分析及知識庫研究(減速機),箱體,零件,工藝,分析,知識庫,研究,減速
學科門類: 工學 單位代碼 : 32022
箱體類零件知識庫及工藝
模板的研究
測試分析報告
學生姓名
于 光 耀
所學專業(yè)
機械設計制造及其自動化
班 級
建材機械99(5)班
學 號
B9912027
指導教師
王 正 剛
鹽城工學院機械工程系
二○○三年六月
一、設計(論文)內(nèi)容
根據(jù)企業(yè)的工藝現(xiàn)狀,對減速器等產(chǎn)品中的箱體類零件進行工藝分析,并規(guī)范化,
標準化,建立知識框架模型,確定工知識結構,根據(jù)所確定的工藝知識結構錄入工
藝知識,并建庫保存。建立工藝模板知,首先調(diào)用工藝模板編制模塊,根據(jù)工藝設計
規(guī)則,編制典型零件的工藝規(guī)程,并以此作為工藝規(guī)程模板。
二、設計(論文)依據(jù)
1、輸送機滾筒轉速為90r/min,減速器輸出功率為3.4kW。
2、運輸機連續(xù)工作,單向轉動,載荷變化不大,空載起動,減速器小批生產(chǎn),使用
年限10年,大修期3年,兩班制工作,運輸帶容許速度誤差為5%。
3、工藝決策規(guī)則的制定限制的條件為零件的總體信息,型面的特征信息,工藝常規(guī)
邏輯,企業(yè)的工藝習慣等。
三、技術要求
1. 對蓋套類零件的工藝術語、工藝知識、工藝參數(shù)等進行規(guī)范化,標準化。
2、建立人機友好的工作界面,便于用戶對工藝知識的獲取、管理與維護。
3、采用Pro/E對零件進行三維造型。
4、數(shù)據(jù)庫采用SQL Server2000,開發(fā)工具采用Delphi6.0/7.0。
.
四.畢業(yè)設計(論文)物化成果的具體內(nèi)容及要求
(具體內(nèi)容參照機械工程系畢業(yè)設計<論文>大綱及實施細則的有關要求填寫)
圖紙內(nèi)容及張數(shù)
減速器裝配圖 1 張(A0)
零件圖 4~6張(A1~A2)
-
實物內(nèi)容及要求
完成滿足該系統(tǒng)要求的原型系統(tǒng)
其他:
1、完成設計說明書1份(字數(shù)在2萬字以上)
2、軟件測試分析報告各一份。
3、零件三維造型3~5個。
4、源程序代碼1份。
5、典型零件工藝模板1套。
五. 畢業(yè)設計(論文)進度計劃
起訖日期
工作內(nèi)容
備 注
3.31——4.13
畢業(yè)實習,收集資料。
4.14——4.27
資料整理,擬訂設計方案。
4.28——5.31
設計傳動系統(tǒng),建立數(shù)據(jù)庫與工藝模板,系統(tǒng)測試。
6.1——6.15
編寫設計計算說明書。
6.16——6.22
畢業(yè)設計資料審閱,修改。
6.23——6.27
分小組答辯。
六. 主要參考文獻:
1、王先逵.機械制造工藝學.北京:機械工業(yè)出版社,1995.
2、趙汝嘉.計算機輔助工藝設計(CAPP).北京:機械工業(yè)出版社,1995.
3、三味工作屋.SQL Server7.0管理指南.北京:中國水利水電出版社,1999.
4、戴曙.金屬切削機床.北京:機械工業(yè)出版社,1999.
5、朱寶庫.機械設計.哈爾濱:哈爾濱工業(yè)大學出版社,1994.
6、周開勤.機械零件手冊.北京:高等教育出版社,1989.
7、李存斌.Delphi6.0,程序設計及其應用開發(fā).北京,中國水利水電出版社,2002.
8、王細洋,王叔淳.工藝知識管理系統(tǒng)的設計,計算機輔助設計與制造,
1998,(4):47-50.
9、恒永興,張振明,黃乃康等.CAPP面向對象知識庫管理系統(tǒng)的設計與實現(xiàn),
機械科學與技術.2001,20(1):140-142.
10、劉金坤,王勻,王雷剛等.基于關系型數(shù)據(jù)的專家系統(tǒng)結構模型及實現(xiàn)技術,
中國機械工程。2001,12(5):545-547.
七、其他
測試分析報告
一引言
基于PDM平臺的CAPP可以充分利用PDM的強大功能,實現(xiàn)工藝設計過程控制和并行工程。在國內(nèi)許多CIMS工程中,越來越多的企業(yè)開始選擇商用PDM軟件作為CIMS的集成平臺和并行工程的使用環(huán)境,開發(fā)基于PDM的CAPP系統(tǒng)必將成為一個發(fā)展趨勢。
1.編寫目的
編寫此測試報告的目的是為了保證基于PDM的CAPP系統(tǒng)的正常運行,所以要通過測試,來發(fā)現(xiàn)錯誤和異常情況,以保證程序在以后的運行過程中盡可能的少出現(xiàn)故障。
2.背景
本此測試的是基于PDM的CAPP系統(tǒng)框架的構建,是由鹽城工學院機械工程系提出的。它是由葛友華、劉道標、王正剛老師共同負責,由本屆畢業(yè)生張健、劉忠明同學作為畢業(yè)設計的課題協(xié)同規(guī)劃和開發(fā),以期能建立起基于產(chǎn)品數(shù)據(jù)管理的計算機輔助工藝過程規(guī)劃的實際應用系統(tǒng),以期能夠投入到企業(yè)的實際應用中。由于測試環(huán)境與實際運行環(huán)境之間可能存在著差異,所以在實際運行過程中難免存在著不足之處,有待于進一步的完善。
3.定義
CAD: 計算機輔助設計,全稱為Computer-Aided Design;
CAM: 計算機輔助制造,全稱為Computer-Aided Manufacturing;
PDM: 產(chǎn)品數(shù)據(jù)管理,全稱為Product Data Management;
CAPP:計算機輔助工藝規(guī)程設計,全稱為Computer-Aided Process Planning;
CIMS:計算機集成制造系統(tǒng),全稱為Computer integrated manufacturing system。
4.參考資料
(1)劉道標.基于PDM的CAPP系統(tǒng)框架的研究與實現(xiàn).南京航天航空大學碩士學位論文,2002年12月。
(2)李善平,劉乃若,郭鳴等著.產(chǎn)品數(shù)據(jù)標準與PDM.清華大學出版社,2002年4月。
(3)魏志強,王先逵,楊志剛,吳丹. 集成制造環(huán)境下的計算機輔助工藝設計框架系統(tǒng)2001年2月21號。
(4)《軟件標準和指導性技術文件》.航空工業(yè)標準HB6465—90。
二測試概要
本次測試主要是對下面的程序進行的:
(1) 登陸界面的測試
測試動態(tài)鏈接數(shù)據(jù)庫,輸入服務器名、服務器密碼;
測試登陸用戶的合法性,輸入用戶名和密碼;
(2) 系統(tǒng)主界面的測試
測試簡單的WEB瀏覽器能否應用;
測試各應用模塊能否正常顯示;
(3) 用戶管理界面的測試
測試用戶管理輸入數(shù)據(jù)是否有效;
測試添加、修改、刪除、關閉按鈕是否有效,是否有異常情況;
(4) 數(shù)據(jù)備份的測試
測試數(shù)據(jù)庫中的內(nèi)容能否以文件形式保存?zhèn)浞荩?
(5) 項目管理模塊的測試
測試該模塊所有界面中的按鈕能否正常實現(xiàn)功能;
測試是否對所有項目都分配完成后才能進入下一流程;
(6) 產(chǎn)品管理模塊的測試
測試產(chǎn)品管理模塊中所有功能是否能夠正常實現(xiàn);
測試產(chǎn)品管理模塊中的功能是否符合需求;
(7) 工藝文件管理模塊的測試
測試新建工藝、打開工藝、工藝提取、工藝預覽、工藝打印能否正常實現(xiàn)功能;
測試該界面中的各個子模塊是否有異常情況;
(8) 工序文件管理模塊的測試(圖略)
測試該模塊中新建工序文件、打開工序文件是否正常實現(xiàn)功能;
測試該模塊中各個功能是否正常,有無異常情況;
(9) 工藝數(shù)據(jù)管理模塊的測試
測試該模塊中典型工藝數(shù)據(jù)維護、知識庫管理、切削用量和加工余量能否正常實現(xiàn)功能;
測試各個子界面中的按鈕等是否能實現(xiàn)其功能,有無異常情況;
(10) 工藝設計模塊的測試
測試該模塊中基于實例的工藝生成和基于模板的實例生成、工藝路線能否正常實現(xiàn)其功能;
測試該模塊中各界面的需求功能能否正常實現(xiàn),有無異常情況要處理;
(11) 系統(tǒng)查詢模塊的測試
測試基于WEB的查詢模塊能否實現(xiàn)其功能;
測試與后臺數(shù)據(jù)庫鏈接有無異常情況;
三測試結果及發(fā)現(xiàn)
(1) 測試1
輸入錯誤的數(shù)據(jù)庫服務器名稱,系統(tǒng)報錯,數(shù)據(jù)庫自動斷開,系統(tǒng)自動關閉。
輸入正確的數(shù)據(jù)庫服務器名稱,服務器密碼錯誤,系統(tǒng)無法進入,關閉后重新登陸。
輸入正確的數(shù)據(jù)庫服務器名稱和密碼,用戶名出錯時,無法登陸系統(tǒng)。
輸入正確的數(shù)據(jù)庫服務器名稱和密碼,正確的用戶名,密碼錯誤時無法登陸系統(tǒng)。
通過以上測試得出結果,只有當以上各項都符合時,方能成功登陸本系統(tǒng)。
(2) 測試2
測試主界面能否實現(xiàn)簡單的WEB瀏覽器功能,在地址欄中輸入所要訪問的主頁地址,測試在相應的WebBrower處能否正常顯示網(wǎng)頁內(nèi)容。
測試主菜單中的各個鏈接是否正常,點擊時能否顯示相應的界面。
通過反復的測試,發(fā)現(xiàn)了一些意想不到的問題,尤其時在集成整個系統(tǒng)界面的時候,通過不斷的調(diào)整最終集合成主界面。
(3) 測試3
測試用戶管理界面時,當姓名輸入框為空時,無法對登陸用戶進行添加、修改、刪除;當?shù)顷懹脩魹橄到y(tǒng)管理員時,擁有最高權限可以對整個用戶管理界面進行維護,當?shù)顷懹脩魹槠胀ㄓ脩艋蚬に嚾藛T時,無法運用用戶管理界面中的添加、修改、刪除按鈕進行用戶權限管理。剛開始時,當用戶欄為空時也可以對用戶管理界面進行修改。
(4) 測試4
測試數(shù)據(jù)備份界面時,當?shù)顷懹脩魹橄到y(tǒng)管理員時可以對基礎資源庫進行數(shù)據(jù)備份,以文件形式保存到硬盤中,而當普通用戶登陸時則沒有此權限功能。而在具體實現(xiàn)此功能時,經(jīng)過反復調(diào)試后,總算實現(xiàn)了此功能。
(5) 測試5
測試項目管理模塊時,由于要實現(xiàn)通用化,所以在建立后臺數(shù)據(jù)庫時要建立關聯(lián)庫,具體實現(xiàn)的時候用SQL查詢語言來實現(xiàn),當項目分配完成后要進入下一個流程,關鍵在于要實現(xiàn)如下需求,只有當所有項目都分配完畢后才能進入下一個工作流程,這就要逐一讀取數(shù)據(jù)庫中關于項目分配的信息,來確定是否能夠實現(xiàn)。但由于開發(fā)者自身條件的限制,導致后臺數(shù)據(jù)庫中的內(nèi)容不夠充實,只是實現(xiàn)了一定的設計思想。
(6) 測試6
測試產(chǎn)品管理模塊時,首先是對產(chǎn)品設計管理界面的測試,利用樹形結構作導航,利用SQL查詢語言,使左邊的產(chǎn)品或零件與右邊的詳細信息相對應,當指針指到產(chǎn)品樹中的某一零件時就觸發(fā)事件,在右邊相應的位置顯示所查詢到的詳細信息,如零件的總體信息、工藝信息、其它信息,還可以查看其相應的圖形,如果在數(shù)據(jù)庫中未添加零件圖形,則要到產(chǎn)品數(shù)據(jù)管理界面提供的圖形管理處加入與零件相對應的圖形,在測試過程中發(fā)現(xiàn)采用樹形結構來導航是非常方便的,不過在維護過程中對樹形結構管理時,容易產(chǎn)生數(shù)據(jù)庫更新不足,產(chǎn)生一些意外的出錯信息,經(jīng)過反復測試后,調(diào)整了數(shù)據(jù)庫的結構,終于實現(xiàn)了初步的功能,而工藝信息部分是通過顯示按扭來觸發(fā)事件,當零件的工藝已經(jīng)制定好了以后,則通過查詢來檢索后臺數(shù)據(jù)庫零件工藝匯總中的關于此零件的工藝信息,如果零件的工藝未制定,則進入新建工藝界面對零件工藝進行編輯,而工藝設計可以運用兩種方法,一種是基于實例的工藝生成,還有是基于模板的工藝生成,測試過程中主要是測試產(chǎn)品樹中的零件與工藝信息是否能關聯(lián),以及后臺數(shù)據(jù)庫能否正常工作,經(jīng)過修改后已經(jīng)實現(xiàn)了初步功能。
(7) 測試7
測試過程中主要是對新建工藝界面、打開工藝、工藝提取、工藝預覽、工藝打印能否正常實現(xiàn)功能;測試該界面中的各個子模塊是否有異常情況;在測試過程中主要是要使各個界面都能實現(xiàn)其初步功能,使之不出現(xiàn)異常情況,開始測試時總出現(xiàn)一些小錯誤,最后在程序中加入了異常處理后在運行時就把錯誤給排除拉,
在動態(tài)輸入數(shù)據(jù)時,可以選擇數(shù)據(jù)庫中的內(nèi)容添加到數(shù)據(jù)輸入框中,然后再通過按鈕觸發(fā)事件,保存到后臺數(shù)據(jù)庫中。通過動態(tài)輸入的數(shù)據(jù)與保存到數(shù)據(jù)庫中的內(nèi)容相比較,最后確認程序是否能滿足功能要求。
(8) 測試8
主要是測試工序管理模塊中的界面能否達到功能要求,測試該模塊中新建工序文件、打開工序文件是否正常實現(xiàn)功能;測試該模塊中各個功能是否正常,有無異常情況;通過在新建工序文件界面中動態(tài)輸入數(shù)據(jù),然后以文件形式保存到電腦中,然后再通過打開工序文件界面把剛才保存的文件打開來,查看數(shù)據(jù)是否與動態(tài)輸入的數(shù)據(jù)一致。如果數(shù)據(jù)不一致則說明程序還存在著問題,需要修改再調(diào)試,如果顯示的數(shù)據(jù)與動態(tài)輸入的數(shù)據(jù)完全一致,說明程序已初步實現(xiàn)了需求功能,可以對下一面進行測試。
(9) 測試9
主要是測試該模塊中典型工藝數(shù)據(jù)維護、知識庫管理、切削用量和加工余量界面能否正常實現(xiàn)其功能,最后測試各個子界面中的按鈕等是否能實現(xiàn)其功能,有無異常情況;在測試過程中,對典型工藝數(shù)據(jù)維護界面測試主要是動態(tài)輸入數(shù)據(jù),
再點擊相應的功能按鈕,查看生成的數(shù)據(jù)是否與動態(tài)輸入的數(shù)據(jù)相一致,如果得出的結果確實如此,則說明所編寫的程序是正確的,反之則需要修改,再不斷調(diào)試,直到實現(xiàn)需求功能為止。
(10) 測試10
主要是測試該模塊中基于實例的工藝生成和基于模板的工藝生成、工藝路線能否正常實現(xiàn)其功能;測試該模塊中各界面的需求功能能否正常實現(xiàn),有無異常情況要處理;根據(jù)上面所示的界面,首先是查詢與零件相對應的工藝,然后在網(wǎng)格中顯示出來,再點擊導出工藝按鈕,把檢索到的工藝單存儲到臨時表中,再顯示在網(wǎng)格中,以便使用者進行修改,直到達到要求為止,然后再存儲到零件工藝匯總表中,如果這一過程中輸入與輸出的數(shù)據(jù)相一致,則說明程序已實現(xiàn)了功能需求,反之,則要進行修改,調(diào)試直到達到要求為止。
(11) 測試11
主要是測試基于WEB的查詢模塊,點擊左邊的查詢按鈕,在右邊對應的位置顯示鏈接的內(nèi)容,如果未出現(xiàn)相應的界面,則說明源程序還需要修改,調(diào)試,直到能滿足功能需求為止。
四測試結論
1. 功能1
(1)能力
登陸界面已具備了動態(tài)連接數(shù)據(jù)庫的能力,以及辨別登陸用戶合法性的能力,經(jīng)過多次測試,已證明了登陸界面擁有了以上能力。
(2)限制
在測試過程中,發(fā)現(xiàn)了問題,開始時無法動態(tài)連接遠程數(shù)據(jù)庫,后來通過改進,才能夠連接到遠程數(shù)據(jù)庫。
2. 功能2
(1)能力
系統(tǒng)主界面已具備作為簡單的WEB瀏覽器的能力,能夠訪問INTERNET,另外也達到了連接各個系統(tǒng)子模塊的能力,經(jīng)過多次測試,證明已具備了以上能力。
(2)限制
由于只是一個簡單的WEB瀏覽器,所以跟IE相比還有一定的差距。
3. 功能3
(1)能力
用戶管理界面已經(jīng)具備了對使用本系統(tǒng)的用戶進行管理的能力,當?shù)顷懹脩魹橄到y(tǒng)管理員時可以對任何用戶進行修改其所有信息,也可以添加和刪除用戶;而當?shù)顷懹脩魹槠胀ㄓ脩魰r,則沒有權限修改用戶信息的能力。
4. 功能4
(1)能力
數(shù)據(jù)備份界面已經(jīng)具備了對基礎庫以文件形式保存的能力,經(jīng)過多次測試后,已經(jīng)能夠實現(xiàn)功能需求,能夠保存數(shù)據(jù),并能夠在系統(tǒng)中顯示以文件形式保存的數(shù)據(jù)。
(2)限制
由于數(shù)據(jù)本身已保存在數(shù)據(jù)庫中,以文件形式再保存、備份只是為了防止意外事故發(fā)生,導致數(shù)據(jù)丟失,欠缺是為能所有用到的數(shù)據(jù)庫進行備份。
5. 功能5
(1)能力
項目管理模塊主要是對通用化的項目進行分配任務、編制任務,經(jīng)過這一流程后,最后審核項目。經(jīng)過測試,證明該模塊已具備了此能力。
(2)限制
由于對項目內(nèi)容及流程知道有限,導致建立的數(shù)據(jù)庫內(nèi)容教少,還不具備通用性,有待于改進、提高。
6.功能6
(1) 能力
產(chǎn)品管理模塊主要是用來對企業(yè)中的產(chǎn)品自制件、標準件、外協(xié)件等進行分類管理,對自制件如果未制定工藝則到相應的新建工藝界面制定工藝,如果已經(jīng)制定則能夠顯示其工藝內(nèi)容。經(jīng)過多次測試,證明該模塊已經(jīng)具備了以上能力。
(2) 限制
由于設計人員水平的限制,采用樹形結構導航時,沒做到把樹結構做到無窮級數(shù)展開,有待于進一步提高。
7.功能7
(1) 能力
工藝文件管理模塊主要具有工藝、打開工藝、工藝提取、工藝預覽、工藝打印的能力,經(jīng)過多次測試后,證明該模塊已經(jīng)具備了以上能力。
8. 功能8
(1) 能力
工序文件管理模塊已經(jīng)具備了新建工序卡片和顯示已經(jīng)保存的工序卡片的能力,經(jīng)反復測試后,證明該模塊已經(jīng)具備了以上能力。
9. 功能9
(1) 能力
工藝數(shù)據(jù)管理模塊主要是對典型工藝數(shù)據(jù)維護、知識庫管理、切削用量和加工余量庫查詢。經(jīng)過多次測試后,證明該模塊已經(jīng)具備了以上能力。
10.功能10
(1) 能力
工藝設計管理模塊主要是實現(xiàn)基于實例的工藝生成和基于模板的實例生成、工藝路線的查詢的能力。
(2)由于開發(fā)設計時間和自身水平的限制,還未能實現(xiàn)基于特征的工藝生成的能力,有待于進一步提高。
11.功能11
(1) 能力
系統(tǒng)查詢模塊主要是用來查詢基礎資源庫中的信息,經(jīng)過測試后已具備了此能力。
(2) 限制
由于開發(fā)者本身對ACTIVEFORM以及網(wǎng)絡發(fā)布了解不夠,還未能把用Delphi制作的網(wǎng)頁發(fā)布到服務器上,以達到基于WEB的查詢能力。
五評價
1. 能力
經(jīng)測試已證實了本軟件的能力。
2. 缺陷與限制
經(jīng)測試證實的軟件缺陷和限制已經(jīng)在測試結果和發(fā)現(xiàn)中交代過,綜合以上的缺陷和限制,對本軟件存在著一定程度的影響。
六測試總結
通過此次測試,基于PDM的CAPP系統(tǒng)得到了很大的改進,但要消耗了測試人員很大的時間,設計人員更是消耗了大量的機時才使系統(tǒng)性能有了一定的提高,不過通過測試后,對于軟件本身來說是必不可少的工作,有利于系統(tǒng)性能的改進。
unit xjgy;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Grids, DBGrids, StdCtrls, OleCtrls, VOLOVIEWXLib_TLB,
Buttons, ExtCtrls,shellapi, Menus, DB, ADODB;
type
Tl_xjgy = class(TForm)
StatusBar1: TStatusBar;
Splitter2: TSplitter;
Splitter1: TSplitter;
SaveDialog1: TSaveDialog;
ADOQuery8: TADOQuery;
ADOQuery7: TADOQuery;
ADOQuery6: TADOQuery;
ADOQuery5: TADOQuery;
ADOQuery4: TADOQuery;
ADOQuery3: TADOQuery;
DataSource1: TDataSource;
ADOQuery2: TADOQuery;
ADOQuery1: TADOQuery;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
Panel3: TPanel;
Splitter3: TSplitter;
Splitter4: TSplitter;
Panel4: TPanel;
Panel7: TPanel;
SpeedButton2: TSpeedButton;
SpeedButton1: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton3: TSpeedButton;
Panel8: TPanel;
AvViewX1: TAvViewX;
Panel5: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Panel6: TPanel;
DBGrid1: TDBGrid;
Panel2: TPanel;
Panel9: TPanel;
Label6: TLabel;
Panel10: TPanel;
Panel11: TPanel;
Label7: TLabel;
Label8: TLabel;
Edit7: TEdit;
Edit8: TEdit;
Panel12: TPanel;
Label4: TLabel;
Label5: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Panel1: TPanel;
TreeView1: TTreeView;
TreeView2: TTreeView;
TreeView3: TTreeView;
TreeView4: TTreeView;
TreeView5: TTreeView;
TreeView6: TTreeView;
OpenDialog1: TOpenDialog;
N3: TMenuItem;
N4: TMenuItem;
ADOQuery9: TADOQuery;
ADOQuery10: TADOQuery;
Label9: TLabel;
Label10: TLabel;
Edit6: TEdit;
Edit9: TEdit;
ADOQuery8DSDesigner: TIntegerField;
ADOQuery8DSDesigner2: TIntegerField;
ADOQuery8DSDesigner3: TStringField;
ADOQuery8DSDesigner4: TStringField;
ADOQuery8DSDesigner5: TStringField;
ADOQuery8DSDesigner6: TStringField;
ADOQuery8DSDesigner7: TStringField;
ADOQuery8DSDesigner8: TStringField;
ADOQuery8DSDesigner9: TStringField;
ADOQuery8DSDesigner10: TStringField;
ADOQuery8DSDesigner11: TFloatField;
ADOQuery8DSDesigner12: TStringField;
ADOQuery8DSDesigner13: TStringField;
ADOQuery8DSDesigner14: TStringField;
ADOQuery8DSDesigner15: TStringField;
ADOQuery8DSDesigner16: TStringField;
ADOQuery8DSDesigner17: TStringField;
ADOQuery8DSDesigner18: TStringField;
ADOQuery8DSDesigner19: TStringField;
ADOQuery8DSDesigner20: TStringField;
tuxing2: TBlobField;
ADOQuery2DSDesigner: TIntegerField;
ADOQuery2DSDesigner2: TIntegerField;
ADOQuery2DSDesigner3: TStringField;
ADOQuery2DSDesigner4: TStringField;
ADOQuery2DSDesigner5: TStringField;
ADOQuery2DSDesigner6: TStringField;
ADOQuery2DSDesigner7: TStringField;
ADOQuery2DSDesigner8: TStringField;
ADOQuery2DSDesigner9: TStringField;
ADOQuery2DSDesigner10: TStringField;
ADOQuery2DSDesigner11: TFloatField;
ADOQuery2DSDesigner12: TStringField;
ADOQuery2DSDesigner13: TStringField;
ADOQuery2DSDesigner14: TStringField;
ADOQuery2DSDesigner15: TStringField;
ADOQuery2DSDesigner16: TStringField;
ADOQuery2DSDesigner17: TStringField;
ADOQuery2DSDesigner18: TStringField;
ADOQuery2DSDesigner19: TStringField;
ADOQuery2DSDesigner20: TStringField;
tuxing: TBlobField;
procedure FormCreate(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure TreeView2Change(Sender: TObject; Node: TTreeNode);
procedure TreeView3Change(Sender: TObject; Node: TTreeNode);
procedure TreeView4Change(Sender: TObject; Node: TTreeNode);
procedure TreeView5Change(Sender: TObject; Node: TTreeNode);
procedure TreeView6Change(Sender: TObject; Node: TTreeNode);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure LoadgcmcTREE;
procedure LoadgcnrTREE;
procedure LoadjckTREE;
procedure LoadjjkTREE;
procedure LoaddjkTREE;
procedure LoadljkTREE;
end;
var
l_xjgy: Tl_xjgy;
tup,wjj:string;
implementation
uses unit1;
{$R *.dfm}
procedure Tl_xjgy.FormCreate(Sender: TObject);
var
i,ss:integer;
serveString: string;
begin
wjj:=GetCurrentDir;
//下面一部分是動態(tài)連接數(shù)據(jù)庫
adoquery1.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 工序名稱庫') ;
adoquery1.open;
adoquery2.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select * from 機械加工工藝過程卡片') ;
adoquery2.open;
adoquery3.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery3.SQL.Clear;
adoquery3.SQL.Add('select * from 工序內(nèi)容') ;
adoquery3.open;
adoquery4.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery4.SQL.Clear;
adoquery4.SQL.Add('select * from 機床庫') ;
adoquery4.open;
adoquery5.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery5.SQL.Clear;
adoquery5.SQL.Add('select * from 夾具庫') ;
adoquery5.open;
adoquery6.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery6.SQL.Clear;
adoquery6.SQL.Add('select * from 刀具庫') ;
adoquery6.open;
adoquery7.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery7.SQL.Clear;
adoquery7.SQL.Add('select * from 量具庫') ;
adoquery7.open;
adoquery8.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery8.SQL.Clear;
adoquery8.SQL.Add('select * from 機械加工工藝過程卡片2') ;
adoquery8.open;
adoquery9.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery9.SQL.Clear;
adoquery9.SQL.Add('select * from 零件名稱匯總') ;
adoquery9.open;
adoquery10.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(form1.Edit4.Text)+';Persist Security Info=True;User ID=sa;Initial Catalog=bysjcapp;Data Source='+trim(form1.Edit3.Text)+'';
adoquery10.SQL.Clear;
adoquery10.SQL.Add('select * from 零件工藝匯總') ;
adoquery10.open;
LoadgcnrTREE;
LoadjckTREE;
LoadjjkTREE;
LoaddjkTREE;
LoadljkTREE;
LoadgcmcTREE;
treeview1.Visible:=true;
treeview2.Visible:=false;
treeview3.Visible:=false;
treeview4.Visible:=false;
treeview5.Visible:=false;
treeview6.Visible:=false;
adoquery2.First;
while not adoquery2.Eof do
begin
adoquery2.Delete;
end;
ss:=10;
for i:=1 to 15 do
begin
adoquery2.Append;
adoquery2['工序標志']:=ss;
adoquery2.Post;
ss:=ss+10;
end;
adoquery2.Active:=false;
adoquery2.Active:=true;
//改變網(wǎng)格大小
dbgrid1.Columns[0].Width:=50;
dbgrid1.Columns[1].Width:=100;
dbgrid1.Columns[2].Width:=100;
dbgrid1.Columns[3].Width:=60;
dbgrid1.Columns[4].Width:=60;
dbgrid1.Columns[5].Width:=70;
dbgrid1.Columns[6].Width:=70;
dbgrid1.Columns[7].Width:=70;
dbgrid1.Columns[8].Width:=70;
dbgrid1.Columns[9].Width:=60;
end;
procedure Tl_xjgy.LoadgcmcTREE;
var
RootNode, CatNode : TTreeNode;
Category : string;
begin
treeview1.Items.Clear;
RootNode := treeview1.Items.Add( nil, '工序名稱' );
RootNode.ImageIndex := 0; { Specify which bitmap to use }
RootNode.SelectedIndex := 0;
adoquery1.First;
while not adoquery1.Eof do
begin
Category := adoquery1.fieldbyname('工序名稱').AsString;
CatNode := treeview1.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
adoquery1.Next;
end;
end;
procedure Tl_xjgy.LoadgcnrTREE;
var
RootNode, CatNode : TTreeNode;
Category : string;
begin
treeview2.Items.Clear;
RootNode := treeview2.Items.Add( nil, '工序內(nèi)容' );
RootNode.ImageIndex := 0; { Specify which bitmap to use }
RootNode.SelectedIndex := 0;
adoquery3.First;
while not adoquery3.Eof do
begin
Category := adoquery3.fieldbyname('工序內(nèi)容').AsString;
CatNode := treeview2.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
adoquery3.Next;
end;
end;
procedure Tl_xjgy.LoadjckTREE;
var
RootNode, TipNode, CatNode : TTreeNode;
ss,Category,jidian : string;
begin
treeview3.Items.Clear;
adoquery4.First;
while not adoquery4.Eof do
begin
if (adoquery4['機床標志1']=0) and (adoquery4['機床標志2']=0) and (adoquery4['機床標志3']=0)then
begin
ss:=adoquery4['機床名稱'];
RootNode := treeview3.Items.Add( nil, ss );
RootNode.ImageIndex := 0; { Specify which bitmap to use }
RootNode.SelectedIndex := 0;
end;
if (adoquery4['機床標志1']=0) and (adoquery4['機床標志2']=0) and (adoquery4['機床標志3']=1)then
begin
Category := adoquery4.fieldbyname('機床分類').AsString;
CatNode := treeview3.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
end;
if (adoquery4['機床標志1']=1) and (adoquery4['機床標志2']=1) and (adoquery4['機床標志3']=1)then
begin
jidian := adoquery4.fieldbyname('機床型號').AsString;
tipNode := treeview3.Items.addchild( catnode,jidian );
tipNode.ImageIndex := 5;
tipNode.SelectedIndex := 2;
end;
adoquery4.Next;
end;
end;
procedure Tl_xjgy.LoadjjkTREE;
var
RootNode, TipNode, CatNode : TTreeNode;
ss,Category,jidian : string;
begin
treeview4.Items.Clear;
adoquery5.First;
while not adoquery5.Eof do
begin
if (adoquery5['夾具標志1']=0) and (adoquery5['夾具標志2']=0) and (adoquery5['夾具標志3']=0)then
begin
ss:=adoquery5['夾具總稱'];
RootNode := treeview4.Items.Add( nil, ss );
RootNode.ImageIndex := 0; { Specify which bitmap to use }
RootNode.SelectedIndex := 0;
end;
if (adoquery5['夾具標志1']=0) and (adoquery5['夾具標志2']=0) and (adoquery5['夾具標志3']=1)then
begin
Category := adoquery5.fieldbyname('夾具分類').AsString;
CatNode := treeview4.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
end;
if (adoquery5['夾具標志1']=1) and (adoquery5['夾具標志2']=1) and (adoquery5['夾具標志3']=1)then
begin
jidian := adoquery5.fieldbyname('夾具名稱').AsString;
tipNode := treeview4.Items.addchild( catnode,jidian );
tipNode.ImageIndex := 5;
tipNode.SelectedIndex := 2;
end;
adoquery5.Next;
end;
end;
procedure Tl_xjgy.LoaddjkTREE;
var
RootNode,CatNode : TTreeNode;
ss,Category : string;
begin
treeview5.Items.Clear;
adoquery6.First;
while not adoquery6.Eof do
begin
if (adoquery6['刀具標志1']=0) and (adoquery6['刀具標志2']=1) then
begin
ss:=adoquery6['刀具名稱'];
RootNode := treeview5.Items.Add( nil, ss );
RootNode.ImageIndex := 0; { Specify which bitmap to use }
RootNode.SelectedIndex := 0;
end;
if (adoquery6['刀具標志1']=1) and (adoquery6['刀具標志2']=0) then
begin
Category := adoquery6.fieldbyname('刀具規(guī)格').AsString;
CatNode := treeview5.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
end;
adoquery6.Next;
end;
end;
procedure Tl_xjgy.LoadljkTREE;
var
RootNode, CatNode : TTreeNode;
ss,Category : string;
begin
treeview6.Items.Clear;
adoquery7.First;
while not adoquery7.Eof do
begin
if (adoquery7['量具標志1']=0) and (adoquery7['量具標志2']=1) then
begin
ss:=adoquery7['量具名稱'];
RootNode := treeview6.Items.Add( nil, ss );
RootNode.ImageIndex := 0; { Specify which bitmap to use }
RootNode.SelectedIndex := 0;
end;
if (adoquery7['量具標志1']=1) and (adoquery7['量具標志2']=0) then
begin
Category := adoquery7.fieldbyname('量具規(guī)格').AsString;
CatNode := treeview6.Items.AddChild( RootNode, Category );
CatNode.ImageIndex := 5;
CatNode.SelectedIndex := 2;
end;
adoquery7.Next;
end;
end;
procedure Tl_xjgy.SpeedButton3Click(Sender: TObject);
begin
close;
end;
procedure Tl_xjgy.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (DBGrid1.SelectedIndex = 1) then
begin
//調(diào)用相應樹形結構
treeview1.Visible:=true;
treeview2.Visible:=false;
treeview3.Visible:=false;
treeview4.Visible:=false;
treeview5.Visible:=false;
treeview6.Visible:=false;
end;
if (DBGrid1.SelectedIndex = 2) then
begin
treeview2.Visible:=true;
treeview1.Visible:=false;
treeview3.Visible:=false;
treeview4.Visible:=false;
treeview5.Visible:=false;
treeview6.Visible:=false;
end;
if (DBGrid1.SelectedIndex = 5) then
begin
treeview3.Visible:=true;
treeview2.Visible:=false;
treeview1.Visible:=false;
treeview4.Visible:=false;
treeview5.Visible:=false;
treeview6.Visible:=false;
end;
if (DBGrid1.SelectedIndex = 6) then
begin
treeview4.Visible:=true;
treeview2.Visible:=false;
treeview3.Visible:=false;
treeview1.Visible:=false;
treeview5.Visible:=false;
treeview6.Visible:=false;
end;
if (DBGrid1.SelectedIndex = 7) then
begin
treeview5.Visible:=true;
treeview2.Visible:=false;
treeview3.Visible:=false;
treeview4.Visible:=false;
treeview1.Visible:=false;
treeview6.Visible:=false;
end;
if (DBGrid1.SelectedIndex = 8) then
begin
treeview6.Visible:=true;
treeview2.Visible:=false;
treeview3.Visible:=false;
treeview4.Visible:=false;
treeview5.Visible:=false;
treeview1.Visible:=false;
end;
end;
procedure Tl_xjgy.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 1) then
begin
adoquery2.Edit;
adoquery2['工序名稱']:=TreeView1.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.TreeView2Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 2) then
begin
adoquery2.Edit;
adoquery2['工序內(nèi)容']:=TreeView2.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.TreeView3Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 5) then
begin
adoquery2.Edit;
adoquery2['機床設備']:=TreeView3.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.TreeView4Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 6) then
begin
adoquery2.Edit;
adoquery2['夾具設備']:=TreeView4.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.TreeView5Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 7) then
begin
adoquery2.Edit;
adoquery2['刀具設備']:=TreeView5.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.TreeView6Change(Sender: TObject; Node: TTreeNode);
begin
if (DBGrid1.SelectedIndex = 8) then
begin
adoquery2.Edit;
adoquery2['量具設備']:=TreeView6.Selected.Text;
adoquery2.Post;
end;
end;
procedure Tl_xjgy.N1Click(Sender: TObject);
begin
avviewx1.ClearMarkup ;
if opendialog1.Execute then
begin
tup:=opendialog1.filename;
end;
avviewx1.src :=tup ;
if tup<>'' then
begin
avviewx1.Visible:=true;
end
else begin end;
end;
procedure Tl_xjgy.N2Click(Sender: TObject);
begin
avviewx1.ClearMarkup;
avviewx1.Visible:=false;
end;
procedure Tl_xjgy.SpeedButton6Click(Sender: TObject);
var
s:integer;
begin
adoquery2.Last;
s:=adoquery2['工序標志'];
adoquery2.Append;
s:=s+10;
adoquery2['工序標志']:=s;
end;
procedure Tl_xjgy.SpeedButton4Click(Sender: TObject);
var
aa,bb:integer;
begin
try
begin
aa:=adoquery2['工序標志'];
aa:=aa-1;
adoquery2.Prior;
bb:=adoquery2['工序標志'];
adoquery2.Insert;
if aa=bb then
begin
bb:=bb-1;
adoquery2['工序標志']:=bb;
end else adoquery2['工序標志']:=aa;
adoquery2.Post;
end
except showmessage('請將指針上移,謝謝');
end;
adoquery2.Active:=false;
adoquery2.Active:=true;
end;
procedure Tl_xjgy.SpeedButton5Click(Sender: TObject);
begin
adoquery2.delete;
adoquery2.Refresh;
end;
procedure Tl_xjgy.SpeedButton1Click(Sender: TObject);
begin
if (edit4.Text<>'')and (edit8.Text<>'') then
begin
if MessageDlg('是否要提交?',mtConfirmation, [mbYes, mbNo], 0 )=mryes then
begin
adoquery2.Refresh;
adoquery2.First;
adoquery2.Edit;
adoquery2['產(chǎn)品名稱']:=edit4.Text;
adoquery2['產(chǎn)品型號']:=edit7.Text;
adoquery2['零件圖號']:=edit5.Text;
adoquery2['零件名稱']:=edit8.Text;
adoquery2['編制日期']:=edit1.Text;
adoquery2['校對日期']:=edit2.Text;
adoquery2['審核日期']:=edit3.Text;
adoquery2['材料牌號']:=edit6.Text;
adoquery2['毛坯種類']:=edit9.Text;
tuxing.LoadFromFile(tup) ;
adoquery2.Post;
adoquery9.Append;
adoquery9['零件名稱']:=edit8.Text;
adoquery9.Post;
adoquery2.First;
repeat
begin
adoquery10.Append;
adoquery10['零件名稱']:=edit8.Text;
adoquery10['產(chǎn)品名稱']:=adoquery2['產(chǎn)品名稱'];
adoquery10['產(chǎn)品型號']:=adoquery2['產(chǎn)品型號'];
adoquery10['零件圖號']:=adoquery2['零件圖號'];
adoquery10['編制日期']:=adoquery2['編制日期'];
adoquery10['校對日期']:=adoquery2['校對日期'];
adoquery10['審核日期']:=adoquery2['審核日期'];
adoquery10['材料牌號']:=adoquery2['材料牌號'];
adoquery10['毛坯種類']:=adoquery2['毛坯種類'];
adoquery10['圖形']:=adoquery2['圖形'];
adoquery10['工序號']:=adoquery2['工序號'];
adoquery10.fieldbyname('工序名稱').AsString:=adoquery2.fieldbyname('工序名稱').AsString;
adoquery10.fieldbyname('工序內(nèi)容').AsString:=adoquery2.fieldbyname('工序內(nèi)容').AsString;
adoquery10.fieldbyname('車間').AsString:=adoquery2.fieldbyname('車間').AsString;
adoquery10.fieldbyname('工段').AsString:=adoquery2.fieldbyname('工段').AsString;
adoquery10.fieldbyname('機床設備').AsString:=adoquery2.fieldbyname('機床設備').AsString;
adoquery10.fieldbyname('夾具設備').AsString:=adoquery2.fieldbyname('夾具設備').AsString;
adoquery10.fieldbyname('刀具設備').AsString:=adoquery2.fieldbyname('刀具設備').AsString;
adoquery10.fieldbyname('量具設備').AsString:=adoquery2.fieldbyname('量具設備').AsString;
adoquery10.fieldbyname('單件工時').AsString:=adoquery2.fieldbyname('單件工時').AsString;
adoquery10.Post;
adoquery2.Next;
end;
until adoquery2.Eof;
showmessage('提交成功!');
speedbutton1.Enabled:=false;
end;
end else showmessage('請輸入產(chǎn)品和零件名稱!');
end;
procedure Tl_xjgy.SpeedButton2Click(Sender: TObject);
var
filename:string;
begin
adoq
收藏