目的
簡単なストアドを書いて、ADODB.Command から使ってみる
※Windows版、Linux版ともに同じコードの動作確認(ODBCの指定以外は同じ)
※クラスへの実装の追加はどうするか、検討中
adoCmd.ActiveConnection = adoCon 実行後
adoCmd(1) = "00000001" が正常に動くため
対象テーブルはこちらで作成したものを対象とする
ストアドの作成
以下をSSMSから実行する
USE DEMO;
GO
CREATE PROCEDURE GETZIPCODE @SEQ nchar(8) AS
SELECT PREFCODE, POSTAL, CITIESKANJI, POADDRKANJI
FROM ZIPCODE
WHERE SEQ = @SEQ;
GO
ストアドのテスト
EXECUTE GETZIPCODE N'00000001'
サンプルコード
'=================================================================
'
' DBCtrlクラスを使用した
' Excel2016 VBA -> SQLServer からストアドを使った読込サンプル
'
'=================================================================
Private Sub ReadSQLSVDBCtrl()
On Error GoTo ERR_PROC
'
Dim adoCon As ADODB.Connection
Dim adoRst As New ADODB.Recordset
Dim adoCmd As New ADODB.Command
Dim host As String
Dim user As String
Dim pass As String
Dim conn As String
'
host = "SQLSVODBC32"
' host = "SQLSV2UBUNTU" ' Linux版
'
user = "demo"
pass = "demo"
'
conn = "DSN=" & host & ";UID=" & user & ";PWD=" & pass
'
adoCmd.CommandText = "GETZIPCODE"
adoCmd.CommandType = adCmdStoredProc
'
Set adoCon = New ADODB.Connection
'
adoCon.ConnectionString = conn
adoCon.CursorLocation = adUseClient
Call adoCon.Open
'
adoCmd.ActiveConnection = adoCon
'
adoCmd.Parameters.Refresh
'
' adoCmd.ActiveConnection = adoCon
' を実行しないとエラーになる
' adoCmd のクラスの実装は要検討
'
adoCmd(1) = "00000001"
'
Set adoRst = adoCmd.Execute
'
While Not adoRst.EOF
Debug.Print Trim(adoRst.Fields("PREFCODE")) & vbTab & _
Trim(adoRst.Fields("POSTAL")) & vbTab & _
Trim(adoRst.Fields("CITIESKANJI")) & vbTab & _
Trim(adoRst.Fields("POADDRKANJI"))
'
adoRst.MoveNext
Wend
'
adoCon.Close
Set adoCon = Nothing
Set adoCmd = Nothing
'
Exit Sub
ERR_PROC:
adoCon.Close
Set adoCon = Nothing
'
End Sub