トップ回答者
PCからDAOでSQLServerに繋がらない

質問
-
PCからSQLSERVERに接続したいのですが、色々試してもうまくいかず、行き詰っておりますので、お知恵を拝借願います。
ADOでの接続です。
環境
PC側:WinddowsXP3 Excel2003
Sever側:Windows2008R2 SQLserver2005
ExceVBAで以下のような接続文字列でSqlserverに接続しようとしていますが、NGです。
サーバーのアドレスは192.168.1.222 サーバー名:mysvr
対象のデータベースはmydb アカウントsaのパスワードはmypwdです。
Dim con As New ADODB.Connection
Dim connectionString As String
'接続文字列
con.connectionString = "Provider=SQLOLEDB;Data Source=192.168.1.222;" & _
"Initial Catalog=mydb;User ID=sa;Password=mypwd"
EXCELの参照設定は、
Microsoft ActiveX Data Objects 2.8 Library を加えています。
MDACのバージョンは2.81です。
Data SourceをServer=mysvr に変えたり、
Initial CatalogをDatabase=mydb に変えたり、
User IDをUIDに変えたり、
PasswordをPWDに変えたり、
パスワードを'mypwd'とクォーテーションで囲んでみたりしましたが、
何れも、
ConnectionOpen(PreLoginHandshake())一般的なネットワークエラーです。
というエラーが出ます。
また、サーバー上のインスタンスが2つありますので、
con.connectionString = "Provider=SQLOLEDB;Data Source=mysvr\mysqlsvr;" & _
"Initial Catalog=mydb;User ID=sa;Password=mypwd" のように明示したところ、エラーメッセージは、ConnectionOpen(ParseConnectParams())接続が正しくありません。 に変わりました。
プロバイダを替えたらうまくいったという情報が有ったので、
con.connectionString = "Provider=SQLNCLI;Data Source=192.168.1.222;" & _
"Initial Catalog=mydb;User ID=sa;Password=mypwd;DataTypeCompatibility=80;"
としてみたところ、エラーメッセージが、
TCPプロバイダ タイムアウトエラー[258]
に変わりました。
SQLServerのポート(1433)を明示的に空けてみましたが結果は同じです。
現在、このSQLServerでグループウェアが動いているのですが、特にファイヤウォールのポリシーで追加している点は見当たりません。ちなみに、Windowsの設定で、ODBCドライバのデータソースを作ろうとしても、エラーが発生してしまい作ることができません。
ドライバは
SQL Server(ver.2000.85.1132.00)及びSQL Server Native Client 10.0(ver.2009.100.1600.01)の両方を試してみましたが、
同じエラーで繋がりません。
ネットワーク系の問題なのか、ドライバの問題なのか、何か他に調べる内容はないでしょうか?
回答
-
とりあえず、以下を確認してみて下さい。ネットワーク経由で接続できなくなっているのかもしれません。
SQL Server 2005でネットワーク接続を有効にするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/545sqlsvrnet/sqlsvrnet.htmlまた、インスタンス名は正確に指定するようにして下さい。指定しなければ既定のインスタンスが選択されることに注意して下さい。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク 佐伯玲 2013年3月4日 0:20
すべての返信
-
とりあえず、以下を確認してみて下さい。ネットワーク経由で接続できなくなっているのかもしれません。
SQL Server 2005でネットワーク接続を有効にするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/545sqlsvrnet/sqlsvrnet.htmlまた、インスタンス名は正確に指定するようにして下さい。指定しなければ既定のインスタンスが選択されることに注意して下さい。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク 佐伯玲 2013年3月4日 0:20
-
佐祐理さん コメント有難うございました。
インスタンスは2つとも確認しましたが、今回指定しているほうはポート1433を使っています。
今回接続しようとしているデータベースを使っているグループウェアの設定ドキュメントにも対象データベース名はこれ(ポート1433)を使っていることになっています。
このデータベースを使っているグループウェアは正常に動作しておりますので、おそらく間違いないと思います。
もうひとつのほうのインスタンスはTCP/IPが無効になっていますが、ARCSERVE用と書いてあります。
よく判りませんが、ArcserveのMSSQL用Agentを入れてあるので、それ用のものだと思います。
-
自己レスです。解決しました。
trapemiya さんに教えて頂いたページをよく読み返してみると、サーバー自体のファイヤウォールの設定がしていなかったことが原因でした。
SQLserverとSQLBrouserの接続許可をプログラムのパス指定で追加したら、すんなり動きました。
よくよく考えてみれば、今までそのデータベースに接続していたのは、同じサーバー上で動いているグループウェアからのローカル接続だった訳で、クライアントから直接接続するのは初めてだった訳です。外部のファイヤウフォールのポートを開けても、それ以前のサーバー自体のポートが開いていなければ通る訳はないですよね。
どうもお騒がせしました。