找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1649|回复: 21

请教ado cao方面问题

[复制链接]
发表于 2002-10-24 14:36:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我在arx中用ado 出错,哪位有ado cao 方面的开发例子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-24 21:42:19 | 显示全部楼层

Re: 请教ado cao方面问题

最初由 sv300 发布
[B]我在arx中用ado 出错,哪位有ado cao 方面的开发例子 [/B]


把代码贴到论坛来吧,大家一起摸索下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-24 21:49:13 | 显示全部楼层

Re: 请教ado cao方面问题

最初由 sv300 发布
[B]我在arx中用ado 出错,哪位有ado cao 方面的开发例子 [/B]


我的意见是建议你不要用CAO,AutoDESK的数据库引擎总在变。其实使用ADO就可以很好的解决问题,而且可移植性也高。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-24 22:15:35 | 显示全部楼层

Re: 请教ado cao方面问题

最初由 sv300 发布
我在arx中用ado 出错,哪位有ado cao 方面的开发例子


给你一段代码


  1. // db.cpp
  2. // 仅可用于XXXXX系统的数据库操作函数集, by XXXX [2002年九月], GIS, XXX
  3. #include "StdAfx.h"
  4. #include "StdArx.h"

  5. extern HINSTANCE _hdllInstance;
  6. _ConnectionPtr m_pConnection;
  7. CString arxPath;

  8. BOOL ConnectDB(){
  9.         char fn[256], *p;
  10.         CString strConn;
  11.         BSTR bstrCONN;
  12.        
  13.         GetModuleFileName( _hdllInstance, fn, 256 );
  14.        
  15.         if( (p=strrchr(fn,'\\'))!=NULL )
  16.                 *(p+1)='\0';
  17.         arxPath=fn;
  18.        
  19.         strcat( fn, "sql.udl" );
  20.        
  21.         AfxOleInit();///初始化COM库
  22.         ////////////连接数据库//////////////
  23.         HRESULT hr;
  24.         try{
  25.                 hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
  26.                 if(SUCCEEDED(hr))
  27.                 {
  28.                         strConn.Format("FILE NAME=%s",fn);
  29.                         bstrCONN=strConn.AllocSysString();
  30.                         hr = m_pConnection->Open(bstrCONN,"","",adModeUnknown);///连接数据库
  31.                         SysFreeString(bstrCONN);//感谢 msaterHer
  32.                 }
  33.         }
  34.         catch(_com_error e){
  35.                 CString errormessage;
  36.                 errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
  37.                 AfxMessageBox(errormessage);///显示错误信息
  38.                 return FALSE;
  39.         }
  40.         return TRUE;
  41. }

  42. void DisConnectDB(){
  43.         if(m_pConnection->State)
  44.                 m_pConnection->Close();
  45.         m_pConnection=NULL;
  46. }

  47. BOOL FoundRec(int MapType,int RecordID)
  48. {
  49.         _RecordsetPtr m_pRecordset=NULL;
  50.         CString strSQL,strTable,strKey;
  51.         BSTR bstrSQL;
  52.         int nCount;
  53.         _variant_t TheValue;
  54.        
  55.         if (MapType==0){
  56.                 strTable="LayerTp";
  57.                 strKey="CXH";
  58.         }else{
  59.                 strTable="RoomTp";
  60.                 strKey="HXH";
  61.         }
  62.        
  63.         strSQL.Format("select count(*) as CNT from %s where %s = %d",strTable,strKey,RecordID);
  64.         bstrSQL=strSQL.AllocSysString();
  65.        
  66.         try{
  67.                 m_pRecordset.CreateInstance("ADODB.Recordset");
  68.                 m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
  69.                 TheValue=m_pRecordset->GetCollect("CNT");
  70.                 if(TheValue.vt!=VT_NULL)
  71.                         nCount=TheValue.intVal;
  72.                 m_pRecordset->Close();
  73.                 m_pRecordset=NULL;
  74.         }
  75.         catch(_com_error e)
  76.         {
  77.                 AfxMessageBox(e.ErrorMessage());
  78.                 SysFreeString(bstrSQL);
  79.                 return FALSE;
  80.         }
  81.         SysFreeString(bstrSQL);
  82.         if (nCount==1)
  83.                 return TRUE;
  84.         else
  85.                 return FALSE;
  86. }
复制代码


  1. /////////////////////////////////////////////////////////////////////////////
  2. // ObjectARX EntryPoint
  3. extern "C" AcRx::AppRetCode
  4. acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
  5. {
  6.         switch (msg) {
  7.         case AcRx::kInitAppMsg:
  8.                 AfxSetResourceHandle (_hdllInstance) ;
  9.                 CSplashScreen::EnableSplashScreen (TRUE) ;
  10.                 CSplashScreen::ShowSplashScreen (acedGetAcadFrame ()) ;
  11.                 AfxSetResourceHandle (acedGetAcadResourceInstance ()) ;
  12.                 // Comment out the following line if your
  13.                 // application should be locked into memory
  14.                 acrxDynamicLinker->unlockApplication(pkt);
  15.                 acrxDynamicLinker->registerAppMDIAware(pkt);
  16.                 [COLOR=crimson][B]if (!ConnectDB()) return AcRx::kRetError;[/B][/COLOR]
  17.                 InitApplication();
  18.                 break;
  19.         case AcRx::kUnloadAppMsg:
  20.                 [COLOR=crimson][B]DisConnectDB();[/B][/COLOR]
  21.                 UnloadApplication();
  22.                 break;
  23.         }
  24.         return AcRx::kRetOK;
  25. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-25 09:08:17 | 显示全部楼层

Re: Re: 请教ado cao方面问题

最初由 rave 发布
[B]

给你一段代码

[code]
// db.cpp
// 仅可用于XXXXX系统的数据库操作函数集, by XXXX [2002年九月], GIS, XX... [/B]


1、有几处内存未释放;
2、这段代码是标准ADO联接的一种方式,在ARX中AfxOleInit用不着
3、BSTR、CString、CHAR*的转换关系可以尽一步更好地处理,这也是造成内存未释放的原因,可以使用comdef.h中的_bstr_t和_variant_t或者CComBSTR和CComVariant
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-25 09:36:16 | 显示全部楼层
提供一个ADO库的完整解决方案,是2.5的。示例见:ADOToolBoxs.h
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-25 10:12:34 | 显示全部楼层
谢谢楼上几位
这些都是ado方面的例子,有没有cao方面的呢?
我看到cao有些属性和方法,但是不知道怎么在arx 中应用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-27 21:13:41 | 显示全部楼层

关于CAO技术的介绍

最初由 sv300 发布
[B]谢谢楼上几位
这些都是ado方面的例子,有没有cao方面的呢?
我看到cao有些属性和方法,但是不知道怎么在arx 中应用 [/B]


给你贴篇资料,关于CAO技术的介绍:


  1. [FONT=courier new]
  2. Samples and documentation for using CAO from VB and Visual LISP are included
  3. with AutoCAD 2000, but there is no documentation for CAO from C++.  However, you
  4. can access the CAO Object Model in C++ just as any other ActiveX interface. This
  5. solution contains a simple code sample that illustrates how this can be done.  

  6. CAO is an interface to what were formerly known as ASE links (which still works
  7. much the same in terms of the AutoCAD drawing database), and it can be used from
  8. various environments, including C++, VB, VBA and Visual LISP.  But it also
  9. represents the introduction of OLEDB / ADO within AutoCAD and a new terminology
  10. scheme, so it qualifies as "new technology".

  11. In AutoCAD 2000 you can currently do more with the C++ ASE API (for instance,
  12. create Link Templates) than you can with CAO.  

  13. Here's the code sample:
  14. #include "aced.h"
  15. #include "migrtion.h"

  16. #import "e:\\acad2000\\acad.tlb" no_namespace no_ \
  17. implementation raw_interfaces_only named_guids

  18. void arxtest()
  19. {
  20.         IAcadApplication* pAcadApp;

  21.         HRESULT hr = NOERROR;         
  22.         CLSID clsid;         
  23.         LPUNKNOWN pUnk = NULL;
  24.         LPDISPATCH pDisp = NULL;         

  25.         CoInitialize(NULL);
  26.        
  27.         hr = ::CLSIDFromProgID(L"AutoCAD.Application", &clsid);          

  28.         if (FAILED(hr))
  29.         {
  30.                 ads_alert("Acad.Application is not registered!");
  31.                 CoUninitialize();
  32.                 return;
  33.         }

  34.         hr = ::GetActiveObject(clsid, NULL, &pUnk);
  35.         if (SUCCEEDED(hr))
  36.         {
  37.                 hr = pUnk->QueryInterface(IID_IDispatch, (LPVOID*)&pDisp);
  38.                 pUnk->Release();
  39.                 if (FAILED(hr))
  40.                 {
  41.                         CoUninitialize();
  42.                         return;
  43.                 }
  44.                
  45.                 hr = pDisp->QueryInterface(IID_IAcadApplication,
  46. (void**)&pAcadApp);
  47.                 pDisp->Release();

  48.                 if (SUCCEEDED(hr))
  49.                 {
  50.                         LPDISPATCH pCAO = NULL;
  51.                         hr =
  52. pAcadApp->GetInterfaceObject(OLESTR("CAO.DbConnect"), &pCAO);
  53.                         pAcadApp->Release();

  54.                         if (FAILED(hr))
  55.                                 ads_printf("\nFailed to get CAO.");
  56.                         else
  57.                         {
  58.                                 ads_printf("\nGot CAO!");
  59.                                 VARIANT varResult;
  60.                                 //initialize the variant
  61.                                 VariantInit(&varResult);

  62.                                 OLECHAR *szMember = L"Version";
  63.                                 DISPID dispid;
  64.                                 DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0,
  65. 0};

  66.                                 hr = pCAO->GetIDsOfNames(IID_NULL, &szMember, 1,
  67.                                         LOCALE_USER_DEFAULT, &dispid);
  68.                                 hr = pCAO->Invoke(dispid, IID_NULL,
  69. LOCALE_USER_DEFAULT,
  70.                                         DISPATCH_PROPERTYGET, &dispparamsNoArgs,
  71. &varResult, NULL, NULL);

  72.                                 if (SUCCEEDED(hr))
  73.                                 {
  74.                                         BSTR version = V_BSTR(&varResult);
  75.                                         size_t size = SysStringByteLen(version);
  76.                                         char* szVersion = new char[size];
  77.                                         wcstombs(szVersion, version, size);
  78.                                         ads_printf("\nVersion:        %s", szVersion);
  79.                                         SysFreeString(version);
  80.                                         free(szVersion);
  81.                                 }
  82.                                 pCAO->Release();
  83.                         }
  84.                 }
  85.         }       
  86.        
  87.         CoUninitialize();
  88. }
  89. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-28 01:40:38 | 显示全部楼层
再贴篇ARX使用ADO COM 的资料:

在ARX程序中使用ADO / OLEDB ActiveX 数据库存取API的方法

游客,如果您要查看本帖隐藏内容请回复
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-28 10:09:05 | 显示全部楼层
CAO好像是做协作用的组件,不知各位在ACAD中用来开发什么系统?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 192个

财富等级: 日进斗金

发表于 2002-10-30 14:00:39 | 显示全部楼层
cao是什么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-30 14:08:41 | 显示全部楼层
最初由 照猫画虎 发布
[B]cao是什么 [/B]

按英文发音读
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 192个

财富等级: 日进斗金

发表于 2002-10-31 13:42:37 | 显示全部楼层
还是不明白
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2002-10-31 16:08:54 | 显示全部楼层
最初由 照猫画虎 发布
[B]还是不明白 [/B]


照猫画虎啊,“靠”
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 192个

财富等级: 日进斗金

发表于 2002-11-1 14:28:37 | 显示全部楼层
不是这个意思吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 16:25 , Processed in 0.353710 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表