ADO连接ACCESS换个操作系统运行报错问题

dingdingzone 2012-04-23 10:43:47
大家好,我最近用VC6.0做了一个小程序碰到一个让人很郁闷的事情!我原先以为程序功能全部实现了,程序就可以提交了。但是我在做兼容性测试的时候发现:
1.我的系统(windows 7 32位)运行没有问题,以为在所有这个平台上运行都没有问题,但是经朋友测试不是所有win 7 32位的系统都能运行成功。
2.XP运行就报错,通过调试发现运行到_RecordsetPtr pRS("ADODB.Recordset"); 这句就崩溃了。
3.windows 7 64位的系统经我朋友和与我反复验证,发现其干脆就没有反应。我想很可能是其不支持VC6.0的原因吧!

以下是我连接数据库的代码

CoInitialize(NULL);
_ConnectionPtr pConn("ADODB.Connection");
_RecordsetPtr pRS("ADODB.Recordset"); //XP过不了这句
temp="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+m_datapath+"\\data\\database.mdb";
pConn->ConnectionString=(_bstr_t)temp;
pConn->Open("","","",-1);
temp="....";
pRS=pConn->Execute((_bstr_t)temp,NULL,adCmdText);
.....
pRS->Close();
pConn->Close();
pRS.Release();
pConn.Release();
CoUninitialize();

备注:temp为CString类型,可能有人会要我try..catch我试过了!直接跪了!而且通过反复确认路径没有问题

还有就是我在stdafx.h文件添加的一条代码为:

#import "control\msado15.dll" no_namespace rename("EOF","rsEOF")

备注:msado15.dll版本为6.1.7601.17514

报的错都是:abnormal program termination

麻烦大家帮我看下,先谢谢了
...全文
194 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingdingzone 2012-04-24
  • 打赏
  • 举报
回复
还有个问题VC6编写的MFC程序是不是一定不可能在windows 7 64位下面运行呀?我找了几个朋友试了下,根本就点不开!做过其他尝试,除了使用虚拟机外!其他都以失败告终,大家有不有解决方法呀?
(我试过通过VS2010转化来解决,转换过后错误太多根本就无从改起)
dingdingzone 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

安装补丁KB983246
[/Quote]
这绝对是目前最好的解决方法!!太感谢了


[Quote=引用 7 楼 的回复:]

这的确可以解决大部分系统的问题,但是太死了!万一那个人的系统分区不是C盘那么。。。

这种情况不用考虑


如果真想解决,就不用import ... ado.dll
换其他的
[/Quote]
谢谢您的提议,我想这应该能从根源上解决这个问题
BombZhang 2012-04-24
  • 打赏
  • 举报
回复
前一阵我也遇到这个问题,安装补丁KB983246就好了
在csdn资源里有xp vista和win7的这个补丁
dingdingzone 2012-04-24
  • 打赏
  • 举报
回复
楼上的问题是不好解决,准备结贴了啦!!
BombZhang、xianglitian 你们的分我在另一个帖子给你们呀!(现在看来我这可是80分的帖子呀 呵呵)
其他朋友就在这个帖子给分啦!

再次谢谢各位的帮助
dingdingzone 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 另一个帖子 的回复:]

应该是兼容性的问题
把msado15.dll给程序带着放到执行目录下试试
[/Quote]

我试了下不行
BombZhang 2012-04-24
  • 打赏
  • 举报
回复
安装补丁KB983246
tubo_true 2012-04-24
  • 打赏
  • 举报
回复
这的确可以解决大部分系统的问题,但是太死了!万一那个人的系统分区不是C盘那么。。。

这种情况不用考虑


如果真想解决,就不用import ... ado.dll
换其他的
dingdingzone 2012-04-24
  • 打赏
  • 举报
回复
昨晚无意间刷新了两下,后来才发现提交了两次!
本准备舍弃一个帖子的,之后才意识到另一个帖子还有一定作用,由于不能修改发布的内容且有禁止三次连续发帖的限制,所以我就将一部分内容写到了另一个帖子里

如果版主看到这则消息,能否帮我一下?
向立天 2012-04-24
  • 打赏
  • 举报
回复
两个一样的帖子
dingdingzone 2012-04-23
  • 打赏
  • 举报
回复
我想到一个不是很好的方法:
//替换掉#import "control\msado15.dll" no_namespace rename("EOF","rsEOF")为
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")


这的确可以解决大部分系统的问题,但是太死了!万一那个人的系统分区不是C盘那么。。。

我想应该有什么办法可以强制运行前更新其系统的版本至某一个更高的版本吧?
dingdingzone 2012-04-23
  • 打赏
  • 举报
回复
我想到一个不是很好的方法,

//换这句话为#import "control\msado15.dll" no_namespace rename("EOF","rsEOF")
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")


这的确可以解决大部分系统的问题,但是太死了!万一那个人的系统分区不是C那么。。。

我想应该有什么办法可以强制运行前更新其系统的版本至某一个更高的版本吧?
dingdingzone 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

WIN7的ADO版本GUID变了,需要在XP上编译,在WIN7上就会高版本兼容低版本可以运行了。
[/Quote]
谢谢您的回答,我刚才已经试出来

在XP(虚拟机)下可以正常运行了!我的方法是移植到一个平台后,先将本地的msado15.dll的文件替换掉工程中的该文件,然后删除debug目录、msado15.tlh文件及msado15.tli文件(经后来测试后两个文件可以不删),再在XP平台下重新编译就可以运行了!

我想正如一楼所言和msado15.dll的版本有莫大的关系!

我还有一个问题:那么我们写该类程序是不是都应该选择一个合适版本的msado15.dll的文件呢?大家在面对这个问题时都是如何处理的呢?
zyq5945 2012-04-23
  • 打赏
  • 举报
回复
WIN7的ADO版本GUID变了,需要在XP上编译,在WIN7上就会高版本兼容低版本可以运行了。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧