1

TADOQueryWindows XP および Windows7 オペレーティング システムの Delphi 7 では、コンポーネントによって奇妙な動作が発生します。次の問題は、Windows7 オペレーティング システムでは問題なく動作しますが、XP オペレーティング システムではエラーが発生します。

シナリオを説明しましょう。1 つの TADOConnection コンポーネントと 2 つの TADOQuery コンポーネントがあります。TADOConnection コンポーネントのConnectionStringプロパティの値は次のとおりです。

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

アプリケーションにログインしているユーザー ID/パスワードに、ロール/付与された権限を既に適用しています。

プロパティを使用して、TADOConnection コンポーネントを TADOQuery コンポーネントに接続しConnectionました。

最初の SQL を実行するとエラーは発生しませんが、2 番目の SQL を実行すると Windows XP オペレーティング システムで次のエラーが発生します。

[Microsoft] [SQL Server Native Client 10.0] [SQL Server] オブジェクト 'My Table Name'、データベース 'My Database Name'、スキーマ 'dbo' に対する SELECT 権限が拒否されました

同じコードを 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 コンポーネントの「Connection」プロパティを設定する必要もありません。

誰が正確に何をしなければならないか教えてもらえますか?

アプリケーションが大きすぎて、多くの場所でコーディングの変更が必要な場合、それに同意する人はいますか? そして、テストの取り組みについてはどうですか?すべての場所でテストを行う必要がありますよね?

だから、私はまだ適切な解決策を探しています。質問はまだ答えられていません。

誰かが手がかりやヒント、または適切な解決策を持っている場合は、非常に高く評価されます。

4

1 に答える 1

2
  1. SQLプロファイラーを使用して何が起こっているかを確認する必要があります。
  2. 私の考えでは、ADOは内部で接続を複製するか、接続プールを使用し、次のクエリは別の物理接続を取得します。したがって、エラーが発生します。プーリングを無効にするOLE DB Services=-4には、接続文字列に追加します。
于 2012-05-05T14:31:36.253 に答える