2012-02-15 28 views
1

我有一個可在大多數Windows 7計算機上正常工作的VB6應用程序(即使啓用了UAC),但對於其中一些程序,如果程序不是在啓動時設置爲'以管理員身份運行',它會在嘗試查詢數據庫時返回錯誤消息'沒有給出一個或多個必需參數的值'。僅在某些Windows 7計算機上出現一個或多個必需參數錯誤

我知道錯誤消息通常意味着表名和/或參數拼寫錯誤。但是這不是這種情況,因爲在Win XP和一些Win 7機器上執行相同的操作/查詢調用的相同的應用程序沒有問題。

該數據庫是MS Access 2003格式。數據庫與應用程序exe和dll一起位於Program Files目錄中。

如果這是一個一致的錯誤,那麼我可以很容易地調試它並繼續前進,但由於我所有的測試機器都不會產生這個錯誤,所以我很茫然。

任何想法爲什麼發生這種情況,以及如何解決它?因爲這個位置是保護和標準用戶和管理員在啓用UAC的系統,不能寫它

謝謝, 克里斯

+0

你已經提到過UAC。所以我想你已經檢查過,這肯定不是[虛擬化的「程序文件」](http://support.microsoft.com/kb/927387)目錄造成的? – MarkJ 2012-02-15 17:13:17

+0

MarkJ我嘗試閱讀你的鏈接,但遇到了麻煩。我提到了UAC,因爲當我將應用程序的屬性設置爲'以管理員身份運行'時,UAC在打開時提示用戶,問題就消失了。 – 2012-02-15 19:47:18

+0

HansUp我在我的開發環境中沒有這個問題,或者我的任何測試機器在這個時候都不可能捕獲查詢。我正在致力於解決有此問題的機器。我不確定這是SQL語句的問題,因爲它可以在很多其他計算機上使用相同的設置。 – 2012-02-15 19:50:05

回答

3

在計劃文件中存儲數據庫文件是不是一個好主意。如果需要在所有用戶之間共享數據庫,則應將該數據庫存儲在用戶簡檔中的AppDataProgramData中。

由於標準用戶無法寫入Program Files,因此Vista/7具有虛擬化機制。如果沒有對Program Files的寫入權限的程序試圖在那裏寫入,則文件系統會將請求重定向到用戶的配置文件。虛擬化的Program Files目錄位於C:\Users\<account>\AppData\Local\VirtualStore。我想你會因爲虛擬化而看到這個錯誤:數據庫可能存在於兩個位置,即真實的Program Files和虛擬化的文件夾中,並且文件可能不同。虛擬化版本無法獲得所需的記錄,這就是爲什麼您會收到錯誤消息。

以管理員身份啓動應用程序時,虛擬化已禁用,您可以訪問位於Program Files中的文件。

因此請檢查數據庫文件是否存在於VirtualStore中,並嘗試查找它與存儲在Program Files中的文件之間的差異。

+0

這似乎是問題所在。我試圖利用'ProgramData'特殊文件夾,但是這似乎導致了其他問題,我認爲這些問題與清理代碼相比目錄本身更相關。 – 2012-04-26 13:56:03

相關問題