仅在某些 Windows 7 计算机上,未为一个或多个必需参数给出值错误

发布于 2025-01-05 17:21:29 字数 412 浏览 1 评论 0原文

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

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

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

如果这是一个一致的错误,那么我可以轻松地对其进行调试并继续,但由于我所有的测试机器都不会生成此错误,所以我不知所措。

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

谢谢, 克里斯

I have a VB6 application that works fine on most Windows 7 machines (even with UAC turned on), but for some of them if the program is not set to 'Run as administrator' upon startup it will return the error message 'No value given for one or more required parameters' when it tries to query the database.

I know the error message usually means that the table name(s) and/or parameter(s) are spelled incorrectly. But that is not the case here since the same application doing the same proceedures/query calls has no issues on Win XP and some Win 7 machines.

The database is MS Access 2003 format. The database is located in the Program Files directory along with the application exe and dlls.

If this was a consistant error then I could easily debug it and move on, but since all my testing machines do not generate this error, I am at a loss.

Any ideas as to why this occurs and how to fix it?

Thanks,
Chris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风吹过旳痕迹 2025-01-12 17:21:30

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

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

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

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

Storing database file in Program Files is not a good idea because this location is protected and standard users, and administrators in UAC-enabled system, cannot write to it. You should store the database either in AppData in user's profile or ProgramData if it needs to be shared between all users.

Since standard users cannot write to Program Files, Vista/7 have Virtualization mechanism. If a program without write access to Program Files tries to write there, the file system redirects the request to user's profile. The virtualized Program Files directory is located in C:\Users\<account>\AppData\Local\VirtualStore. I think you see this error because of virtualization: the database may exist in both locations the real Program Files and the virtualized one, and the files can be different. The virtualized version could not have the required records, that's why you get the error message.

When you start your application as Administrator, Virtualization is disabled and you access the file located in Program Files.

So check if the database file exists in VirtualStore, and try to find the differences between it and the file stored in Program Files.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文