【正文】
據(jù) */ return (TRUE)。}接收串口數(shù)據(jù)使用epcSerialRcvDataTread函數(shù),其采用的是線程方式,在建立數(shù)據(jù)庫接收線程之前應(yīng)該先確認(rèn)當(dāng)前串口串口沒有被占用,然后再設(shè)置接收參數(shù),如接收數(shù)據(jù)個數(shù),讀數(shù)據(jù)總超時常量,其詳細(xì)代碼如程序清單 。程序清單 串口控制類的的接收數(shù)據(jù)方法BOOL CCeSerial::epcSerialRcvDataTread (DWORD dwLength, DWORD dwOutTime, PFUN_COMRCV pfunOnComRcv, LPVOID pvUserParam){ DWORD dwThreadID。 COMMTIMEOUTS ctoTimeOut。 if ( (dwLength 1) || (pfunOnComRcv == NULL) ) { return (FALSE)。 } if (dwLength (1024*8)) { dwLength = 1024*8。 } if (dwOutTime 10) { dwOutTime = 10。 } if (hCOM == INVALID_HANDLE_VALUE) { __messageDispDebug(_T(串口未打開!))。 return (FALSE)。 } if (hRcvThread != NULL) { __messageDispDebug(_T(串口接收線程已建立過!))。 return (FALSE)。 } GetCommTimeouts(hCOM, amp。ctoTimeOut)。 = dwOutTime。 * 接收字符間最大時間間隔 */ = 1。 = dwOutTime。 * 讀數(shù)據(jù)總超時常量 */ SetCommTimeouts(hCOM, amp。ctoTimeOut)。 dwRcvLength = dwLength。 pfunRcvOnComRcv = pfunOnComRcv。 pvRcvUserParam = pvUserParam。 hExitThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL)。 /* 創(chuàng)建串口接收線程退出事件 */ hRcvThread = CreateThread(0, 0, epcSerialComRcvTread, this, 0, amp。dwThreadID)。 if (hRcvThread == NULL) { CloseHandle(hExitThreadEvent)。 /* 關(guān)閉線程退出事件句柄 */ __messageDispDebug(_T(創(chuàng)建接收線程失敗!))。 return (FALSE)。 } return (TRUE)。} ,但是自身功能有限,。微軟提供了兩種方式來增強(qiáng)VB的功能,一種是調(diào)用COM組件,另一種就是調(diào)用Dll函數(shù)。,首先在類中使用Declare函數(shù)聲明要調(diào)用的動態(tài)鏈接庫和函數(shù)名,本設(shè)計中主要調(diào)用了打開串口關(guān)閉串口發(fā)送數(shù)據(jù)和接受數(shù)據(jù)四個函數(shù)其詳細(xì)的代碼清單如程序清單 。程序清單 聲明調(diào)用動態(tài)鏈接庫‘聲明調(diào)用打開串口函數(shù)Public Declare Function epcSerialOpen1 Lib epcSerial Alias epcSerialOpen1 (ByVal ucPort As Byte, ByVal ucBaudRate As Byte, ByVal ucDataBit As Byte, ByVal ucStopBit As Byte, ByVal ucParity As Byte) As Integer‘聲明調(diào)用關(guān)閉串口函數(shù)Public Declare Function epcSerialClose Lib epcSerial Alias epcSerialClose (ByVal ucPort As Byte) As Boolean‘聲明調(diào)用發(fā)送數(shù)據(jù)函數(shù)Public Declare Function epcSerialSendData Lib epcSerial Alias epcSerialSendData (ByVal ucPort As Byte, ByVal pucSendBuf As Byte(), ByVal dwLength As UInteger) As Boolean‘聲明調(diào)用接收數(shù)據(jù)函數(shù)Public Declare Function epcSerialClose Lib epcSerial Alias epcSerialRcvData (ByVal ucPort As Byte, ByVal pucRcvBuf As Byte(), ByVal dwLength As Integer, ByVal dwOutTime As Integer, ByVal bClrComBuf As Boolean) As Integer 打印機(jī)驅(qū)動模塊本設(shè)計中使用的打印機(jī)屬于微型的串口打印機(jī),這種打印機(jī)的優(yōu)點(diǎn)是不需要編寫特定的驅(qū)動程序,打印機(jī)內(nèi)部自帶了控制器,用戶只需要通過目標(biāo)系統(tǒng)的標(biāo)準(zhǔn)RS232接口與打印機(jī)連接。然后按照廠家提供的打印指令表,即可控制打印機(jī)打印各種文字或圖形。由上一節(jié)可知道,系統(tǒng)的串口API已經(jīng)被封裝成一個串口類,并且打包成以標(biāo)準(zhǔn)C語言為導(dǎo)出函數(shù)的動態(tài)鏈接庫,控制打印機(jī)的操作只需要調(diào)用串口類然后發(fā)送相應(yīng)的指令和編輯好的數(shù)據(jù),其策劃年供需流程圖如圖 。圖 打印功能模塊程序流程圖 本地數(shù)據(jù)庫訪問模塊設(shè)計在Visual 2005 中, 來編寫SQL Server Mobile 數(shù)據(jù)庫應(yīng)用程序,而 命名空間提供了從運(yùn)行在支持的設(shè)備上的托管應(yīng)用程序?qū)?SQL Server Mobile 數(shù)據(jù)庫進(jìn)行編程訪問的能力。 創(chuàng)建和組裝本地數(shù)據(jù)庫SQL Server Mobile數(shù)據(jù)庫引擎是用于存儲、處理和保護(hù)數(shù)據(jù)的核心技術(shù)。通過使用 SQL Server Mobile 數(shù)據(jù)庫引擎,可以在支持的設(shè)備上創(chuàng)建、訪問和修改 SQL Server Mobile 數(shù)據(jù)庫。數(shù)據(jù)庫引擎還提供了受控訪問和快速事務(wù)處理功能,可以滿足的企業(yè)內(nèi)需要使用大量數(shù)據(jù)的應(yīng)用程序的要求。, Server Mobile 引擎對象。由前面的程序流程圖可知道,無論是管理員客戶機(jī)還是普通工作人員客戶機(jī),在正常工作前都需要在本地建立一個數(shù)據(jù)庫,所以本設(shè)計中使用了SQL Server Mobile 引擎對象SqlCeEngine的CreateDatabase方法創(chuàng)建本地數(shù)據(jù)庫文件,詳細(xì)方法如程序清單 。程序清單 創(chuàng)建本地數(shù)據(jù)庫函數(shù)Public Function Creat_DB(ByVal strDataBasePath As String, ByVal strDataBasePassWord As String) As Boolean Dim bsuccess As Boolean = True ‘創(chuàng)建SQL Server CE 引擎對象 Dim engine As New SqlCeEngine(Data Source= amp。 strDataBasePath amp。 。 Password = amp。 strDataBasePassWord) Try ‘創(chuàng)建新的數(shù)據(jù)庫 () MsgBox(創(chuàng)建數(shù)據(jù)庫成功!) Catch ex As Exception MsgBox() bsuccess = False Exit Function Finally () Creat_DB = bsuccess End TryEnd Function 與目標(biāo)數(shù)據(jù)庫建立連接 命名空間中在代碼和容納數(shù)據(jù)的數(shù)據(jù)存儲之間提供了基本連接的是Connection類。Connection 對象表示與數(shù)據(jù)源的唯一會話。在打開 Connection 對象之前,必須定義有關(guān)數(shù)據(jù)源和連接類型的某些信息。Connection 對象 Open 方法的 ConnectionString 參數(shù),或 Connection 對象上的 ConnectionString 屬性通常包含多數(shù)這樣的信息。連接字符串是定義數(shù)量不等的參數(shù)的字符串。這些參數(shù)(某些參數(shù)是 所需的,但另一些參數(shù)要視具體提供者而定)包含 Connection 對象完成其任務(wù)所必需的信息。連接數(shù)據(jù)庫時首先創(chuàng)建一個SqlCeConnection對象然后再調(diào)用該對象的Open()方法,其實現(xiàn)如程序清單 。程序清單 創(chuàng)建SQL Server Mobile連接對象 Dim conn As New SqlCeConnection(Data Source= amp。 strDataBasePath amp。 。 Password = amp。 strDataBasePassWord) () 對記錄集的添加、刪除、查找和修改連接到數(shù)據(jù)源后,需要執(zhí)行對數(shù)據(jù)源的請求,以獲取結(jié)果集。 將這一類型的命令功能封裝在 Command 對象中。 命名空間中對應(yīng)的是SqlCeCommand 類??墒褂?Command 對象向提供者請求任何類型的操作,條件是提供者能夠正確解釋命令字符串。數(shù)據(jù)提供者的常用操作是查詢數(shù)據(jù)庫,并將記錄返回到 Recordset 對象中。Recordset 將在本章的后面部分和其他章中詳細(xì)論述;就現(xiàn)在而言,可以把它們看作是用來保持和查看結(jié)果集的工具。與許多 ,在引用某些 Command 集合、方法或?qū)傩詴r可能會產(chǎn)生錯誤,這取決于提供者的功能。表 :表 四種執(zhí)行SQL語句的方式項說明ExecuteReader執(zhí)行返回行的命令。ExecuteNonQuery執(zhí)行SQL命令,如INSERT、DELETE和UPDATE語句。ExecuteScalar從數(shù)據(jù)庫中檢索單個值(例如一個聚合值)。ExecuteResultSet執(zhí)行命令并返回結(jié)果集。一般情況下,對于不需要返回記錄的SQL語句都應(yīng)該使用ExecuteNonQuery方法,在本設(shè)計中刪除記錄,添加記錄,修改記錄都使用SqlCeCommand 的ExecuteNonQuery方法。倉庫管理系統(tǒng)中對本司數(shù)據(jù)庫的操作都要經(jīng)過幾個相同的步驟:創(chuàng)建引擎對象,創(chuàng)建連接對象并與目標(biāo)數(shù)據(jù)庫建立連接,創(chuàng)建SQL語句執(zhí)行對象并添加要執(zhí)行的SQL語句。在刪除,添加和修改這三個基本操作中都不需要返回值,這三個過程可以抽象成一個通用的函數(shù),函數(shù)代碼如程序清單 ,型參strSQL代表執(zhí)行的SQL語句,strDataBasePath代表目標(biāo)數(shù)據(jù)庫路徑和名稱,strDataBasePassWord代表目標(biāo)數(shù)據(jù)庫訪問密碼。程序清單 執(zhí)行SQL語言的通用函數(shù) Public Sub Execute_SQL(ByVal strSQL As String, ByVal strDataBasePath As String, ByVal strDataBasePassWord As String) ‘創(chuàng)建SQL Server Mobile連接對象 Dim conn As New SqlCeConnection(Data Source= amp。 strDataBasePath amp。 。 Password = amp。 strDataBasePassWord)‘創(chuàng)建SQL語句執(zhí)行對象 Dim cmd As New SqlCeCommand Try ‘打開本地數(shù)據(jù)庫 () Catch ex As SqlCeException MsgBox(()) () Exit Sub End Try = conn = strSQL Try ‘執(zhí)行SQL 語句 () Catch ex As SqlCeException MsgBox(()) () () Exit Sub End Try () () End Sub在成功連接到數(shù)據(jù)源后,接著要做的是組裝數(shù)據(jù)庫,因為使用數(shù)據(jù)庫引擎建立的只是一個空的數(shù)據(jù)庫文件,里面沒有任何表格或數(shù)據(jù)。所以我們可以調(diào)用Execute_SQL函數(shù),把建立數(shù)據(jù)表的SQL語句作為Execute_SQL()的實參。具體的SQL語句如程序清單 。程序清單 組裝系統(tǒng)數(shù)據(jù)庫的代碼Public Good_Table As StringPublic OUTGood_Table As StringPublic INGood_Table As StringPublic DEPOT_info As String‘建立產(chǎn)品信息表對應(yīng)SQL語