Ms access 仅在某些Windows 7计算机上,没有为一个或多个必需参数提供值错误

Ms access 仅在某些Windows 7计算机上,没有为一个或多个必需参数提供值错误,ms-access,windows-7,vb6,uac,Ms Access,Windows 7,Vb6,Uac,我有一个VB6应用程序,可以在大多数Windows 7机器上正常工作(即使UAC已打开),但对于其中一些机器,如果程序在启动时未设置为“以管理员身份运行”,则在尝试查询数据库时,会返回错误消息“一个或多个必需参数未给定值” 我知道错误消息通常意味着表名和/或参数拼写错误。但这里的情况并非如此,因为相同的应用程序执行相同的过程/查询调用在Win XP和一些Win 7机器上没有问题 数据库为MS Access 2003格式。数据库与应用程序exe和DLL一起位于Program Files目录中 如果

我有一个VB6应用程序,可以在大多数Windows 7机器上正常工作(即使UAC已打开),但对于其中一些机器,如果程序在启动时未设置为“以管理员身份运行”,则在尝试查询数据库时,会返回错误消息“一个或多个必需参数未给定值”

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

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

如果这是一个持续的错误,那么我可以很容易地调试它并继续,但是由于我所有的测试机器都没有生成这个错误,我就不知所措了

关于为什么会发生这种情况以及如何解决它,有什么想法吗

谢谢,
Chris

将数据库文件存储在程序文件中不是一个好主意,因为此位置受保护,并且支持UAC的系统中的标准用户和管理员无法对其进行写入。如果需要在所有用户之间共享数据库,则应将数据库存储在用户配置文件中的
AppData
,或
ProgramData

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

当您以管理员身份启动应用程序时,虚拟化将被禁用,您将访问位于程序文件中的文件


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

您已经提到了UAC。所以我想你已经检查过了,这肯定不是由目录引起的?MarkJ我试着读了你的链接,但没能看懂。我提到UAC是因为当我将应用程序的属性设置为“以管理员身份运行”以便UAC在打开时提示用户时,问题就消失了。HansUp我的开发环境中没有这个问题,或者我的任何测试机都没有,因此此时无法捕获查询。我正在着手一台有这个问题的机器。我不确定SQL语句是否会有问题,因为这在许多其他具有相同设置的计算机上都可以正常工作。这似乎就是问题所在。我曾尝试使用
ProgramData
特殊文件夹,但这似乎导致了其他问题,我认为这些问题与清理代码比目录本身更相关。