尝试关闭与Blackbaud的Raiser's Edge API的连接时,MS Access崩溃

时间:2013-07-18 23:44:34

标签: access-vba

我是非营利组织的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位上开发的。它在Windows XP上使用Office 2003或2007计算机(32位)进行了测试,其行为方式相同。

我已经在2个Blackbaud论坛上发布了这个问题,并尝试了一个无法正常工作的建议(使用shell命令终止进程,然后将对象设置为空)。希望我能尽快得到更多答案。

我尝试在创建对象时排除SignOutOnTerminate。但是也有同样的行为。

我查看了活动管理器 - >应用程序日志,发现崩溃。它报告由于这个dll访问崩溃:C:\ Windows \ System32 \ MSVBVM60.dll(它实际上位于SysWos64文件夹中,因为它是一个32位应用程序)。

查看此错误我发现了一些建议,用早期版本的dll替换它,这是与XP一起提供的版本。我找到了一个文件并尝试了这个建议,但它仍然崩溃了。错误日志将旧版本号报告为错误,因此我正确注册了它。

我还用Blackbaud创建了一个案例,但代表不知道问题是什么,并且没有安装MS Access。他正试图让他的支持团队为他安装它,以便他可以测试并调查这个错误。

我最后的怀疑是API导致错误,我的代码很好。

但是在我做出这个假设之前,直到我从Blackbaud得到答案,我想做最后的检查,但是我已经用尽了进一步的故障排除的想法,并在这个论坛中提出了这个问题。

任何想法?

1 个答案:

答案 0 :(得分:7)

我意识到这是一个老线程,如果你现在已经解决了这个问题,那就太好了。然而,这是The Raiser's Edge API的一个已知问题。如果你使用.NET与RE的API(基于COM),肯定有一些资源没有正确清理。有一次,我怀疑使用RE的图形界面,即调用常规登录方法登录RE。但是,即使您使用提供用户名和密码的“作为服务器”方法登录RE,它仍然会在退出应用程序时崩溃。

我们有一个安装程序,可以在RE中设置凭据。安装程序在.NET中并访问RE API。我们现在在应用程序结束之前显示一条消息,告诉用户忽略即将发生的崩溃......无论如何都不是一个好的解决方案。