【问题标题】:No values given for one or more required parameters error only on some Windows 7 machines仅在某些 Windows 7 机器上没有为一个或多个必需参数提供值错误
【发布时间】:2012-03-07 01:06:42
【问题描述】:

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

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

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

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

关于为什么会发生这种情况以及如何解决它的任何想法?

谢谢, 克里斯

【问题讨论】:

  • 你提到了 UAC。所以我猜你已经检查过这绝对不是由virtualisation of the "program files"目录引起的?
  • MarkJ 我尝试阅读您的链接,但在关注它时遇到了问题。我提到 UAC 是因为当我将应用程序的属性设置为“以管理员身份运行”以便 UAC 在打开时提示用户时,问题就消失了。
  • HansUp 我的开发环境或任何测试机器都没有问题,因此目前无法捕获查询。我正在努力使用有此问题的机器。我不确定这是否是 SQL 语句的问题,因为这适用于许多其他具有相同设置的计算机。

标签: ms-access windows-7 vb6 uac


【解决方案1】:

将数据库文件存储在 Program Files 中并不是一个好主意,因为该位置受到保护,标准用户和启用 UAC 的系统中的管理员无法对其进行写入。您应该将数据库存储在用户配置文件中的AppDataProgramData(如果需要在所有用户之间共享)。

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

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

所以检查VirtualStore中是否存在数据库文件,并尝试找出它与Program Files中存储的文件的区别。

【讨论】:

  • 这似乎是问题所在。我曾尝试使用 ProgramData 特殊文件夹,但这似乎会导致其他问题,我认为这些问题与清理代码比目录本身更相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多