プリペアドステートメントで SQLを実行する方法
スポンサーリンク
Excel VBA から SQL Server 上で SQL を実行する際に、プリペアドステートメントを使用するサンプルコードです。
SQL Server側のストアドプロシージャ
事前に SQL Server に以下のテーブルを作成しておきます。
sql(実行可能なサンプルコード) | |
1 2 3 4 5 | CREATE TABLE [dbo].[TEST_TABLE] ( [ID] [INT] NULL, [MEMO] [VARCHAR](10) NULL ); |
VBA のサンプルコード
上記のストアドプロシージャに引数を渡して実行する Excel VBA のサンプルコードは次の通りです。
このコードを実行するには、事前にADODBへの参照設定が必要です。
VBA(実行可能なサンプルコード) | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | Option Explicit Sub test() '■接続先情報を設定 'この例では、ローカルのインスタンス「SQLEXPRESS」にWindows認証で接続する。 Dim connectionString As String Dim dataSourceName As String Dim databaseName As String '「.」はローカルを表す。他のサーバに接続する場合はホスト名を指定。 dataSourceName = ".\SQLEXPRESS" ' 'TESTデータベースに接続する。 databaseName = "TEST" 'ODBC接続の接続文字列を作成する。 connectionString = "" connectionString = connectionString & "PROVIDER=MSDASQL;" connectionString = connectionString & "DRIVER={SQL Server};" connectionString = connectionString & "SERVER=" & dataSourceName & ";" connectionString = connectionString & "INITIAL CATALOG=" & databaseName & ";" connectionString = connectionString & "Trusted_connection=yes; " '■接続 Dim objConnection As ADODB.Connection Set objConnection = New ADODB.Connection objConnection.CursorLocation = adUseClient objConnection.Open connectionString '■実行するSQLを設定 Dim objCommand As ADODB.Command Set objCommand = New ADODB.Command Dim sql As String ' プリペアドステートメントを定義 sql = "" sql = sql & " INSERT INTO TEST.dbo.TEST_TABLE" sql = sql & " (ID, MEMO) VALUES (?, ?);" Set objCommand.ActiveConnection = objConnection objCommand.CommandType = adCmdText objCommand.CommandText = sql ' 1個目の ? に「52」を設定 Call objCommand.Parameters.Append( _ objCommand.CreateParameter("ID", adInteger, adParamInput, , 52) _ ) ' 2個目の ? に「B'z」を設定 Call objCommand.Parameters.Append( _ objCommand.CreateParameter("MEMO", adChar, adParamInput, 10, "B'z") _ ) '■登録件数を受け取る変数を準備 Dim affectedRowNum As Long '■SQLを実行 objCommand.Execute affectedRowNum '■登録件数を表示 Debug.Print "登録された件数→" & affectedRowNum '■終了処理 Set objCommand = Nothing Set objConnection = Nothing End Sub |
実行後に TEST.dbo.TEST_TABLE の中身を参照すると、引数で渡した値が登録されています。
スポンサーリンク