我是一家非营利组织的 IT 部门。我今天有一个问题可能对这个论坛来说太专业了,我希望我不要浪费时间写出来。我们正在使用 Blackbaud 的“Raiser's Edge”(RE)软件(据我所知是用 VB6 和 VB.net 编写的)来跟踪我们的会员资格和捐款情况。我们有一个 MS Access 应用程序(在我们获得 RE 之前就一直在使用它)来处理捐赠,现在我想保留它,只做一些小的改动以使其适应新软件。
MS Access 程序现在对 RE API 进行了几次调用,效果很好。要登录并建立连接,我必须创建一个新的“REAPI”对象并将其用于其他 API 调用。该REAPI
对象有一个名为: 的方法SignOutOnTerminate
,在创建该对象时需要将其设置为 TRUE。一旦我的应用程序关闭,它应该会终止与 RE 的所有连接。没有常规的.close
方法。
一旦我创建了对象,我就可以根据需要多次工作,而且就我所见,完全没有问题。
但是,当尝试关闭应用程序或将对象设置为空(Set REAPI = Nothing
)时,Access 立即崩溃(它淡出,我收到消息说 Windows 正在寻找问题的解决方案。然后 Access 关闭并自行重新启动。)
它比阻碍生产更烦人和不专业,但我想修复它。
该应用程序是在 Windows 7 64 位和 Access 2010 32 位上开发的。它在带有 Office 2003 或 2007 计算机(32 位)的 Windows XP 上进行了测试,并且行为方式相同。
我已经在 2 Blackbaud 论坛上发布了这个问题,并尝试了一个建议的解决方法,但它不起作用(使用 shell 命令终止进程,然后将对象设置为空)。希望我能很快得到更多的答案。
我试图SignOutOnTerminate
在创建对象时排除 。但是得到了同样的行为。
我查看了事件管理器 --> 应用程序日志并找到了崩溃。它报告由于此 dll 导致访问崩溃:C:\Windows\System32\MSVBVM60.dll(它实际上位于 SysWos64 文件夹中,因为它是一个 32 位应用程序)。
查找此错误时,我发现了一些建议,可以将其替换为 XP 附带的早期版本的 dll。我找到了一个文件并尝试了该建议,但它仍然崩溃了。错误日志将旧版本号报告为错误,因此我正确注册了它。
我还用 Blackbaud 创建了一个案例,但代表不知道问题出在哪里,也没有安装 MS Access。他正试图让他的支持团队为他安装它,以便他可以测试和调查此错误。
我最后的怀疑是 API 导致了错误,我的代码很好。
但是在我做出这个假设之前,直到我从 Blackbaud 得到我的答案之前,我想做一个最后的检查,但是我已经没有进一步解决问题的想法,所以在这个论坛上提出了这个问题。
有任何想法吗?