免费黄网站在线观看_成人午夜剧场免费观看完整版_多野结衣av一区_亚洲激情在线视频_国产乱码精品一区二区三区亚洲人 _国产成人精品三级_视频一区视频二区视频三区高_一区福利视频_国产成人精品午夜_蜜桃成人365av_国产精品美女久久久久久久_国产伦精品一区二区三区视频免费

您的位置:網(wǎng)站首頁(yè) > UG教程下載

UG二次開(kāi)發(fā)外部數(shù)據(jù)使用

時(shí)間:2010-11-15 10:01:36 來(lái)源:

  1 前言

  隨著UG系統(tǒng)的推廣和普及應(yīng)用,基于UG平臺(tái)的二次開(kāi)發(fā)工作顯得越來(lái)越重要,在UG的二次開(kāi)發(fā)應(yīng)用系統(tǒng)中,經(jīng)常需要與各種外部數(shù)據(jù)打交道, UG/OPEN API提供了豐富的文件訪問(wèn)操作函數(shù),利用這些操作函數(shù)及VC++的MFC類(lèi)庫(kù),可以方便地實(shí)現(xiàn)外部數(shù)據(jù)讀寫(xiě)訪問(wèn)編程。

  2 外部數(shù)據(jù)訪問(wèn)的主要方法

  在UG二次開(kāi)發(fā)應(yīng)用系統(tǒng)中,主要訪問(wèn)的外部數(shù)據(jù)有文本文件、Excel表、關(guān)系型數(shù)據(jù)庫(kù)表等,通常可以通過(guò)以下方法訪問(wèn)這些外部數(shù)據(jù):

  (1)通過(guò)UG/OPEN API提供的文件操作函數(shù)訪問(wèn)外部數(shù)據(jù)

  (2)通過(guò)ODBC數(shù)據(jù)源訪問(wèn)外部數(shù)據(jù)

  (3)通過(guò)ADO訪問(wèn)外部數(shù)據(jù)

  2.1 通過(guò)UG/OPEN API提供的文件操作函數(shù)訪問(wèn)文本文件數(shù)據(jù)

  UG/OPEN API中有關(guān)文件操作的函數(shù)包含在頭文件uf_cfi.h中,通過(guò)函數(shù)uc4500可以打開(kāi)二進(jìn)制文件,相關(guān)的文件操作函數(shù)有uc4510、uc4511、uc4512、uc4513及uc4520、uc4521、uc4522、uc4523,通過(guò)函數(shù)uc4504可以打開(kāi)文本文件,相關(guān)的文件操作函數(shù)有uc4514、uc4524、uc4525,函數(shù)uc4540用于關(guān)閉文件,判斷文件是否存在使用函數(shù)UF_CFI_ask_file_exist。

  通過(guò)UG/OPEN API提供的文件操作函數(shù)訪問(wèn)外部數(shù)據(jù)時(shí),要注意以下問(wèn)題:

  (1)UG/Manager 和 IMAN中的文件和文件夾操作不能使用uf_cfi.h中函數(shù);

  (2)UG/OPEN API中對(duì)文件和文件夾標(biāo)識(shí)符的長(zhǎng)度有如下限制:

  文件名長(zhǎng)度不能超過(guò)UF_CFI_MAX_FILE_NAME_LEN;文件夾路徑的長(zhǎng)度不能超過(guò)UF_CFI_MAX_PATH_NAME_LEN;整個(gè)文件路徑的長(zhǎng)度不能超過(guò)UF_CFI_MAX_PATH_NAME_LEN。

  訪問(wèn)文本文件的程序流程如下圖:

  

  2.2 通過(guò)ODBC數(shù)據(jù)源訪問(wèn)Excel表或關(guān)系型數(shù)據(jù)庫(kù)表數(shù)據(jù)

  ODBC(Open Database connectivity 開(kāi)放式數(shù)據(jù)庫(kù)互連)是由微軟公司提出的一個(gè)用于訪問(wèn)數(shù)據(jù)庫(kù)的統(tǒng)一界面標(biāo)準(zhǔn),它提供了一個(gè)一致的應(yīng)用程序編程接口,該接口使用一個(gè)針對(duì)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序與不同的數(shù)據(jù)庫(kù)協(xié)同工作。

  通過(guò)ODBC訪問(wèn)外部數(shù)據(jù)時(shí),需要先指定訪問(wèn)的數(shù)據(jù)源DSN(Data Source Name),以指定ODBC與相關(guān)的驅(qū)動(dòng)程序相對(duì)應(yīng)的入口。在控制面板的管理工具中可以打開(kāi)ODBC數(shù)據(jù)源管理器,指定DSN。

  建立MFC數(shù)據(jù)庫(kù)類(lèi)Cdatabse對(duì)象可以實(shí)現(xiàn)對(duì)外部數(shù)據(jù)的訪問(wèn)編程。一個(gè)CDatabase對(duì)象代表與數(shù)據(jù)源的一個(gè)連接。創(chuàng)建一個(gè)CDatabase對(duì)象之后,調(diào)用Open或OpenEx成員函數(shù)指定一個(gè)DSN,就建立起了與DSN的底層數(shù)據(jù)源的連接(打開(kāi)數(shù)據(jù)庫(kù))。成員函數(shù)Close關(guān)閉數(shù)據(jù)庫(kù)。CDatabase對(duì)象通常與一個(gè)或多個(gè)記錄集(CRecordset對(duì)象)一起使用,通過(guò)CRecordset類(lèi)的各成員函數(shù)完成對(duì)數(shù)據(jù)源的讀寫(xiě)操作。

  通過(guò)ODBC訪問(wèn)一個(gè)Excel表的編程實(shí)例代碼如下:

  static void do_ugopen_api(void)

  {

  CDatabase Database; // 定義一個(gè)MFC的CDatabse數(shù)據(jù)庫(kù)類(lèi)對(duì)象Databse

  CString SQLCommand = "select `Serial_Number`, `Outer_Diameter`, `Inner_Diameter`,`Height` from `Sheet1$`"; // SQL查詢語(yǔ)句

  DWORD dwOptions = 0;// 設(shè)置連接的建立方式

  CDBVariant temp;// 數(shù)據(jù)庫(kù)數(shù)據(jù)通用類(lèi)型

  int result; // 儲(chǔ)存返回值的變量

  char buf[133];

  try

  {

  result = Database.OpenEx( "DSN=Standard Part", dwOptions ); // 打開(kāi)數(shù)據(jù)庫(kù)

  if( result != 0 ) // 如果成功打開(kāi)

  {

  CRecordset rs( &Database ); // 定義記錄集

  if ( rs.Open( CRecordset::snapshot, SQLCommand ) != false )

  {

  rs.MoveFirst( );

  short nFields = rs.GetODBCFieldCount( );// 獲取記錄的字段數(shù)目

  UF_UI_open_listing_window( );

  while( !rs.IsEOF( ) )

  {

  for( short index = 1; index < nFields; index++ )

  {

  rs.GetFieldValue( index, temp );

  sprintf(buf,"%f",temp.m_dblVal );

  UF_UI_write_listing_window(buf );

  UF_UI_write_listing_window( "t" );

  }

  UF_UI_write_listing_window( " " );

  rs.MoveNext( );

  }

  rs.Close( );// 關(guān)閉記錄集

  }

  Database.Close(); // 關(guān)門(mén)數(shù)據(jù)庫(kù)連接

  }

  }

  catch( CDBException *pe ) // 出錯(cuò)處理

  {

  AfxMessageBox( "Exception!" );

  AfxMessageBox( pe->m_strError );

  pe -> Delete( );

  }

  }

  2.3 通過(guò)ADO訪問(wèn)外部數(shù)據(jù)

  ADO(ActiveX Data Objects)是微軟的數(shù)據(jù)庫(kù)對(duì)象技術(shù),ADO里面包括連接數(shù)據(jù)庫(kù)的對(duì)象,從查詢語(yǔ)句中返回?cái)?shù)據(jù)的記錄集對(duì)象和表現(xiàn)數(shù)據(jù)元素的字段對(duì)象。支持ADO編程的庫(kù)文件是msado15.dll,它默認(rèn)保存在“c:program filescommon silessystemado”目錄下,動(dòng)態(tài)鏈接庫(kù)msado15.dll封裝了ADO的所有功能。在默認(rèn)情況下,Visual C++不支持ADO對(duì)象。要在程序中使用ADO對(duì)象,需要使用#import命令將ADO庫(kù)文件導(dǎo)入到工程中,代碼如下:

  #import “c:Program FilesCommon FilesSystemadomsado15.dll” no_namespace rename(“EOF”,”adoEOF”) rename(“BOF”,”adoBOF”)

  參數(shù)no_namespace 表示不使用ADO的名字空間。為了避免出現(xiàn)常量名沖突,需要將EOF改名為adoEOF、BOF改名為adoBOF。

  ADO庫(kù)包含3個(gè)基本接口,即_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。它們分別對(duì)應(yīng)Connection對(duì)象、Command對(duì)象和Recordset對(duì)象。通過(guò)這三個(gè)基本接口可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。

  通過(guò)ADO訪問(wèn)數(shù)據(jù)庫(kù)的一般步驟如下:

  (1)連接到數(shù)據(jù)源;

  (2)指定訪問(wèn)數(shù)據(jù)源的命令(查詢、更新、刪除等操作命令);

  (3)執(zhí)行命令。

  有關(guān)ADO庫(kù)基本接口的使用方法請(qǐng)參見(jiàn)相關(guān)的參考手冊(cè),下面給出通過(guò)ADO訪問(wèn)Access數(shù)據(jù)庫(kù)表的實(shí)例程序代碼段:

  bool DoAdoTest( void )

  {

  // 初始化對(duì)COM的調(diào)用

  CoInitialize( 0 );

  _ConnectionPtr pConnection = NULL; // 連接

  _RecordsetPtr pRecordset = NULL; // 記錄集

  HRESULT hr = E_UNEXPECTED;

  CString strConnectionString( "Provider=Microsoft.Jet.OLEDB.4.0;Data 落Source=f:\ug\chapter3_4\screw.mdb" ); // 連接字符串

  CString strSqlCommandString( "SELECT * From screw_table " ); // SQL語(yǔ)句

  pConnection.CreateInstance( __uuidof( Connection ) ); // ( "ADODB.Connection" );

  pRecordset.CreateInstance( __uuidof( Recordset ) ); // ( "ADODB.Recordset" );

  try

  { hr = pConnection->Open( ( _bstr_t )strConnectionString, "", "", adModeUnknown ); // 連接數(shù)據(jù)庫(kù)

  MessageBox( NULL, "連接數(shù)據(jù)庫(kù)成功!", "提示", MB_OK | MB_ICONINFORMATION );

  }

  catch ( _com_error e )

  {

  MessageBox( NULL, "連接數(shù)據(jù)庫(kù)失敗!", "錯(cuò)誤", MB_OK | MB_ICon ERROR );

  return false;

  }

  try

  {

  hr = pRecordset->Open( ( _bstr_t )strSqlCommandString,

  _variant_t((IDispatch*)pConnection,true),

  adOpenStatic,

  adLockOptimistic,

  adCmdText ); // 獲取記錄集

  }

  catch ( _com_error* e )

  {

  e->ErrorMessage();

  MessageBox( NULL, "打開(kāi)記錄集失敗!", "錯(cuò)誤", MB_OK | MB_ICon ERROR );

  }

  CString tmp;

  UF_UI_open_listing_window();

  // 輸出字段名

  long lFieldsCount = -1;

  lFieldsCount = pRecordset->GetFields()->Count;

  for ( long i = 0; i < lFieldsCount; i++ )

  {

  tmp.Format( "%-7s", ( LPCSTR )pRecordset->GetFields()->Item[ i ]->Name );

  UF_UI_write_listing_window( ( LPTSTR )( LPCSTR )tmp );

  UF_UI_write_listing_window( "t" );

  }

  UF_UI_write_listing_window( " " );

  // 輸出所有記錄

  pRecordset->MoveFirst();

  while(!pRecordset->adoEOF)

  {

  tmp = pRecordset->GetCollect( 0L );

  UF_UI_write_listing_window( ( LPTSTR )( LPCSTR )tmp );

  ……//輸出記錄中其他字段值

  pRecordset->MoveNext();

  }

  pRecordset->Close();

  pRecordset = NULL;

  pConnection->Close();

  pConnection = NULL;

  CoUninitialize();

  return true;

  }

  3 結(jié)論

  在UG二次開(kāi)發(fā)過(guò)程中,確定選擇哪種方法訪問(wèn)外部數(shù)據(jù),取決于具體的應(yīng)用系統(tǒng)要求。通過(guò)UG/OPEN API編程較適合于對(duì)外部文本文件的訪問(wèn),可方便實(shí)現(xiàn)用戶與UG信息窗口交互等功能;通過(guò)ODBC和ADO技術(shù)可以訪問(wèn)各種支持的數(shù)據(jù)源,包括文本文件、Excel表及各種關(guān)系型數(shù)據(jù)庫(kù)表等,ADO與ODBC相比,使用更加簡(jiǎn)便,免去了繁瑣的配置數(shù)據(jù)源工作,但有些數(shù)據(jù)庫(kù)僅支持ODBC,不直接支持ADO數(shù)據(jù)庫(kù)技術(shù)。


欧美在线视频观看| 日产国产精品精品a∨| 亚洲综合伊人久久大杳蕉| www国产精品av| 日本高清不卡三区| 欧美激情性爽国产精品17p| 欧美性受xxx| 国产调教精品| 欧美激情在线有限公司| 成人信息集中地欧美| 欧美成人一二区| 亚洲日本欧美日韩高观看| 欧美人与禽猛交乱配| 欧美丰满高潮xxxx喷水动漫| 亚洲日本一区二区三区在线观看| 亚洲人精品午夜| mm131国产精品| 久久精品视频免费| 玩弄japan白嫩少妇hd| 日韩精品一区二区三区外面| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 首页欧美精品中文字幕| 99国精产品一二二线| 欧美黄色免费| 99re6热在线精品视频播放速度| 成人免费在线观看av| 成人黄色在线观看| 欧美激情1区2区| 欧美大香线蕉线伊人久久| 性感少妇一区| 在线不卡日本| 国产成a人无v码亚洲福利| 免费看的黄色大片| 亚洲国产高清在线观看视频| 丝袜制服影音先锋| 亚洲成人午夜电影| www在线播放| 欧美www视频| 99久久婷婷国产综合精品首页| 精品国产一区二区三区四区在线观看 | 日本精品一区二区三区四区的功能| 亚洲三区四区| 一本色道精品久久一区二区三区| 精品视频在线观看| 免费人成在线不卡| 黄网站色视频免费观看| 97se亚洲国产综合自在线不卡| 日日碰狠狠躁久久躁婷婷| 国产精品无圣光一区二区| 五月天婷婷综合社区| 欧美日韩在线第一页| 国产午夜视频在线观看| 国产免费av在线| 一本一道久久a久久| 亚洲制服丝袜av| 羞羞在线视频| 久久夜色精品一区| 可以免费看的黄色网址| 国产日产精品_国产精品毛片| 成人免费观看网址| 性欧美videos另类喷潮| 久久这里只有精品8| 国产精品久99| 日韩中文字幕视频在线观看| 2020国产在线| 欧美久久精品一级黑人c片 | 国产高清精品一区| 国产精品一区二区在线播放| 久久99999| 欧美一级生活片| 99久热这里只有精品视频免费观看| 成人日韩av在线| 丁香婷婷深情五月亚洲| 在线视频中文字幕久| 国产亚洲精品美女久久久久| 久久国产精品亚洲人一区二区三区| 亚洲精品美女久久7777777| 国产精品国产自产拍在线| 在线播放免费av| 欧美与欧洲交xxxx免费观看| 天堂成人国产精品一区| 国产xxxxx18| 亚洲人成毛片在线播放| 欧美一区二区三区久久精品| 北条麻妃在线视频观看| 欧美丝袜丝交足nylons| 日韩欧美一级| 日韩欧美99| 午夜国产精品影院在线观看| 欧美爱爱视频| 亚洲免费在线精品一区| 亚洲曰韩产成在线| 国产精品第一国产精品| 欧美国产一区二区在线| 一区二区三区在线高清| 亚洲资源在线| 中文字幕精品—区二区日日骚| 色综合久久天天综合网| 任你弄精品视频免费观看| 最新av网址在线观看| 欧美性受xxxx黑人xyx性爽| 日韩成人av在线资源| 国自产拍偷拍精品啪啪一区二区| 日韩欧美三级在线| 欧美日韩爆操| 人成福利视频在线观看| 97国产真实伦对白精彩视频8| 高清在线不卡av| 精品人人视频| 日韩欧美视频第二区| 欧美亚洲尤物久久| 午夜精品毛片| 超碰在线公开免费| 欧美在线一级视频| 国产精品久久久久久久久搜平片| 久久久久久久性潮| 欧美xxxx吸乳| 日韩麻豆第一页| 青青草一区二区三区| 成人片在线看| 欧美国产一二三区| 欧美一区二区三区成人| 一区二区动漫| 免费黄网在线观看| 久99久在线| 91精品国产高清一区二区三区| 色综合天天色综合| 欧美精品一区二区不卡 | 91.xxx.高清在线| 95av在线视频| 黄色精品一区二区| 成人激情免费视频| a天堂中文在线官网| 国产精品高潮视频| 亚洲自拍偷拍麻豆| 欧美成人milf| 色播色播色播色播色播在线 | 成人性生交大片免费看96| 丰满爆乳一区二区三区| 最近免费中文字幕视频2019| av电影在线观看不卡| 日本午夜精品久久久久| 咪咪色在线视频| 亚洲天堂成人在线| 91在线视频免费91| 婷婷综合一区| 欧美一区二区少妇| 古典武侠综合av第一页| 日本韩国一区二区三区| 欧美69视频| 色综合999| 成人免费视频91| 国外成人在线播放| 亚洲18色成人| 久久99伊人| 美女网站视频一区| 超碰影院在线观看| 国产精品高清在线观看| 色拍拍在线精品视频8848| 国产美女一区| 中文在线а√在线8| 成人一级片网站| 国产成+人+综合+亚洲欧洲| 色偷偷88欧美精品久久久| 免费久久99精品国产自在现线| 欧美xxxx黑人又粗又长| 青青青青在线视频| 日韩av电影在线免费播放| 欧美日韩国产精品一区二区三区四区 | 国产亚洲一级高清| 国产日韩欧美在线一区| 亚洲一区二区三区在线播放| 免费视频一区二区| 国产一区91| 精品99视频| 亚洲电影在线一区二区三区| 日韩欧美激情| 桃色av一区二区| 伦一区二区三区中文字幕v亚洲| 久久精品91| 国产在线精彩视频| 日韩av手机版| 国产高清在线一区| 中文字幕日韩av| 亚洲 欧美综合在线网络| 丝袜美腿亚洲色图| 999精品视频在这里| 8888四色奇米在线观看| 少妇大叫太大太粗太爽了a片小说| 琪琪第一精品导航| 欧美不卡一二三| 国产精品伦一区二区三级视频| 日韩视频在线一区二区三区 | 国产精品视频一二| 国产精品av久久久久久麻豆网| 在线黄色的网站| 在线播放av网站| 99久久免费观看| 成人精品视频99在线观看免费| 在线电影欧美日韩一区二区私密|