亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ADO技術(shù)在城市軌道交通管理系統(tǒng)中的應(yīng)用

        2012-09-25 09:17:34孔繁虹
        城市道橋與防洪 2012年3期
        關(guān)鍵詞:時刻表控件對話框

        楊 柯,孔繁虹

        (同濟大學(xué)電氣工程系,上海 201804)

        0 引言

        城市軌道交通管理系統(tǒng),又稱列車自動監(jiān)控系統(tǒng)(ATS),它主要實現(xiàn)對列車運行的監(jiān)督和控制,輔助行車調(diào)度人員對全線列車進行管理,對提高運輸效率和保障行車安全起到極其重要的作用。它分為幾大部分:車站設(shè)備信號控制,時刻表管理,車次號追蹤,進路控制,列車運行圖和列車運行調(diào)整(ATR)。其中列車時刻表是ATS系統(tǒng)中運營管理的基礎(chǔ),列車的車次號追蹤需要從時刻表中查找車次;列車運行圖的編制需要時刻表為基礎(chǔ);列車在運行過程中,依據(jù)時刻表來控制速度;在列車偏離時刻表運行的情況下,調(diào)度員還需要通過修正時刻表,來實現(xiàn)對列車的自動調(diào)整運行。所以本文主要介紹列車時刻表與數(shù)據(jù)庫的通信技術(shù)。由于調(diào)度中心要與列車實時通信,并能及時地對列車收發(fā)指令,故對數(shù)據(jù)庫接口要求提出了很高的要求。本文介紹MFC中的ADO技術(shù),可迅速地操作數(shù)據(jù)庫,并不需要安裝驅(qū)動,簡單方便,適合于大型調(diào)度服務(wù)器端的數(shù)據(jù)庫中。

        1 系統(tǒng)分析

        1.1 系統(tǒng)功能分析

        ATS的時刻表通常安裝在控制中心的計算機上,由時刻表編輯員根據(jù)客流量和線路的狀況來提供多套不同情況下使用的運行圖,并存在ATS數(shù)據(jù)庫中。該軟件的主要功能描述如下:

        (1)用戶界面:可以看到列車車次號,時刻表,車站等信息。并能實時反映出當(dāng)前列車的運行情況。

        (2)數(shù)據(jù)庫:ATS監(jiān)控系統(tǒng)需要處理大量的數(shù)據(jù),比如時刻表就分為計劃時刻表和在線時刻表等,所以就要采取實時穩(wěn)定可靠并能處理較大數(shù)據(jù)量的數(shù)據(jù)庫,本文用SQL Server 2005作為數(shù)據(jù)存儲工具,采用ADO技術(shù),通過該接口用軟件實現(xiàn)對數(shù)據(jù)庫訪問,可有效管理系統(tǒng)中數(shù)據(jù)。

        1.2 系統(tǒng)目標(biāo)

        軟件應(yīng)該滿足以下幾個目標(biāo):

        (1)列車調(diào)度員應(yīng)該通過輸入用戶名和密碼登錄ATS調(diào)度系統(tǒng)。

        (2)對車站的管理,可以增加,刪除該線路上的車站信息。

        (3)對列車的管理,實現(xiàn)加車,減車,修改列車時刻表等信息。

        上面幾個目標(biāo)實現(xiàn)后,就可以根據(jù)數(shù)據(jù)庫已有的時刻表來編制列車的計劃運行圖。

        2 Visual C++中數(shù)據(jù)庫訪問技術(shù)

        2.1 常用數(shù)據(jù)庫訪問技術(shù)

        開放數(shù)據(jù)庫互連(ODBC)是Microsoft引進的一種早期數(shù)據(jù)庫接口技術(shù),它用包含在DLL內(nèi)的驅(qū)動程序完成任務(wù)。它提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口),這些API利用SQL來完成其大部分任務(wù)。但其訪問速度慢,并且需要安裝驅(qū)動,且只能用于關(guān)系數(shù)據(jù)庫,不適用于對象數(shù)據(jù)庫。

        DAO(數(shù)據(jù)訪問對象)是微軟第一個面向?qū)ο蟮臄?shù)據(jù)庫接口,它封裝了Access的Jet函數(shù),因此對Access的執(zhí)行效率比較高,但對SQL等非MDB數(shù)據(jù)庫得執(zhí)行效率較低,因此不適用于列車監(jiān)控系統(tǒng)。

        OLE DB是微軟的戰(zhàn)略性的通向不同的數(shù)據(jù)源的低級應(yīng)用程序接口。OLE DB不僅包括微軟資助的標(biāo)準(zhǔn)數(shù)據(jù)接口開放數(shù)據(jù)庫連通性(ODBC)的結(jié)構(gòu)化問題語言(SQL)能力,還具有面向其他非SQL數(shù)據(jù)類型的通路。它的對象包括數(shù)據(jù)源對象、階段對象、命令對象和行組對象。但它使用時需加入很多代碼,使用起來比較復(fù)雜。

        2.2 ADO技術(shù)

        微軟的ADO(ActiveX Data Objects)是一個用于存取數(shù)據(jù)源的COM組件。它提供了編程語言和統(tǒng)一數(shù)據(jù)訪問方式OLE DB的一個中間層。允許開發(fā)人員編寫訪問數(shù)據(jù)的代碼而不用關(guān)心數(shù)據(jù)庫是如何實現(xiàn)的,而只用關(guān)心到數(shù)據(jù)庫的連接。它是使用簡單,讀寫速度快,又更加靈活的對象模型。適合用在城市軌道交通數(shù)據(jù)庫中。

        ADO主要數(shù)據(jù)對象

        Connection對象

        -Connection對象用于建立與數(shù)據(jù)庫的連接。通過連接可從應(yīng)用程序訪問數(shù)據(jù)源。它保存諸如指針類型、連接字符串、查詢超時、連接超時和缺省數(shù)據(jù)庫這樣的連接信息。Command對象

        -Command對象定義了將對數(shù)據(jù)源執(zhí)行的指定命令。Command對象可以在數(shù)據(jù)庫中添加、刪除或更新數(shù)據(jù)、或者在表中進行數(shù)據(jù)查詢。返回的結(jié)果保存在Recordset對象中。Recordset對象

        -Recordset對象表示的是來自基本表或命令執(zhí)行結(jié)果的記錄全集。任何時候,Recordset對象所指的當(dāng)前記錄均為集合內(nèi)的單個記錄。使用ADO時,通過Recordset對象可對幾乎所有數(shù)據(jù)進行操作。所有Recordset對象均使用記錄(行)和字段(列)進行構(gòu)造。在一個Connection對象上,可以同時打開多個Recordset。

        3 程序的實現(xiàn)

        3.1 ADO類的實現(xiàn)

        由于數(shù)據(jù)庫是存放在SQL 2005中,需要先在SQL中建立數(shù)據(jù)庫train,然后向里面添加多個表,分別存放車站信息,列車時刻表信息和用戶信息等。如圖1所示,是列車時刻表信息的結(jié)構(gòu),設(shè)置列車ID為主鍵,不能為空。

        在VC2005中建立一個基于對話框的MFC應(yīng)用程序time,并添加相關(guān)菜單,如車站信息管理,時刻表添加、刪除、修改,退出系統(tǒng)等。不同的菜單命令都有一個對話框與之對應(yīng),然后向個對話框中添加靜態(tài)控件、編輯控件、TAB控件、按鈕控件和列表框控件等。為了使表中的字段與編輯控件對應(yīng),編輯控件應(yīng)與控制變量綁定。下面介紹ADO技術(shù)的在VC中的應(yīng)用。

        (1)為了便于方便的使用ADO,該程序中對ADO封裝到了一個類中,命名為ADOConn,后面的編程可直接調(diào)用該類使用ADO,避免重復(fù)寫代碼。在使用ADO之前,應(yīng)在該類的頭文件中加入以下代碼:

        #import"C:Program FilesCommon FilesSystemadomsado15.dll"no_namespacerename("EOF","adoEOF")rename("BOF","adoBOF")

        此指令,告訴編譯器把指令的動態(tài)庫文件引入到程序中去,為了避免與其他地方定義的EOF沖突,使用rename指令將EOF重新命名。

        (2)在頭文件定義幾個函數(shù),如 void OnInit ADOConn()用來初始化連接數(shù)據(jù)庫,_RecordsetPtr&GetRecordSet(_bstr_t bstrSQL)來執(zhí)行查詢,BOOL ExecuteSQL(_bstr_t bstrSQL)來執(zhí)行SQL語句。

        (3)在調(diào)用ADO時候需要初始化OLE/COM環(huán)境,在OnInitADOCon中用::CoInitialize(NULL)來實現(xiàn),在最后關(guān)閉記錄集連接時還要用::CoUninitialize()來釋放環(huán)境。另外為了能捕捉到程序的錯誤信息,還需要捕捉異常,具體代碼是:

        catch(_com_error e)

        {

        AfxMessageBox(e.Description());}

        (4)創(chuàng)建Connection對象,并設(shè)置字符串與數(shù)據(jù)庫連接,如本例代碼為:

        _bstr_tstrConnect="Provider=SQLOLEDB.1;

        DataSource=WWW;UserID=sa;Password=sa;Initial Catalog=train";

        其中,DataSource為計算機名,對本機可直接用 127.0.0.1代替;User ID和 Password分別是SQL的登錄名和密碼,Initial Catalog是數(shù)據(jù)庫名稱。

        (5)創(chuàng)建記錄集對象m_pRecordset.CreateInstance(__uuidof(Recordset)),然后取得表中的記錄,代碼

        圖1 Time數(shù)據(jù)表結(jié)構(gòu)

        如下:

        m_pRecordset →Open (bstrSQL,m_pConnection.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);

        (6)執(zhí)行SQL命令,connection對象的Execute方法是:

        (_bstr_t CommandText,VARIANT*RecordsAffected,long Options)

        m_pConnection->Execute(bstrSQL,NULL,adCmdText)

        其中,CommandText是命令字符串,通常是SQL命令,RecordsAffected是操作完成后所影響的行 數(shù) ,Options表 示 CommandText的 類 型,adCmdText文本令,adCmdTable表名,adCmdProc是存儲過程,adCmdUnknown-未知。

        3.2 程序的實現(xiàn)

        ATS系統(tǒng)的數(shù)據(jù)庫管理是整個列車行車調(diào)度的關(guān)鍵,其車次號的變更,加減列車,時刻表偏移等措施無一不與數(shù)據(jù)庫有很大關(guān)系。下面介紹程序的實現(xiàn)步驟:

        (1)先對數(shù)據(jù)庫中的每個表創(chuàng)建一個類,如時刻表創(chuàng)建類CShike,并把一些相關(guān)的SQL命令如insert、update、delete命令封裝在類中,方便后面直接調(diào)用。

        (2)新建一個對話框Dialogin,添加編輯框等控件來輸入用戶名密碼,并對編輯框添加變量與表對應(yīng)。之后再主對話框的OnInitDialog函數(shù)中加入以下代碼:CDialogin gin;

        if(gin.DoModal()!=IDOK)

        OnOK();

        這樣程序運行時就會先出現(xiàn)登陸框,輸入用戶名密碼后方能進入主界面(見圖2)。

        圖2 程序主界面

        狀態(tài)欄中mr就是當(dāng)前登陸的用戶名。

        (3)以時刻表管理為例,新建對話框并插入相關(guān)控件,這里為了方便維護信息和查詢,用了TAB控件分頁,單擊TAB的時刻信息按鈕顯示列表框并直接從數(shù)據(jù)庫表中讀取時刻表信息并顯示。單擊信息刪除按鈕顯示編輯框等控件,調(diào)度員可以在這里對時刻表的相關(guān)信息進行維護,比如添加、修改、刪除等。下面就相關(guān)代碼做介紹。

        在CShikedlg的OnInitDialog函數(shù)中加入以下代碼實現(xiàn)TAB按鈕名稱:

        TC_ITEM tci;

        tci.mask=TCIF_TEXT;

        tci.pszText="時刻信息";m_tab.InsertItem(0,&tci);tci.pszText="信息刪除";m_tab.InsertItem(1,&tci)。

        之后InsertColumn初始化列表框控件,之后調(diào)用ADO類并執(zhí)行SQL命令,再向列表框控件插入數(shù)據(jù),比如表中字段為trainID,代碼就是:

        m.list.SetItemText(0,0,(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("TrainID")); 其中 m_list是列表框的成員變量。

        TAB的分頁機制可用OnTcnSelchangeTab1和OnTcnSelchangingTab1與SetCurTab函數(shù)來實現(xiàn),比如編輯框和列表框的代碼如下:

        void CShikedlg::SetCurTab(UINT m_index){

        m_tab.SetCurSel(m_index);

        if(m_index==0)

        {

        GetDlgItem(IDC_LIST1)->ShowWindow(SW_HIDE);GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);}

        else{

        GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);GetDlgItem(IDC_LIST1)->ShowWindow(SW_SHOW);

        }}

        程序運行后的時刻表信息如圖3所示。

        4 小結(jié)與展望

        通過程序的運行結(jié)果可知,ADO可以快速實現(xiàn)對數(shù)據(jù)庫的操作,整個過程不需要安裝任何驅(qū)動,在VC中直接使用ADO代碼即可實現(xiàn),簡單方便。本文使用MFC開發(fā)程序,其強大的集成環(huán)境可簡化加快應(yīng)用程序的開發(fā),采用ADO技術(shù)實現(xiàn)數(shù)據(jù)庫管理之后,就可以利用已有的數(shù)據(jù)來繪制列車的計劃運行圖,MFC提供的繪圖類CDC非常方便,利用函數(shù)move to,line to結(jié)合相關(guān)算法可直接繪制出運行圖;從而更好地實現(xiàn)ATS的行車調(diào)度。

        [1]宋坤,李偉明,劉銳寧.Visual C++數(shù)據(jù)庫系統(tǒng)開發(fā)案例精選[M].北京:人民郵電出版社,2006:311-360.

        [2]顏志軍.Visual C++數(shù)據(jù)庫通用模塊及典型系統(tǒng)開發(fā)實例[M].北京:電子工業(yè)出版,2006:17-134.

        [3]趙麗紅,劉海,王春曉.基于MFC和ADO技術(shù)的電網(wǎng)數(shù)據(jù)庫系統(tǒng)[J].測控技術(shù),2010,29(8).

        [4]劉曉娟,張雁鵬,湯自安.城市軌道交通智能控制系統(tǒng)[M].北京:中國鐵道出版社,2008:105-118.

        [5]SERBANGHENEA,Application Tool for Experiments on SQLServer 2005 Transactions[J].WSEASTransactions on Computers,2007,6(2).

        圖3 程序運行后的時刻表信息

        猜你喜歡
        時刻表控件對話框
        城市軌道交通時刻表調(diào)整服務(wù)器故障分析及探討
        正常恢復(fù)虛擬機
        令你誤車的列車時刻表
        知識窗(2019年5期)2019-06-03 02:16:14
        Bootlace Worms’Secret etc.
        關(guān)于.net控件數(shù)組的探討
        軟件(2018年7期)2018-08-13 09:44:42
        城市軌道交通ATS系統(tǒng)的時刻表同步機制研究
        短文改錯
        快速抓取對話框中的完整信息
        電腦迷(2012年22期)2012-04-29 20:30:54
        就這樣玩會VBA中常見的自定義控件
        電腦迷(2012年24期)2012-04-29 00:44:03
        在PowerBuUder中利用WinSock控件制作簡單的Web服務(wù)器
        少妇愉情理伦片| 亚洲高清在线天堂精品| 伊人久久大香线蕉av色婷婷色| 人妻av有码中文字幕| 国产男女猛烈无遮挡免费网站| 天堂中文在线资源| 国产suv精品一区二区69| japanesehd中国产在线看 | av无码国产在线看免费网站| 国产成人亚洲精品青草天美 | 亚洲国产精品久久久久久无码| 亚洲产国偷v产偷v自拍色戒| 超级碰碰色偷偷免费视频| 香色肉欲色综合| 欧美三级免费网站| 久久中文字幕久久久久| 国产精品亚洲综合色区丝瓜| 91精品国产综合久久久蜜臀九色 | 国产二区交换配乱婬| 一本加勒比hezyo无码人妻| 99久久精品国产一区二区蜜芽| 国产最新AV在线播放不卡| 丝袜人妻无码中文字幕综合网| 亚洲av熟女天堂久久天堂| 日本一二三四高清在线| 呦系列视频一区二区三区| 激情内射日本一区二区三区| 99在线播放视频| 欧美中出在线| 亚洲一区二区国产精品视频| 亚洲国产91高清在线| 日本亚洲系列中文字幕| 男女真人后进式猛烈视频网站| 欧美激情肉欲高潮视频| 中文字幕有码无码av| y111111少妇影院无码| 午夜日韩视频在线观看| 情av一区二区三区在线观看| 国产毛片黄片一区二区三区 | jk制服黑色丝袜喷水视频国产| 亚洲天堂av在线免费看|