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

        ?

        基于Oracle Spatial空間數(shù)據(jù)庫(kù)數(shù)據(jù)的動(dòng)態(tài)讀取

        2015-03-02 02:25:06汪斌
        測(cè)繪技術(shù)裝備 2015年3期
        關(guān)鍵詞:數(shù)據(jù)庫(kù)信息

        汪斌

        ?

        基于Oracle Spatial空間數(shù)據(jù)庫(kù)數(shù)據(jù)的動(dòng)態(tài)讀取

        汪斌

        (安徽省測(cè)繪產(chǎn)品質(zhì)量監(jiān)督檢驗(yàn)站 安徽合肥 230031)

        首先介紹了利用VC++6.0開發(fā)基于Oracle實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)動(dòng)態(tài)讀取的必要性,并給出了獲取空間數(shù)據(jù)表的方法以及相應(yīng)的主要程序代碼;在分析了讀取Oracle中空間數(shù)據(jù)原理的基礎(chǔ)上,對(duì)實(shí)現(xiàn)的代碼給予說(shuō)明。

        空間數(shù)據(jù)庫(kù) Oracle Spatial 動(dòng)態(tài)讀取

        1 引言

        由于每次連接Oracle數(shù)據(jù)庫(kù)同時(shí)只能讀取一個(gè)數(shù)據(jù)表的情況,本文實(shí)現(xiàn)了一次連接數(shù)據(jù)庫(kù)時(shí),能同時(shí)讀取多個(gè)數(shù)據(jù)表文件的方法,實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的動(dòng)態(tài)讀取,是深層次開發(fā)地理信息系統(tǒng)的基礎(chǔ)。由于VC++具有運(yùn)行效率高、可實(shí)現(xiàn)底層開發(fā)以及特別適合寫系統(tǒng)軟件的特點(diǎn),對(duì)于開發(fā)空間信息管理系統(tǒng)具有較大優(yōu)勢(shì)。本文利用VC++6.0與MapX集成二次開發(fā)的方法,實(shí)現(xiàn)了Oracle空間數(shù)據(jù)庫(kù)中表的動(dòng)態(tài)讀取操作。

        2 空間數(shù)據(jù)庫(kù)表信息的獲取

        Oracle提供了一系列對(duì)空間數(shù)據(jù)表訪問(wèn)與操作的工具,例如SQL Plus、OCI以及OO4O等方法。SQL Plus是Oracle數(shù)據(jù)庫(kù)提供的訪問(wèn)數(shù)據(jù)庫(kù)的重要工具,可方便地實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表的訪問(wèn),但是其無(wú)法與其他通用的開發(fā)語(yǔ)言集成使用。OCI由Oracle公司提供的頭文件和庫(kù)函數(shù)等組成的一個(gè)訪問(wèn)Oracle數(shù)據(jù)庫(kù)的應(yīng)用程序編程接口,其對(duì)于編程人員的要求水平也較高。OO4O則提供了對(duì)基礎(chǔ)OCI庫(kù)函數(shù)的封裝,而且對(duì)于動(dòng)態(tài)獲取Oracle空間數(shù)據(jù)表的信息易于實(shí)現(xiàn)。本文通過(guò)OO4O實(shí)現(xiàn)Oracle空間數(shù)據(jù)庫(kù)表信息的獲取。

        2.1 OO4O開發(fā)環(huán)境的配置

        OO4O提供了連接數(shù)據(jù)庫(kù)功能的類ODatabase以及相關(guān)記錄集、字段、異常處理的類。在VC++6.0中包含OO4O對(duì)應(yīng)的頭文件、類庫(kù)和動(dòng)態(tài)庫(kù)文件,構(gòu)建運(yùn)行環(huán)境,具體包括動(dòng)態(tài)庫(kù)DLL文件ORACLM32.DLL,動(dòng)態(tài)庫(kù)LIB文件ORACLM32.LIB以及VC++的頭文件Obound.h、Omfc.h、Oracl.h文件[1]。首先選擇VC++6.0的“工程”中的“設(shè)置”菜單項(xiàng),在“連接”選項(xiàng)卡的“對(duì)象/庫(kù)模塊”中包括ORACLM32.LIB,然后在“工具”中的“選項(xiàng)”菜單項(xiàng),在“目錄”選項(xiàng)中包含相應(yīng)的頭文件和庫(kù)文件。

        2.2 打開數(shù)據(jù)庫(kù)連接

        在訪問(wèn)Oracle數(shù)據(jù)庫(kù)之前,必須建立與數(shù)據(jù)庫(kù)的連接??梢栽趹?yīng)用程序初始化的時(shí)候建立連接。利用OStartup()啟動(dòng)ORACLE數(shù)據(jù)庫(kù)的服務(wù),然后,利用Open (數(shù)據(jù)庫(kù)名,用戶名,關(guān)鍵字)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的打開。具體代碼如下:

        OStartup();

        ODatabase m_OraDB;

        CDBLoginDlg dlg;

        if(dlg.DoModal ()==IDOK)

        {

        //打開數(shù)據(jù)庫(kù)

        m_OraDB.Open(dlg.m_strDBName,dlg.m_strUserName ,dlg.m_strPasswordName);

        if(!m_OraDB.IsOpen ())

        {

        AfxMessageBox("數(shù)據(jù)庫(kù)未打開!");

        return FALSE;

        }

        }

        return TRUE;

        2.3 獲取空間數(shù)據(jù)庫(kù)表名

        空間數(shù)據(jù)表名的信息可以在“USER_TABLES”的數(shù)據(jù)庫(kù)視圖中獲取。在“USER_TABLES”表中存儲(chǔ)了如下相關(guān)信息:

        Table USER_TABLES(TABLE_NAME,TABLENAME_SPACE,CLUSTER_NAME,……DEPENDENCIES);

        通過(guò)如下代碼實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表信息的獲取:

        //打開數(shù)據(jù)表

        ODynaset m_Oraset;

        m_Oraset.Open(m_OraDB,"select * from USER_TABLES");

        if(!m_Oraset.IsOpen())

        {

        AfxMessageBox(m_Oraset.GetErrorText());

        return "Error";

        }

        OValue val;

        while(!m_Oraset.IsEOF())

        {

        m_Oraset.GetFieldValue((const char *)"TABLE_NAME",&val);

        arrTableName->Add (CString((const char *)val));

        m_Oraset.MoveNext();

        }

        m_Oraset.Close();

        3 空間數(shù)據(jù)庫(kù)的讀取

        空間數(shù)據(jù)庫(kù)的連接與讀取,是采用VC++6.0與MapX集成的方式實(shí)現(xiàn)。首先要在新建的VC++工程中,創(chuàng)建MapX控件,包含MapX.cpp和MapX.h文件,然后在視類中加入MapX對(duì)象的頭文件,為MapX創(chuàng)建一個(gè)資源ID,最后通過(guò)類向?qū)?duì)于WM_CREATE、WM_SIZE和WM_SETFOCUS實(shí)現(xiàn)對(duì)應(yīng)得消息相應(yīng)[3]。在Oracle數(shù)據(jù)庫(kù)中,對(duì)于空間數(shù)據(jù)的管理是通過(guò)Oracle Spatial的組件實(shí)現(xiàn)的;而MapX通過(guò)Oracle的OCI(Oracle Call Interface)接口來(lái)訪問(wèn)Oracle Spatial,通過(guò)LayerInfo完成圖層的加載。主要的代碼如下:

        n=m_DatabaseName.GetCurSel ();//獲取數(shù)據(jù)庫(kù)名

        m_DatabaseName.GetLBText (n,str); //創(chuàng)建連接字符串

        ConnectStr="SRVR="+str+";UID="+m_Username+";PWD="+m_Password;

        try { layers=m_ctrlMapx.GetLayers ();

        CMapXLayerInfo layerinfo;

        if(layerinfo.CreateDispatch (layerinfo.GetClsid ()))

        {

        CDialoadownload download;

        download.DoModal ();

        str_Convey=download.str_downtable ;

        }

        layerinfo.SetType (miLayerInfoTypeServer);

        VARIANT varName; varConnectStr; varQuery; varToolKits;

        //讀取表的SQL語(yǔ)句

        strQuery.Format ("Select * From %s",str_Convey);

        CString strToolKits="ORAINET";

        varName.vt=VT_BSTR;

        varName.bstrVal =strName.AllocSysString ();

        varConnectStr.vt=VT_BSTR;

        varConnectStr.bstrVal =ConnectStr.AllocSysString ();

        varQuery.vt=VT_BSTR;

        varQuery.bstrVal =strQuery.AllocSysString ();

        varToolKits.vt =VT_BSTR;

        varToolKits.bstrVal =strToolKits.AllocSysString ();

        layerinfo.AddParameter ("Name",varName);

        layerinfo.AddParameter ("ConnectString",varConnectStr);

        layerinfo.AddParameter ("Query",varQuery);

        layerinfo.AddParameter ("ToolKit",varToolKits);

        Newlayer=layers.Add (layerinfo,0); }//應(yīng)用程序中加載相應(yīng)得圖層

        4 結(jié)束語(yǔ)

        基于VC++6.0動(dòng)態(tài)讀取Oracle數(shù)據(jù)庫(kù)不僅效率高,而且利用VC++的強(qiáng)大功能,可以實(shí)現(xiàn)空間數(shù)據(jù)庫(kù)管理系統(tǒng)的深層次開發(fā)。我們可以在此基礎(chǔ)上開發(fā)相應(yīng)的空間數(shù)據(jù)庫(kù)管理系統(tǒng)及相關(guān)的應(yīng)用程序。

        [1] 《電腦編程技巧與維護(hù)》雜志社.Visual C++編程技巧典型案例解析[M].北京:中國(guó)電力出版社,2005.

        [2] 新電腦課堂—Visual C++編程篇[M].北京:電子工業(yè)出版社,2004.

        [3] 齊銳,屈韶琳,陽(yáng)琳斌.用MAPX開發(fā)地理信息系統(tǒng)[M].北京:清華大學(xué)出版社,2003.

        [4] 陳建春.Visual C++開發(fā)GIS系統(tǒng)(第2版)[M].北京:電子工業(yè)出版社,2004.

        猜你喜歡
        數(shù)據(jù)庫(kù)信息
        數(shù)據(jù)庫(kù)
        訂閱信息
        中華手工(2017年2期)2017-06-06 23:00:31
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        展會(huì)信息
        數(shù)據(jù)庫(kù)
        信息
        健康信息
        祝您健康(1987年3期)1987-12-30 09:52:32
        中文片内射在线视频播放| 狠狠噜天天噜日日噜| 中文字幕无码免费久久99| 日本一区二三区在线中文| 日韩女同视频在线网站| 大陆极品少妇内射aaaaaa| 日韩欧美第一页| 一区二区三区在线观看视频免费| 日本熟妇另类一区二区三区| 亚洲中文字幕久在线| 亚洲最大在线精品| 亚洲一区二区三区视频免费 | 人妻少妇久久精品一区二区| 日本黑人乱偷人妻在线播放| 精品久久久久久成人av| 99久久久久国产| 国产av区亚洲av毛片| 91成人自拍国语对白| 天天鲁一鲁摸一摸爽一爽| 久久国产免费观看精品| 日本成人精品一区二区三区| 亚洲日韩国产av无码无码精品| 永久免费不卡在线观看黄网站| 久久AⅤ天堂Av无码AV| 国产一区二区黄色的网站| 免费看黑人男阳茎进女阳道视频| 在线成人福利| 亚洲一区二区三区ay| 极品粉嫩嫩模大尺度无码视频| 成人欧美一区二区三区a片| 两个人免费视频大全毛片| 国产一区二区黄色网页 | 手机看片久久第一人妻| 丰满熟妇乱子伦| 欧美日韩a级a| 一本之道日本熟妇人妻| 精品国产拍国产天天人| 免费无遮挡无码视频在线观看| 久久亚洲宅男天堂网址| 99精品国产成人一区二区 | 精品人无码一区二区三区 |