关闭

随便几句

标签: commandsql servervbnullwindows数据库
557人阅读 评论(0) 收藏 举报
分类:

看见别人都些Blog,从中吸取了许多有用的东东,自己也想写点,一是可以记录一些或许有价值的东西,另一方面遇到问题也可以发出来,让网上的众多高手帮忙解决。

今天将做的系统拿到企业实施,首先是小范围的,遇到的问题也不少,设置了主机,安装了数据库,将开发的系统安装到客户端,第一个就出现了问题,还好后面的没有问题,要不然真要Game Over了,查了一下,程序在XP下运行没问题,但在2000客户机上运行就出现程序中断的问题。上网查,终于搜到相同的症状,原来是这样的:

//////////////////////////////////////////////////////////////////////////////////////////

现象: 在开发机器上编译如下代码: #pragma warning(push)           // Needs to be done in order to suppress warning message #pragma warning(disable:4146)   // caused by bug in ADO (MS Knowledge Base article Q253317) #import "C:/Program Files/Common Files/system/ado/msado15.dll" /   no_namespace rename("EOF","adoEOF") #pragma warning(pop) ..... _CommandPtr pCmd = NULL; HRESULT hr = pCmd.CreateInstance("ADODB.Command"); 但是在客户的一台正常的Windows2000上却发生错误: Command指针创建失败,错误号:0x80004002,错误描述:没有此接口。 ·原因: 我们的开发机器上一般都装有MDAC2.7,这可能是因为装了SQL Server,也可能是WinXP自带的。 而客户机器上只有MDAC2.5。 由于微软的ADO开发小组习惯上总把ADO的最新版本命名为默认接口,如ADO2.5时将_Command25命名为_Command。 这样当你在MDAC2.7下编译VC代码,绑定的_Command的InterfaceID可能就是_Command2.7的接口ID。而在客户的MDAC2.5环境中 ,可能不存在这个接口ID,它的_Command的接口ID还是2.5的,和你的机器上的_Command接口ID肯定不一样。 所以以VC的方式创建_CommandPtr指针,是无法创建出来的。但是由于VB并不是绑定InterfaceID,所以VB中还可以正常创建ADO接口指针。 ·解决方法: 第一种:只在MDAC2.5环境下编译,并发布到MDAC2.5以上的客户环境中,但是WindXP就没有办法了; 第二种:强迫客户环境升级MDAC; 第三种:在MDAC2.7环境下编译,但是我们只明确表示创建Command25指针,如下所示: ADODB::Command25Ptr pCmdChange  = NULL; HRESULT hResult = pCmdChange.CreateInstance(__uuidof(ADODB::Command)); 第四种:选择使用OLEDB;

///////////////////////////////////////////////////////////////////////////

看了上面的一砣,知道了原因,但是解决起来觉得麻烦呀!

还好,小李子找到了更好的解决办法:

将原来的#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF") 改成#import "c:/program files/common files/system/ado/msado20.tlb" no_namespace rename("EOF","adoEOF")

问题解决了 哈哈 。。。。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34596次
    • 积分:568
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论
    SharePoint