找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 669|回复: 6

[求助]:关于ADO的一段代码加入ARX里出错!!

[复制链接]
发表于 2003-6-2 18:43:22 | 显示全部楼层 |阅读模式

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

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

×
在VC的环境里编译通过,但在ARX的某个命令的函数里添加就出现编译错误 说是有

g:\ddcad\草稿\classtest\debug\msado15.tlh(171) : error C2011: 'LockTypeEnum' : 'enum' type redefinition
g:\ddcad\草稿\classtest\debug\msado15.tlh(214) : error C2011: 'DataTypeEnum' : 'enum' type redefinition
g:\ddcad\草稿\classtest\debug\msado15.tlh(258) : error C2011: 'FieldAttributeEnum' : 'enum' type redefinition
g:\ddcad\草稿\classtest\debug\msado15.tlh(279) : error C2011: 'EditModeEnum' : 'enum' type redefinition
g:\ddcad\草稿\classtest\debug\msado15.tlh(287) : error C2011: 'RecordStatusEnum' : 'enum' type redefinition
g:\ddcad\草稿\classtest\debug\msado15.tlh(530) : error C2011: 'ParameterDirectionEnum' : 'enum' type redefinition
g:\ddcad\草稿\classtest\debug\msado15.tlh(2664) : error C2059: syntax error : 'constant'

代码如下:
/////////////////////////////////////////////////////////////////////////#import "D:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
///////////////////////////////////////////

  1.            //测试数据库连接
  2. AfxOleInit();
  3.             
  4.             char *IDKEY =new char[256];
  5.                 strcpy(IDKEY ,"IDKEY");
  6.            _RecordsetPtr  pRecordset;
  7.            char* idKey ;
  8.            char * curTable;
  9.            _variant_t recordsAffected;  
  10.            _ConnectionPtr pConnection=NULL;
  11.              char * tmSysPath=NULL;

  12. //路径
  13.            if (tmSysPath==NULL) {
  14.                    tmSysPath=new char[1024];
  15.                    strcpy(tmSysPath ,"G:\\Ddcad\\Ddsz2004\\userinfo.mdb");

  16.                    }


  17.           
  18.            if (pConnection==NULL)
  19.            {
  20.                   
  21.                    pConnection.CreateInstance("ADODB.Connection");
  22.                   
  23.                    try
  24.                    {
  25.                            pConnection->ConnectionTimeout = 8;
  26.                            char *datsource=new char[1024];
  27.                           
  28.                            strcpy(datsource,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="); //将来可以考虑连接不同的数据库
  29.                            strcat(datsource, tmSysPath );
  30.                           
  31.                           
  32.                            //AfxMessageBox(datsource);
  33.                            pConnection->Open(datsource ,"","",adModeUnknown);
  34.                    }
  35.                    catch(_com_error e)///捕捉异常
  36.                    {   
  37.                    AfxMessageBox("  数据库连接失败!");
  38.                    }
  39.            }
  40.           
  41.            ///初始化必要变量
  42.            curTable=new char[256]="users";  //真的可以这样初始化一个字符串!!
  43.            idKey="ID001";
  44.             
  45.                        AfxMessageBox("   !");
  46.            char * dat=new char (256);
  47.            strcpy(dat , "xxxxxx");
  48.            char * dataname=new char (256);
  49.            strcpy(dataname , "tablx");

  50.            char* sqlcmd=new char(256);

  51.                    sprintf(sqlcmd ,"%s%s%s%s%s%s%s%s%s","SELECT ",dataname,  \
  52.                            " from " , curTable ," where ",IDKEY ,"='",idKey ,"'" );   
  53.                   
  54.                    try
  55.                    {           
  56.                           
  57.                            pConnection->Execute( sqlcmd ,&recordsAffected,adCmdText);
  58.                  
  59.                    }
  60.                    catch ( ... )
  61.                    {  
  62.                            AfxMessageBox("查找数据失败"); //调试使用显示
  63.                           
  64.                    }       
  65.                    //下面将搜索到底数据取出来。执行SQL统计命令得到包含记录条数的记录集
  66.        
  67.                    pRecordset =pConnection->Execute(sqlcmd,&recordsAffected,adCmdText);
  68.                    _variant_t vIndex = (long)0;
  69.                    _variant_t vCount = pRecordset->GetCollect(vIndex);///取得第一个字段的值放入vCount变量
  70.                    pRecordset->Close();///关闭记录集

  71.                    if (V_VT(&vCount) ==VT_NULL)  // 判断vCount获取合适的值??
  72.                    {      
  73.                            delete sqlcmd;            
  74.                    }
  75.            else
  76.                    {
  77.                   
  78.                    _bstr_t bstr(vCount) ;   
  79.                     strcpy(dat,(char *)bstr);          
  80.                      AfxMessageBox(dat); //可以获取自己需要的值!!
  81.                    pConnection->Close();
  82.                    delete sqlcmd;
  83.                    }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-6-2 20:40:40 | 显示全部楼层
以下代码要去掉

  1.   [FONT=courier new]
  2. #ifndef _AFX_NO_DB_SUPPORT
  3. #include <afxdb.h>          // MFC ODBC database classes
  4. #endif // _AFX_NO_DB_SUPPORT

  5. #ifndef _AFX_NO_DAO_SUPPORT
  6. #include <afxdao.h>         // MFC DAO database classes
  7. #endif // _AFX_NO_DAO_SUPPORT
  8.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-2 21:49:15 | 显示全部楼层
我也遇到过,我用的是最笨的办法
#define INITGUID
#import "C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"\
        no_namespace rename("EOF", "EndOfFile"),\
        no_namespace rename("LockTypeEnum", "LockTypeEnumA"),\
        no_namespace rename("DataTypeEnum", "DataTypeEnumA"),\
        no_namespace rename("FieldAttributeEnum", "FieldAttributeEnumA"),\
        no_namespace rename("EditModeEnum", "EditModeEnumA"),\
        no_namespace rename("RecordStatusEnum", "RecordStatusEnumA"),\
        no_namespace rename("ParameterDirectionEnum", "ParameterDirectionEnumA"),\
        no_namespace rename("EOS", "EOSA")
有什么好方法,请高手赐教
楼上讲的我不太明白,能否解释一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-2 23:02:35 | 显示全部楼层
最初由 kable 发布
[B]我也遇到过,我用的是最笨的办法
#define INITGUID
...
有什么好方法,请高手赐教
楼上讲的我不太明白,能否解释一下[/B]

因为在ODBC/DAO中也用到了上述系列符号, 引起了符号冲突
(可在stdio.h 中找到EOF的定义, 所以ADO里的EOF也需要更名)
如果在你的程序中只用ADO而不用ODBC/DAO,那么Binbin的方法是可行的,
如果需要同时用ADO/ODBC/DAO,可使用namespace来解决符号冲突

  1. #pragma warning (disable: 4146)
  2. #import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF", "EndOfFile")
  3. using namespace ADODB;
  4. #pragma warning (default: 4146)


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

使用道具 举报

发表于 2003-6-11 12:02:38 | 显示全部楼层
// 加入ADO支持库
#import "c:\program files\common files\system\ado\msado15.dll" \
        no_namespace \
rename ("EOF", "adoEOF")  
记得要把DAO和ODBC的头文件去掉(向导会自动生成的代码)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 557个

财富等级: 财运亨通

发表于 2004-9-22 10:38:22 | 显示全部楼层
#pragma warning (disable: 4146)
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF", "EndOfFile")
using namespace ADODB;
#pragma warning (default: 4146)
这样不行,编译出错。
#ifndef _AFX_NO_DB_SUPPORT
#include           // MFC ODBC database classes
#endif // _AFX_NO_DB_SUPPORT

#ifndef _AFX_NO_DAO_SUPPORT
#include          // MFC DAO database classes
#endif // _AFX_NO_DAO_SUPPORT
去掉这个也不行,是不是还要去掉别的,能不能贴一个你的StdAfx.h文件上来。
用rename可以,但是太麻烦了。谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 04:03 , Processed in 0.271048 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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