2012-05-05 38 views
1

在Windows XP和Windows7操作系統上,Delphi 7中的TADOQuery組件出現奇怪的行爲。以下問題在Windows7操作系統上運行良好,但在XP操作系統上出現錯誤。執行SQL第二次時出現TADOQuery錯誤

我來解釋一下這個場景,我有一個TADOConnection組件和兩個TADOQuery組件。該TADOConnection分具有用於ConnectionString屬性的值如下:

ADOConnection1.ConnectionString := 'Provider = MSDASQL.1; Password = My Password; User ID = My User ID; Data Source = My Data Source'; 

我已經申請了角色/授予權限用戶ID /密碼對此我登錄到應用程序。

我已經使用Connection屬性將TADOConnection組件連接到TADOQuery組件。

當我執行第一個sql時,它可以正常工作,沒有任何錯誤,但是當我執行第二個sql時,我在Windows XP操作系統上遇到了以下錯誤。

[微軟] [SQL Server本機客戶端10.0] [SQL Server]將SELECT 權限被拒絕的對象上 '我的表名' 數據庫 '我 數據庫名稱',架構 'DBO'

相同的代碼,如果我在Windows7操作系統上執行它工作正常,沒有任何錯誤。

有人能把重點放在什麼可能會失蹤或可能是什麼問題?


我添加了「Persist Security Info = False;」一個連接字符串如下:

ADOConnection1.ConnectionString := 'Provider = MSDASQL.1; Persist Security Info = False; Password = My Password; User ID = My User ID; Data Source = My Data Source'; 

現在,每當我用TADOQuery組件執行的SQL,我需要寫每一次下面的語句,即使我已經設置TADOQuery的「連接」屬性開頭,我仍然需要在執行sql時設置這個屬性。

ADOQuery1.Connection := ADOConnection1; 

但正如我所說,在Windows7中,沒有必要改變TADOConnection成分的「的ConnectionString」屬性,無需設置任何TADOQuery組件的「連接」屬性。

有人可以告訴究竟要做什麼?

如果您的應用程序太大,需要編碼更改的地方很多,有人會同意嗎?那麼測試工作呢?在所有的地方都要進行測試,對嗎?

所以,我仍在尋找適當的解決方案。這個問題仍然沒有答案。

如果有人有任何線索或暗示或適當的解決方案,將不勝感激。

回答

2
  1. 您必須使用SQL Profiler檢查發生了什麼。
  2. 我敢打賭,ADO在內部克隆連接或使用連接池,而下一個查詢拾取另一個物理連接。所以,你得到的錯誤。要禁用池,請將OLE DB Services=-4添加到連接字符串中。
+0

嗨大軟,我真的非常感謝您的回覆,這就是我猜測可能肯定缺少的是「ConnectionString」屬性,它似乎是問題所在。我可以在星期一測試這個解決方案,所以如果我得到解決方案,你將成爲第一個得到通知的人。感謝你並帶着最好的問候。 Vishal –

+0

嗨da-soft,我試着用你建議的連接字符串,但它仍然給出了同樣的錯誤。任何其他線索?最好的祝福。維沙爾 –