2012-02-15 84 views
1

我有一个可在大多数Windows 7计算机上正常工作的VB6应用程序(即使启用了UAC),但对于其中一些程序,如果程序不是在启动时设置为'以管理员身份运行',它会在尝试查询数据库时返回错误消息'没有给出一个或多个必需参数的值'。仅在某些Windows 7计算机上出现一个或多个必需参数错误

我知道错误消息通常意味着表名和/或参数拼写错误。但是这不是这种情况,因为在Win XP和一些Win 7机器上执行相同的操作/查询调用的相同的应用程序没有问题。

该数据库是MS Access 2003格式。数据库与应用程序exe和dll一起位于Program Files目录中。

如果这是一个一致的错误,那么我可以很容易地调试它并继续前进,但由于我所有的测试机器都不会产生这个错误,所以我很茫然。

任何想法为什么发生这种情况,以及如何解决它?因为这个位置是保护和标准用户和管理员在启用UAC的系统,不能写它

谢谢, 克里斯

+0

你已经提到过UAC。所以我想你已经检查过,这肯定不是[虚拟化的“程序文件”](http://support.microsoft.com/kb/927387)目录造成的? – MarkJ 2012-02-15 17:13:17

+0

MarkJ我尝试阅读你的链接,但遇到了麻烦。我提到了UAC,因为当我将应用程序的属性设置为'以管理员身份运行'时,UAC在打开时提示用户,问题就消失了。 – 2012-02-15 19:47:18

+0

HansUp我在我的开发环境中没有这个问题,或者我的任何测试机器在这个时候都不可能捕获查询。我正在致力于解决有此问题的机器。我不确定这是SQL语句的问题,因为它可以在很多其他计算机上使用相同的设置。 – 2012-02-15 19:50:05

回答

3

在计划文件中存储数据库文件是不是一个好主意。如果需要在所有用户之间共享数据库,则应将该数据库存储在用户简档中的AppDataProgramData中。

由于标准用户无法写入Program Files,因此Vista/7具有虚拟化机制。如果没有对Program Files的写入权限的程序试图在那里写入,则文件系统会将请求重定向到用户的配置文件。虚拟化的Program Files目录位于C:\Users\<account>\AppData\Local\VirtualStore。我想你会因为虚拟化而看到这个错误:数据库可能存在于两个位置,即真实的Program Files和虚拟化的文件夹中,并且文件可能不同。虚拟化版本无法获得所需的记录,这就是为什么您会收到错误消息。

以管理员身份启动应用程序时,虚拟化已禁用,您可以访问位于Program Files中的文件。

因此请检查数据库文件是否存在于VirtualStore中,并尝试查找它与存储在Program Files中的文件之间的差异。

+0

这似乎是问题所在。我试图利用'ProgramData'特殊文件夹,但是这似乎导致了其他问题,我认为这些问题与清理代码相比目录本身更相关。 – 2012-04-26 13:56:03

相关问题