TADOConnectionコンポーネントを使用してOLEDBドライバとtcp/ipを使用してSQL Serverに接続するD2010アプリケーションを作成しました。問題は、アプリケーションがネットワークドライブから(IDE内かどうかにかかわらず)実行したときに、データベースに接続できないことです。 Windows 7 x64でOLEDBドライバを使用してSQL Server 2005にアクセスするDelphi 2010アプリケーションでDBNETLIB ConnectionOpen(Connect())エラーが発生しました
---------------------------
Debugger Exception Notification
---------------------------
Project TroisTiers.exe raised exception class EOleException with message '[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.'
---------------------------
Break Continue Help
---------------------------
と私は「EOleException:予期しないエラー」を取得:たびに私は私がIDEによって、このエラーを取得しようと、私はIDE外でアプリケーションを実行すると。
問題は、ローカルドライブ(C :)に.exeをコピーすると、即座に動作し、エラーも遅れもなくなります。 WinXPコンピュータでD2010アプリケーションをコンパイルしてWin7から実行すると、完璧に動作します。 .exeをビルドしてx86 Windows 7で実行すると、上記と同じエラーが表示されます。
私は、ネットワークドライブ上のアプリケーションを起動すると、以下のモジュールがロードされていることに気づいた。私はその後、何らかの理由のリゾートのため、アプリが最初のTCP/IPを使用して接続しようとすると主張している
Module Load: WSHTCPIP.dll. No Debug Info. Base Address: $74CD0000. Process TroisTiers.exe (848)
Module Load: WSHIP6.dll. No Debug Info. Base Address: $74010000. Process TroisTiers.exe (848)
Module Load: DBnmpntw.dll. No Debug Info. Base Address: $750C0000. Process TroisTiers.exe (848)
を名前付きパイプに。テストのために、私はサーバー上の名前付きパイププロトコルを有効にしましたが、動作するようになりましたが、毎回ではなく、接続が行われるまでに最大10秒かかっていました。本番データベースに接続する方法ではないので、私はそれを無効にしました。アプリケーションがローカルで実行され、データが正しく表示されると、DBnmpntw.dllモジュールはロードされません。
接続文字列(.udlファイルを使用)を作成して接続をテストすると、動作しますが、64ビットまたは32ビットのドライバでテストしているかどうかはわかりません。
.exe出力ディレクトリをローカルドライブに設定しても問題ありませんが、この問題の原因を知りたいと思っています。最新の環境で作業すると複雑になります.exeの横に追加ファイルがあります)。何が価値があるため
Additionnal情報、:
私の接続文字列:「プロバイダ= SQLOLEDB.1は、永続セキュリティ情報=真;ユーザーID = *;パスワード=ハンター;初期カタログ= [データベース名];データソース= [サーバーIPアドレス] '。
"Network Library = DBMSSOCN;"でTCP/IPを強制的に使用しようとしました。それは助けにはならない。
コンピュータとサーバーでファイアウォールが無効になっています。
私のコンピュータ上のMcAfee AVは、ePOによって管理されています。
Win2k3 x64で動作するSQL Server 2005 x64。
SP1がインストールされていないWindows 7。
cliconfg.exe - >アクティブなプロトコルはtcp/ipのみです。
必要に応じて追加情報を提供することができます。