エクセルVBAからSQLサーバへリモート接続

taketoshi
記事: 222
登録日時: 14年前
住所: 日本国

エクセルVBAからSQLサーバへリモート接続

投稿記事 by taketoshi » 5年前

コロナの渦の中皆様お元気でしょうか。
体調には十分お気をつけください。

別パソコンに建てたSQLSERVERのデータを別PCからエクセルVBAで読み出すチャレンジをしています。
SQLSERVERの設定に苦戦したので覚書

◆SQLSERVERの設定
・リモート接続を許可
・SQLSERVER認証の有効化
・SQLSERVER構成マネージャからTCPの有効化
・SQLSERVER構成マネージャのIPAIIにポート番号1433の入力
・ポートを開放する(TCP/UDP1433)
・SQLSERVER構成マネージャからSQLSERVERのTCP/IPを有効化
・Windowsサービス管理ツールからSQLServerBrowserを自働に切り替える
・SQLSERVER構成マネージャからSQLSERVER Browserの有効にする

◆データベース側の設定
・管理者でSQLSERVER認証用のログインIDの作成
→その際既定のデータベースを目的のものにする
→ユーザーマッピングタグでdatareaderとdatawriterとadoのスキーマをチェックしてOKする
→データベースのメンバーシップにreaderとwriterのチェックがついていることを確認する
・使用するデータベースのログインIDに読み取りと書きこみの権限を付与する
→セキュリティ保護可能なリソースで[SQLの接続][データベースの表示][データベースの変更][データベースの接続]の許可にチェックを入れる
・目的のデータベースのセキュリティでログイン名をWクリックし
データベースのメンバーシップにad.datareaderとad.datawriterが入っているか確認する


SQLサーバの解説書を読んだのですが本当に専門用語が多くて「????」って思います。
スキーマの概念がわからない。ロールの概念がわからない。
「このロールが所有するスキーマ」とか言われても意味わからず時間がかかりそう。
IT用語の壁にぶち当たるたび、こち亀の大原部長の「オーエスってなんだ?」という一言を想い出します

今回はVBAで書きましたが次はC#から読みとって数値をグラフ化したりしてみようと思っています。

以下VBAコード

CODE:

  Dim SQLflag As Boolean
    Dim db As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strSEL As String
    Dim CON As String
Private Sub Connection_Click()
    'DB接続情報格納
    CON = "Provider = SQLOLEDB;Data Source = [IPアドレス];Initial Catalog=[データベース名];user id=hoge;password=hogehoge"
    
    db.Open (CON)
    SQLflag = True
    
    Connection.Enabled = False
    Connection_Close.Enabled = True
    GetData.Enabled = True
End Sub

Private Sub Connection_Close_Click()
    db.Close
    SQLflag = False
    Connection_Close.Enabled = False
    Connection.Enabled = True
    
End Sub

Private Sub GetData_Click()
    strSEL = "SELECT * from hogetable"
    Set rs = db.Execute(strSEL)
    Range("A1").Value = rs.Fields(0).Value
    Range("A2").Value = rs.Fields(1).Value
    
End Sub

Private Sub UserForm_Initialize()
    GetData.Enabled = False
    Connection.Enabled = True
    Connection_Close.Enabled = False
End Sub

Private Sub visible_Click()
    Dim flag As Boolean
    
    flag = Application.visible
    If flag = False Then
        Application.visible = True
    Else
        Application.visible = False
    End If
    
End Sub

皆様ごきげんよう。
最後に編集したユーザー taketoshi on 2020年5月17日(日) 00:34 [ 編集 2 回目 ]

コメントはまだありません。