彩色電視機故障信息管理系統論述_第1頁
彩色電視機故障信息管理系統論述_第2頁
彩色電視機故障信息管理系統論述_第3頁
彩色電視機故障信息管理系統論述_第4頁
彩色電視機故障信息管理系統論述_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、n更多企業學院: 中小企業管理全能版183套講座+89700份資料總經理、高層管理49套講座+16388份資料中層管理學院46套講座+6020份資料 國學智慧、易經46套講座人力資源學院56套講座+27123份資料各階段員工培訓學院77套講座+ 324份資料員工管理企業學院67套講座+ 8720份資料工廠生產管理學院52套講座+ 13920份資料財務管理學院53套講座+ 17945份資料 銷售經理學院56套講座+ 14350份資料銷售人員培訓學院72套講座+ 4879份資料 彩色電視機故障信息管理系統(客戶端)The MIS fo TV applying in failur

2、e information學生:全俊林 指導教師:龔迪琛摘 要本文介紹了如何使用Visual C+.0編程制作以彩色電視機故障信息管理系統(客戶端部分)為例,實現信息管理的自動化。由此實現了信息的增加、刪除、修改、查看等功能,并且進而實現信息的安全管理,使信息的管理更加人性化,規范化。集計算機技術、網絡通信技術為一體的信息管理系統。采用先進有效的管理體制,可以改善企業的經營環境、降低經營生產成本,提高企業的競爭力;使得企業的運行數據更加準確、及時、全面、詳實,同時對各種信息進一步加工,使企業領導層的決策依據充分,更具科學性,從而提高故障排除效率,提高信息利用率,有助于進一步提高了生產效率,使企

3、業的管理水平跨上新臺階,為企業持續、健康、穩定的發展打下基礎。AbstractThe main work of this paper is introduce how to use Visual C+.0programming a Color TV Malfunction-Information In-Common System, achieve the auto-manage of the Malfunction-Information. According these, this system achieves the informations function of add、delete

4、、edit and view., it also get the information managed safety, so the management of the information will be more humanity & normalize.Thereby, it can improve the efficiency of the malfunctions elimination, enhance the exploitation of the information, and also help improving the efficiency of the p

5、roduce by a large step. 關鍵詞: 數據庫 信息管理 模塊化管理 MIS信息管理系統 目錄1.緒論1.1 前言信息化建設對企業來說無疑已經成為企業在現代競爭社會中立足的重要因素。而從中國大陸企業現狀來看,大部分企業的信息化建設都是依靠專業化軟件公司。毋庸置疑,對于大規模的管理系統,例如CRM(Client Relation Manager),ERP(Enterprise Resource Plan)等,使用專業軟件公司開發的產品,功能相對齊全,安全級別也相對較高。但對于企業內部小范圍內所需的一些小系統而言,如也依靠此種方式,勢必會產生無謂的成本流失。鑒于這種形式,借助這次

6、畢業設計的機會,在龔迪琛教師的指導下,經過一段時間的努力,開發出了這套彩色電視機故障信息管理系統(客戶端部分)。本系統主要用于對已有故障信息進行更高效的管理,提高信息的利用率,改變了以往煩瑣的查找,大大提高了故障的排除速度及正確率,對進一步提高生產及管理效率具有十分重要的意義。1.2 課題背景 目標 研究方法 (1)背景隨著中國加入WTO,競爭也越來越慘烈,中國的制造業同樣面臨者巨大的挑戰。科學技術的飛速發展,產品功能要求的日益增多,復雜性增加,壽命期縮短,更新換代速度加快。然而,產品的管理,尤其是機械產品方案的遠程管理手段,則顯得力不從心,跟不上時代發展的需要。目前,機械產品遠程管理已得到了

7、比較廣泛和深入的研究,并初見成效,企業中龐大的激烈變化的產品數據僅僅依靠手工方式來管理是很難做到準確性、完整性、及時性和可追溯性的要求的。因此,將企業產品塊化的管理創新成果與信息系統的建設結合起來是很好的解決方案。模塊化的產品遠程管理可以在保持產品較高通用性的同時提供產品的多樣化配置和服務,因此,機械產品遠程管理方案應該得到進一步的研究和開發。在這里以彩色電視機故障信息管理系統(客戶端部分)作為研究對象。(2)目標設計(主要研究內容或創新點)本著提高效率降低成本為出發點,以彩色電視機故障信息管理為具體范例,探討對企業產品信息管理MIS系統的開發,并增加遠程管理功能,使生產工程部的故障處理工作系

8、統化,規范化。(3) 研究方法與技術路線及預期結果本課題為應用型管理系統的開發,嘗試增加遠程管理功能,采用小型DBMS(數據庫管理系統)ACESS,通過TCP/IP協議利用winsockect結合,DAO或者ADO與關系數據的接口實現產品信息的管理,查詢,整理等工作。 本部分為客戶端部分。1.3 主要完成工作及要求(1)盡量采用生產工程部現有的軟硬件環境及齊全的故障信息,從而達到充分利用現有資源,提高系統開發水平和應用效果的目的。(2)系統應符合生工部資料管理規范,符合普通員工操作的規范,達到操作過程中的直觀、方便、實用、安全等要求。(3)系統采用Visual C+6.0環境,用ADO(Act

9、iveX Data Objects)數據訪問方式,采用Microsoft Access 2003作為數據源,使整個系統易于使用及維護。(4)系統采用模塊化程序設計方法,既便于系統功能的各種組合和修改,又便于未參與開發的技術維護人員補充、維護。(5)系統應具備數據維護功能,及時根據數據變化進行添加、刪除、修改、查詢等操作,并加入擁護權限功能,以及遠程管理功能,使系統更加安全適用。2MIS系統設計及功能分析介紹2.1 MIS系統介紹所謂MIS(管理信息系統-Management Information System)系統 ,是一個由人、計算機及其他外圍設備等組成的能進行信息的收集、傳遞、存貯、加工

10、、維護和使用的系統。是一門新興的科學,其主要任務是最大限度的利用現代計算機及網絡通訊技術加強企業的信息管理,通過對企業擁有的人力、物力、財力、設備、技術等資源的調查了解,建立正確的數據,加工處理并編制成各種信息資料及時提供給管理人員,以便進行正確的決策,不斷提高企業的管理水平和經濟效益。目前,企業的計算機網絡已成為企業進行技術改造及提高企業管理水平的重要手段。隨著我國與世界信息高速公路的接軌,企業通過計算機網絡獲得信息必將為企業帶來巨大的經濟效益和社會效益,企業的辦公及管理都將朝著高效、快速、無紙化的方向發展。MIS系統通常用于系統決策,例如,可以利用MIS系統找出目前迫切需要解決的問題,并將

11、信息及時反饋給上層管理人員,使他們了解當前工作發展的進展或不足。換句話說,MIS系統的最終目的是使管理人員及時了解公司現狀,把握將來的發展路徑。 一個完整的MIS應包括:輔助決策系統(DSS)、工業控制系統(IPC)、辦公自動化系統(OA)以及數據庫、模型庫、方法庫、知識庫和與上級機關及外界交換信息的接口。其中,特別是辦公自動化系統(OA)、與上級機關及外界交換信息等都離不開Intranet的應用。可以這樣說,現代企業MIS不能沒有Intranet,但Intranet的建立又必須依賴于MIS的體系結構和軟硬件環境。傳統的MIS系統的核心是CS(Client/Server客戶端/服務器)架構,而

12、基于Internet的MIS系統的核心是BS(Browser/Server瀏覽器/服務器)架構。BS架構比起CS架構有著很大的優越性,傳統的MIS系統依賴于專門的操作環境,這意味著操作者的活動空間受到極大限制;而BS架構則不需要專門的操作環境,在任何地方,只要能上網,就能夠操作MIS系統,這其中的優劣差別是不言而喻的。基于Internet上的MIS系統是對傳統MIS系統概念上的擴展,它不僅可以用于高層決策,而且可以用于進行普通的商務管理。通過用戶的具名登錄(或匿名登錄),以及相應的權限控制,可以實現在遠端對系統的瀏覽、查詢、控制和審閱。隨著Internet的擴展,現有的公司和學校不再局限于物理

13、的有形的真實的地域,網絡本身成為事實上發展的空間。基于Internet上的MIS系統,彌補了傳統MIS系統的不足,充分體現了現代網絡時代的特點。隨著Internet技術的高速發展,因特網必將成為人類新社會的技術基石。基于Internet的MIS系統必將成為網絡時代的新一代管理信息系統,前景極為樂觀。2.2 系統設計及功能分析通過一個彩電故障信息管理系統,使生產工程部客戶端部分的故障處理工作模塊化,系統化,規范化,自動化,從而達到提高故障排除效率,提高信息利用率的目的。本系統功能分析是在系統開發總體任務的基礎上完成的,本系統需要完成的功能如下:l 故障信息的輸入、查詢、修改、刪除l 故障信息的打

14、印l 系統用戶管理,權限管理2.3 功能模塊設計在系統功能分析的基礎上,考慮Visual C+程序編制的特點,得到圖1所示的系統功能模塊圖。增加新信息信息數據彩電故障信息共享系統 信息變動管理員信息管理修改新信息權限驗證打印管理系統管理 刪除新信息 查 詢信息查詢用戶權限增加刪除修改 圖1系統功能模塊圖 圖2數據流程3. 數據庫設計及ADO訪問數據庫3.1 數據庫設計過程數據庫技術是信息資源管理最有效的手段。數據庫設計是指對于一個給定的應用環境,構造最優的數據庫模式,建立數據庫及其應用系統,有效存儲數據,滿足用戶信息要求和處理要求。數據庫設計中需求分析階段綜合各個用戶的應用需求(現實世界的需求

15、),在概念設計階段形成獨立于機器特點、獨立于各個DBMS產品的概念模式(信息世界模型),用E-R圖來描述。在邏輯設計階段將E-R圖轉換成具體的數據庫產品支持的數據模型如關系模型,形成數據庫邏輯模式。然后根據用戶處理的要求,安全性的考慮,在基本表的基礎上再建立必要的視圖(VIEW)形成數據的外模式。在物理設計階段根據DBMS特點和處理的需要,進行物理存儲安排,設計索引,形成數據庫內模式。數據結構的好壞將直接影響到系統的效率以及實現的效果。好的數據庫結構會減少數據庫的存儲量、冗余度,數據的完整性和一致性比較高,系統具有較快的響應速度,簡化基于數據庫的應用程序的實現方法等,一般可將數據庫結構設計分為

16、四個階段,即需求分析、概念結構設計、邏輯結構設計和物理設計。(1)數據庫需求分析需求分析的任務是具體了解應用環境,了解與分析用戶對數據和數據處理的需求,對應用系統的性能的要求,提出新系統的目標,為第二階段、第三階段的設計奠定基礎。在仔細研究資料管理過程的基礎上,歸納出系統的數據流程圖如上圖2所示,所有數據均由管理員輸入管理。根據圖2的數據流程圖,可得到所須設計的數據項和數據結構如下:l 故障信息,包括的數據項有顯象管、機芯、機殼、器件、技術員、時間、其他、信息名、具體內容等。l 權限驗證,包括的數據項有用戶名、密碼等。由上分析,為此需要有2個數據表分別用來存放故障信息的用戶信息。這兩個數據表均

17、用Access 2000實現。Access中的設計視圖如圖3、圖4所示,其中數據類型根據具體的數據字段來設置。圖3 info1視圖圖4 login視圖(2)數據庫概念結構設計概念模型用于信息世界的建模。概念模型不依賴于某一個DBMS支持的數據模型。概念模型可以轉換為計算機上某一DBMS支持的特定數據模型。概念結構設計是在需求分析的基礎上對所有數據要求按一定方法進行抽象與綜合處理,設計出不依賴于某種具體DBMS的滿足用戶應用需求的信息結構。這種信息結構我們稱為概念模型。通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型,可以用E-R圖表示,概念模型特點: (1) 

18、具有較強的語義表達能力,能夠方便、直接地表達應用中的各種語義知識。  (2) 應簡單、清晰、易于用戶理解,是用戶與數據庫設計人員之間進行交流的語言。 最常用的概念結構設計方法有實體分析法、面向對象設計方法、屬性綜合法和規范化關系方法。我們此處主要討論實體分析法。這是一種自上而下抽象的方法。這種方法要求根據前面數據的需求分析,確定系統范圍,確定實體及其屬性,畫出系統的實體聯系模型(ER圖)。在分析需求的基礎上,我們得到整個系統的E-R圖。3.2 創建應用程序本彩電故障信息共享系統采用Visual C+ 6.0的ADO方法開發。工程創建具體步驟如下:(1) 打開Visual C

19、+后,選擇菜單“”中的“Project”選項卡中的“MFC AppWizard exe”,設置工程名字為“CaidianGuzhang”,選擇存儲位置,單擊“OK”。(2) 創建一個單文檔應用程序,在Step1中,選擇“Single Document”,然后單擊“Next”按扭,進入“Step 2 of 6”。(3) 一直單擊“Next”按扭,直到進入“Step 6 of 6”。因為為了能使數據更直觀,我們采用列表形式,所以需要在本步驟中,選擇CCaidianGuzhangView類的Base Class(基類)為ClistView。然后單擊“Finish”,最后將出現確認窗口,如圖6所示,檢

20、查無誤后,單擊“確定”,即可完成工程創建。圖6 確認(4) 為了使程序能支持ADO數據庫對象,以使程序能正確的調用數據庫,應該在頭文件stdafx.h中加入 #import "c:Program FilesCommon FilesSystemadomsado15.dll" rename_namespace("AdoNS") rename("EOF","adoEOF")using namespace AdoNS; 導入ADO庫并在主程序入口:BOOL CCaidianGuzhangApp:InitInstance()

21、中加入AfxOleInit();初始化COM環境。ADO類的定義是作為一種資源存儲在ADO DLL(msado15.dll)中,在其內部稱為類型庫。類型庫描述了自治接口,以及C使用的COM vtable接口。當使用import指令時,在運行時Visual C需要從ADO DLL中讀取這個類型庫,并以此創建一組C頭文件。ADO庫包含三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用來創建一個數據連接或執行一條不返回任何結果的SQL語句,如一個存儲過程。_CommandPtr返回一個記錄集。它提供了一種簡單的方法來執

22、行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。 _RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定、游標控制等。3.3 數據庫操作準備(1) 初始化接口: initialDbConnect(CString mdbname)在本系統中通過建立一個數據庫類class DatabaseOperate 來實現整個信息系統對數據的操作,下面是對其提供的主要接口的設計:該接口函數的作用是初始化連接數據源。BOOL Databas

23、eOperate:InitialDbConnect(CString mdbname) m_pConnection.CreateInstance(_uuidof(Connection);/先連接數據庫CString strConnect;BSTR bstrSQL;strConnect.Format(_T("Provider = Microsoft.JET.OLEDB.4.0; Data ource=%s"),mdbname);bstrSQL = strConnect.AllocSysString();AfxMessageBox(e.ErrorMessage();return

24、false; return true; 該接口的主要功能是連接我們在Access 2003中設計的數據源,CString mdbname變量作為數據庫文件mdb的名稱,由調用 DatabaseOperate 類的主程序給出。在本設計中是“info1.mdb”(2)執行查詢,修改,添加,刪除等功能的接口函數的設計BOOL DatabaseOperate:ExecuteSQLEx(CString strSQL)_variant_t RecordsAffected;/_bstr_t bstrSql(strSQL);try m_pConnection->Execute(bstrSql,&

25、RecordsAffected,adCmdText);catch (_com_error e)AfxMessageBox(e.ErrorMessage();return FALSE; return TRUE; 通過執行一條SQL語句來實現數據庫的讀寫操作,其中m_pConnection是我們在調用InitialDbConnect初始化接口時候創建的連接型智能指針,我們可以通過它來執行SQL語句(3) 獲取數據信息接口函數的設計BOOL DatabaseOperate: GetCurrentRecordSet(Recordstruct&result,long Shijiansuoyin,

26、CString tablename)_RecordsetPtr tem_pRecordset;tem_pRecordset.CreateInstance(_uuidof(Recordset);/初始化Recordset指針CString strSql;strSql.Format( _T("select * from %s where sjsy=%d "), tablename, Shijiansuoyin);BSTR bstrSQL = strSql.AllocSysString(); trytem_pRecordset->Open(bstrSQL,(IDispatc

27、h*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); catch (_com_error e)/異常處理AfxMessageBox(e.ErrorMessage();if (tem_pRecordset->State) tem_pRecordset->Close();tem_pRecordset.Release();return FALSE;while(!tem_pRecordset->adoEOF)/遍歷所有記錄 _variant_t v_xxg,v_jx,v_jk, v_qjv_ xxg = tem_pRe

28、cordset->GetCollect(_T("顯象管");v_ jx = tem_pRecordset->GetCollect(_T("機芯");v_ jk = tem_pRecordset->GetCollect(_T("機殼");v_ qj = tem_pRecordset->GetCollect(_T("器件");./獲取各個字段的信息/將各字段信息賦值給result結構體,此處省略tem_pRecordset->MoveNext();/轉到下一條紀錄if (tem_pReco

29、rdset->State) tem_pRecordset->Close();tem_pRecordset.Release();return TRUE;其中參數Recordstruct&result是對查詢結果定義的結構體,與前面我們在數據庫中建立的彩電信息的結構一致:typedef struct _Recordstruct CString xxg ;/顯象管CString jx;/機芯CString qj;/器件CString jsy;/技術員CString sj;/時間CString qita;/其他信息CString sj;/信息名CString qita;/具體內容l

30、ong sjsy;/時間索引Recordstruct,* pRecordstruct;3.4 ADO訪問數據庫(1) 生成應用程序框架并初始化OLE/COM庫環境 創建一個標準的MFC AppWizard(exe)應用程序,然后在使用ADO數據庫InitInstance函數中初始化OLE/COM庫(因為ADO庫是一個COM DLL庫)。創建一個標準的MFC AppWizard(exe)應用程序,然后在使用ADO數據庫的InitInstance函數中初始化OLE/COM庫(因為ADO庫是一個COM DLL庫)。本例為: BOOL CAdotestDlg:OnInitDialog() :CoIni

31、tialize(NULL); /初始化OLE/COM庫環境 程序最后要調用 :CoUninitialize();/釋放程序占用的COM 資源。另外:m_pRecordset->Close(); 注意!不要多次關閉!m_pConnection->Close();m_pRecordset = NULL;m_pConnection = NULL; (2) 引入ADO庫文件 使用ADO前必須在工程的stdafx.h文件最后用直接引入符號import引入ADO庫文件,以使編譯器能正確編譯。ADO類的定義是作為一種資源存儲在ADO DLL(msado15.dll)中,在其內部稱為類型庫。類型庫

32、描述了自治接口,以及C使用的COM vtable接口。當使用import指令時,在運行時Visual C需要從ADO DLL中讀取這個類型庫,并以此創建一組C頭文件。這些頭文件具有.tli 和.tlh擴展名,讀者可以在項目的目錄下找到這兩個文件。在C程序代碼中調用的ADO類要在這些文件中定義。   程序的第三行指示ADO對象不使用名稱空間。在有些應用程序中,由于應用程序中的對象與ADO中的對象之間可能會出現命名沖突,所以有必要使用名稱空間。如果要使用名稱空間,則可把第三行程序修改為: rename_namespace("AdoNS")。第四行代碼將ADO中的EOF

33、(文件結束)更名為adoEOF,以避免與定義了自己的EOF的其他庫沖突。 (3) 利用智能指針進行數據庫操作 在CaboutDlg頭文件中定義兩個ADO智能指針類實例,并在對話框中加入一個ListCtrl。 class CAdotestDlg : public CDialog _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset; ClistCtrl m_List; . ADO庫包含三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用來創建一個數據連接或執

34、行一條不返回任何結果的SQL語句,如一個存儲過程。_CommandPtr返回一個記錄集。它提供了一種簡單的方法來執行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。_RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定、游標控制等。 在使用ADO程序的事件響應中OnButton1加入以下代碼: void CAdotestDlg:OnButton1() m_List.ResetContent(); m_pConnection.

35、CreateInstance(_uuidof(Connection); /初始化Connection指針 m_pRecordset.CreateInstance(_uuidof(Recordset);/初始化Recordset指針 try m_pConnection->Open("DSN=ADOTest","","",0); /連接叫作ADOTest的ODBC數據源 /注意:這是連接不需要用戶ID或密碼的open 函數 / 否則形式為 ->Open("DSN=test;uid=sa;pwd=123;",

36、"","",0); / 執行SQL語句得到一個記錄集把其指針賦值給m_pRecordset CString strSql="select * from middle" BSTR bstrSQL = strSql.AllocSysString(); m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); /adOpenDynamic:動態 adLockOptimistic樂觀封鎖法 adCmdTe

37、xt:文本查詢語句 while(!m_pRecordset->adoEOF)/遍歷所有記錄 /取紀錄字段值方式之一 _variant_t TheValue; /VARIANT數據類型 TheValue = m_pRecordset->GetCollect("BIG_NAME");/得到字段BIG_NAME的值 if(TheValue.vt!=VT_NULL) m_List.AddString(char*)_bstr_t(TheValue); /將該值加入到列表控件中 /取紀錄字段值方式之二 / _bstr_t TheValue1=m_pRecordset->

38、;Fields->GetItem("BIG_NAME")->Value; / CString temp=TheValue1.copy(); / m_List.AddString(temp); /數據類型轉換 _variant_t vUsername,vBirthday,vID,vOld; TRACE("id:%d,姓名:%s,年齡:%d,生日:%srn", vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday); m_pRecordset->

39、MoveNext();/轉到下一條紀錄 m_pRecordset->Close(); m_pConnection->Close(); catch (_com_error e)/異常處理 AfxMessageBox(e.ErrorMessage(); m_pRecordset->Close(); /注意!不要多次關閉!否則會出錯 m_pConnection->Close(); m_pRecordset = NULL; m_pConnection = NULL; 程序中通過_variant_t和_bstr_t轉換COM對象和C類型的數據, _variant_t類封裝了OLE

40、自治VARIANT數據類型。在C+中使用_variant_t類要比直接使用VARIANT數據類型容易得多。好,編譯后該程序就能運行了,但記住運行前要創建一個叫ADOTest的ODBC數據源。該程序將把表middle中的BIG_NAME字段值顯示在列表控件中。(4) 執行SQL命令并取得結果記錄集為了取得結果記錄集,我們定義一個指向Recordset對象的指針:_RecordsetPtr m_pRecordset;并為其創建Recordset對象的實例: m_pRecordset.CreateInstance("ADODB.Recordset");SQL命令的執行可以采用多種

41、形式,下面我們一進行簡單介紹。 1.利用Connection對象的Execute方法執行SQL命令Execute方法的原型如下所示: _RecordsetPtr Connection15:Execute ( _bstr_t CommandText, VARIANT * RecordsAffected,long Options ) 其中CommandText是命令字串,通常是SQL命令。 參數RecordsAffected是操作完成后所影響的行數, 參數Options表示CommandText中內容的類型,Options可以取如下值之一: adCmdText:表明CommandText是文本命令

42、 adCmdTable:表明CommandText是一個表名 adCmdProc:表明CommandText是一個存儲過程 adCmdUnknown:未知 Execute執行完后返回一個指向記錄集的指針。2.利用Command對象來執行SQL命令 _CommandPtr m_pCommand;m_pCommand.CreateInstance("ADODB.Command");_variant_t vNULL;vNULL.vt = VT_ERROR;vNULL.scode = DISP_E_PARAMNOTFOUND;/定義為無參數m_pCommand->Active

43、Connection = m_pConnection;/非常關鍵的一句,將建立的連接賦值給它m_pCommand->CommandText = "SELECT * FROM users"/命令字串m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);/執行命令,取得記錄集。在這段代碼中我們只是用Command對象來執行了SELECT查詢語句,Command對象在進行存儲過程的調用中能真正體現它的作用。3.直接用Recordset對象進行查詢取得記錄集(5)記錄集的遍歷、更新 根據我

44、們剛才通過執行SQL命令建立好的users表,它包含四個字段:ID,username,old,birthday以下的代碼實現:打開記錄集,遍歷所有記錄,刪除第一條記錄,添加三條記錄,移動光標到第二條記錄,更改其年齡,保存到數據庫。 _variant_t vUsername,vBirthday,vID,vOld;_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance("ADODB.Recordset");m_pRecordset->Open("SELECT * FROM users", _vari

45、ant_t(IDispatch*)m_pConnection,true), adOpenStatic, adLockOptimistic, adCmdText);while(!m_pRecordset->adoEOF) vID = m_pRecordset->GetCollect(_variant_t(long)0);/取得第1列的值,從0開始計數, /你也可以直接給出列的名稱,如下一行 vUsername = m_pRecordset->GetCollect("username");/取得username字段的值 vOld = m_pRecordset-

46、>GetCollect("old"); vBirthday = m_pRecordset->GetCollect("birthday"); /在DEBUG方式下的OUTPUT窗口輸出記錄集中的記錄 if(vID.vt != VT_NULL && vUsername.vt != VT_NULL && vOld.vt != VT_NULL && vBirthday.vt != VT_NULL) TRACE("id:%d,姓名:%s,年齡:%d,生日:%srn", vID.lVal

47、, (LPCTSTR)(_bstr_t)vUsername, vOld.lVal, (LPCTSTR)(_bstr_t)vBirthday); m_pRecordset->MoveNext();/移到下一條記錄m_pRecordset->MoveFirst();/移到首條記錄m_pRecordset->Delete(adAffectCurrent);/刪除當前記錄/添加三條新記錄并賦值for(int i=0;i<3;i+) m_pRecordset->AddNew();/添加新記錄 m_pRecordset->PutCollect("ID"

48、;,_variant_t(long)(i+10); m_pRecordset->PutCollect("username",_variant_t("葉利欽"); m_pRecordset->PutCollect("old",_variant_t(long)71); m_pRecordset->PutCollect("birthday",_variant_t("1930-3-15");m_pRecordset->Move(1,_variant_t(long)adBookma

49、rkFirst);/從第一條記錄往下移動一條記錄,即移動到第二條記錄處m_pRecordset->PutCollect(_variant_t("old"),_variant_t(long)45);/修改其年齡m_pRecordset->Update();/保存到庫中 備注:多次查詢可把查詢過程做成一個函數ExecuteSQL讓m_pRecordset獲得連接指針m_pConnection查詢結果 void ExecuteSQL(_ConnectionPtr m_pConnection, _RecordsetPtr m_pRecordset,CString str

50、Sql) /執行Select 語句 BSTR bstrSQL = strSql.AllocSysString(); try m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); /adOpenDynamic:動態 adLockOptimistic樂觀封鎖法 adCmdText:文本查詢語句 catch(_com_error error) CString errorMessage; errorMessage.Format("%s",(

51、LPTSTR)error.Description(); AfxMessageBox(errorMessage); /出錯處理:3127沒有找到目標表3092目標表已經存在例如:catch(const _com_error e) AfxMessageBox(e.Description(); long errorCode=e.WCode(); if(3127=errorCode) AfxMessageBox("表不存在"); if(3092=errorCode) AfxMessageBox("表已經存在"); return FALSE; 4.功能模塊的創建在

52、建立了數據庫操作類后,接下來我們就可以開始進行各功能模塊的創建。4.1 系統主體窗體的創建在我們按照VC+的AppWizard創建完工程后,為了使主窗口框架更適合整個系統的操作,我們有必要進行修改,重新創建。4.1.1主菜單的創建在WorkSpase中選擇ResourseView,然后雙擊Menu文件夾,再雙擊IDR_MAINFRAME選項,單擊右邊窗口中“幫助”旁邊的虛線框,在雙擊或按回車鍵,就會出現“Menu Item Properties”對話框,在這個對話框中輸入菜單項的內容,如圖8所示。圖8設置一級菜單二級菜單的設置基本上都和圖8相同,只是必須設置ID。按照這種方法,最終創建出如表2

53、所示的菜單結構。菜單名稱ID文件.打印ID_.打印預覽ID_.打印設置ID_.最近文件ID_.退出ID_APP_EXIT查看.工具欄ID_VIEW_TOOLBAR.狀態欄ID_VIEW_STATUS_BAR信息管理.查詢記錄ID_RECORD_SEARCH.添加記錄ID_RECORD_ADD.查看記錄ID_RECORD_VIEW.刪除記錄ID_RECORD_DEL.更改記錄ID_RECORD_EDIT權限管理.添加用戶ID_USER_ADD.更改密碼ID_PASSWARD_EDIT.刪除用戶ID_USER_DEL幫助表2 菜單結構4.1.2右鍵菜單的創建為了實現操作的方便、快捷,我們在程序中加

54、入了右鍵菜單。在VC的主菜單中,按“Project”>“Add to Project”>“Components and Controls Gallery”即可進入“Components and Controls Gallery”對話框,然后再打開Visual C+ Components文件,再選擇“Pop-up Menu”,單擊“insert”,隨后在跳出的對話框中選擇“CCaidianGuzhangView”,最后單擊“OK”。完成后,需要對其進行編輯。單擊WorkSpase中的ResourseView,在Menu文件夾中選擇CG_IDR_POPUP_MAIN_FRAME,之后邊

55、可在右邊窗口對其進行編輯。編輯方法與主菜單相同,其中各項的ID分別對應相應的菜單項,對應關系如表3所示。菜單名稱ID查看記錄ID_RECORD_VIEW添加記錄ID_RECORD_ADD刪除記錄ID_RECORD_DEL更改記錄ID_RECORD_EDIT 表3右鍵菜單對應的菜單項ID4.1.3工具欄的創建在WorkSpase中選擇ResourseView,然后雙擊Toolbar文件夾,再雙擊IDR_MAINFRAM選項,就可以利用工具條編輯器(Toolbar Editor)編輯右邊的工具條。本系統創建的工具條如圖9所示。其中各按鈕的ID分別對應相應的菜單項,按從做到右的順序對應的菜單項ID如表4所示。次序ID1ID_2ID_RECORD_ADD3ID_RECORD_DEL4ID_RECORD_SEARCH5ID_RECORD_ALL6ID_APP_ABOUT表4工具條對應的菜單項ID(注:其中第5個是顯示全部數據,實現刷新功能,在菜單中沒有)4.1.4數據顯示與表格控件的創建因為CCaidianGuzhangView是從ClistView繼承的,所以創建完工程后,就已經有表格控件存在。而我們目的就是使控件上的顯示更符合系統的使用,所

溫馨提示

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

評論

0/150

提交評論