Не заданы значения для одного или нескольких обязательных параметров, ошибка только на некоторых компьютерах с Windows 7 - PullRequest
1 голос
/ 15 февраля 2012

У меня есть приложение VB6, которое отлично работает на большинстве компьютеров с Windows 7 (даже с включенным UAC), но для некоторых из них, если при запуске программа не установлена ​​на «Запуск от имени администратора», она выдаст сообщение об ошибке » Не задано значение для одного или нескольких обязательных параметров при попытке запроса к базе данных.

Я знаю, что сообщение об ошибке обычно означает, что имена таблиц и / или параметры указаны неправильно. Но это не тот случай, поскольку одно и то же приложение, выполняющее те же вызовы процедур / запросов, не имеет проблем на Win XP и некоторых машинах с Win 7.

База данных в формате MS Access 2003. База данных находится в каталоге Program Files вместе с exe и dll приложения.

Если бы это была постоянная ошибка, я мог бы легко ее отладить и двигаться дальше, но, поскольку все мои тестирующие машины не генерируют эту ошибку, я в растерянности.

Есть идеи, почему это происходит и как это исправить?

Спасибо, Chris

1 Ответ

3 голосов
/ 16 февраля 2012

Хранение файла базы данных в Program Files не является хорошей идеей, поскольку это местоположение защищено, и обычные пользователи и администраторы в системе с поддержкой UAC не могут писать в нее. Вам следует хранить базу данных либо в AppData в профиле пользователя, либо в ProgramData, если она должна использоваться всеми пользователями.

Поскольку обычные пользователи не могут писать в Program Files, Vista / 7 имеет механизм виртуализации. Если программа без прав на запись в Program Files пытается выполнить запись в нее, файловая система перенаправляет запрос в профиль пользователя. Каталог виртуализированных программных файлов находится в C:\Users\<account>\AppData\Local\VirtualStore. Я думаю, что вы видите эту ошибку из-за виртуализации: база данных может существовать в обоих местах, реальных программных файлов и виртуализированных, и файлы могут отличаться. Виртуализированная версия не может иметь необходимые записи, поэтому вы получаете сообщение об ошибке.

Когда вы запускаете приложение от имени администратора, виртуализация отключается, и вы получаете доступ к файлу, расположенному в программных файлах.

Поэтому проверьте, существует ли файл базы данных в VirtualStore, и попытайтесь найти различия между ним и файлом, хранящимся в программных файлах.

...