none
PCからDAOでSQLServerに繋がらない RRS feed

  • 質問

  • 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)の両方を試してみましたが、

    同じエラーで繋がりません。

    ネットワーク系の問題なのか、ドライバの問題なのか、何か他に調べる内容はないでしょうか?

    2013年3月1日 7:10

回答

  • とりあえず、以下を確認してみて下さい。ネットワーク経由で接続できなくなっているのかもしれません。

    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
    2013年3月1日 7:41

すべての返信

  • とりあえず、以下を確認してみて下さい。ネットワーク経由で接続できなくなっているのかもしれません。

    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
    2013年3月1日 7:41
  • trapemiya さん コメント有難うございました。

    この記事は一通り確認しました。

    ・TCP/IPのサービスは有効となっています。

    ・インスタンスもこの画面で確認したものを使っています。

    ・SQL Server Browserサービスも有効となっています。

    ・Windowsファイヤウォールの設定は、WindowsServer2008上で動いているので対象外ですが、ネットワーク上のゲートウェイにあるF/Wでポート1433は開けてあります。

    2013年3月1日 9:53
  • SQL Serverはインスタンスごとに接続を受け付けています。「2つのインスタンスがあ」るそうですが、どちらに接続しようとしていますか? そして接続しようとしている側が 1433/tcp を使用していますか?
    2013年3月1日 11:54
  • 佐祐理さん コメント有難うございました。

    インスタンスは2つとも確認しましたが、今回指定しているほうはポート1433を使っています。

    今回接続しようとしているデータベースを使っているグループウェアの設定ドキュメントにも対象データベース名はこれ(ポート1433)を使っていることになっています。

    このデータベースを使っているグループウェアは正常に動作しておりますので、おそらく間違いないと思います。

    もうひとつのほうのインスタンスはTCP/IPが無効になっていますが、ARCSERVE用と書いてあります。

    よく判りませんが、ArcserveのMSSQL用Agentを入れてあるので、それ用のものだと思います。


    2013年3月2日 1:54
  • 自己レスです。解決しました。

    trapemiya さんに教えて頂いたページをよく読み返してみると、サーバー自体のファイヤウォールの設定がしていなかったことが原因でした。

    SQLserverとSQLBrouserの接続許可をプログラムのパス指定で追加したら、すんなり動きました。

    よくよく考えてみれば、今までそのデータベースに接続していたのは、同じサーバー上で動いているグループウェアからのローカル接続だった訳で、クライアントから直接接続するのは初めてだった訳です。外部のファイヤウフォールのポートを開けても、それ以前のサーバー自体のポートが開いていなければ通る訳はないですよね。

    どうもお騒がせしました。

    2013年3月2日 2:38