我有一个VB6应用程序在大多数Windows 7计算机上运行正常(即使启用了UAC),但是对于其中一些应用程序,如果程序在启动时没有设置为“以管理员身份运行”,它将返回错误消息'在尝试查询数据库时,没有给出一个或多个必需参数的值。
我知道错误消息通常意味着表名和/或参数拼写错误。但事实并非如此,因为执行相同的执行/查询调用的相同应用程序在Win XP和一些Win 7机器上没有问题。
数据库是MS Access 2003格式。该数据库与应用程序exe和dll一起位于Program Files目录中。
如果这是一个一致的错误,那么我可以轻松地调试它并继续前进,但由于我的所有测试机器都没有产生这个错误,我感到很茫然。
关于为什么会发生这种情况以及如何解决它的任何想法?
谢谢, 克里斯
答案 0 :(得分:3)
在Program Files中存储数据库文件不是一个好主意,因为此位置受到保护,标准用户和启用UAC的系统中的管理员无法写入。如果需要在所有用户之间共享,您应该将数据库存储在用户个人资料中的AppData
或ProgramData
。
由于标准用户无法写入Program Files,因此Vista / 7具有虚拟化机制。如果没有对Program Files的写访问权的程序尝试在那里写入,则文件系统会将请求重定向到用户的配置文件。虚拟化Program Files目录位于C:\Users\<account>\AppData\Local\VirtualStore
。我认为你会因为虚拟化而看到这个错误:数据库可能存在于真实的Program Files和虚拟化的文件中,文件也可能不同。虚拟化版本无法获得所需的记录,这就是您收到错误消息的原因。
以管理员身份启动应用程序时,将禁用虚拟化并访问位于Program Files中的文件。
因此检查VirtualStore
中是否存在数据库文件,并尝试查找它与程序文件中存储的文件之间的差异。