国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

楊 柯,孔繁虹

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

0 引言

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

1 系統(tǒng)分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2 ADO技術(shù)

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

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

Connection對(duì)象

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

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

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

3 程序的實(shí)現(xiàn)

3.1 ADO類的實(shí)現(xiàn)

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

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

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

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

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

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

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

catch(_com_error e)

{

AfxMessageBox(e.Description());}

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

_bstr_tstrConnect="Provider=SQLOLEDB.1;

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

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

(5)創(chuàng)建記錄集對(duì)象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對(duì)象的Execute方法是:

(_bstr_t CommandText,VARIANT*RecordsAffected,long Options)

m_pConnection->Execute(bstrSQL,NULL,adCmdText)

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

3.2 程序的實(shí)現(xiàn)

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

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

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

if(gin.DoModal()!=IDOK)

OnOK();

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

圖2 程序主界面

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

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

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

TC_ITEM tci;

tci.mask=TCIF_TEXT;

tci.pszText="時(shí)刻信息";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的分頁機(jī)制可用OnTcnSelchangeTab1和OnTcnSelchangingTab1與SetCurTab函數(shù)來實(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);

}}

程序運(yùn)行后的時(shí)刻表信息如圖3所示。

4 小結(jié)與展望

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

猜你喜歡
時(shí)刻表控件對(duì)話框
城市軌道交通時(shí)刻表調(diào)整服務(wù)器故障分析及探討
正?;謴?fù)虛擬機(jī)
令你誤車的列車時(shí)刻表
知識(shí)窗(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)的時(shí)刻表同步機(jī)制研究
短文改錯(cuò)
快速抓取對(duì)話框中的完整信息
電腦迷(2012年22期)2012-04-29 20:30:54
就這樣玩會(huì)VBA中常見的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
在PowerBuUder中利用WinSock控件制作簡單的Web服務(wù)器
罗江县| 长宁县| 阳高县| 南康市| 潮州市| 永安市| 龙胜| 白玉县| 砀山县| 堆龙德庆县| 达孜县| 泰来县| 谷城县| 兰州市| 长春市| 驻马店市| 阿图什市| 东莞市| 桑日县| 宁河县| 鄂伦春自治旗| 饶平县| 沂南县| 石台县| 绥芬河市| 芦溪县| 武汉市| 安溪县| 仪征市| 海淀区| 金阳县| 海伦市| 赤城县| 五家渠市| 霞浦县| 墨玉县| 定南县| 金川县| 金塔县| 石城县| 郯城县|