「Access ADOでMS SQLサーバーのストアドプロシージャを実行して結果をもらうには」
Accessから
MS SQLサーバーのストアドプロシージャを実行して結果をもらうにはどうすればよいか
回答
t_社員 テーブルが以下とします。
社員コードnchar(10) 社員名nchar(10) 入社日datetime 部署コードnchar(10)
1 石川 2013-01-01 1
2 石井 2013-01-01 1
3 石崎 2013-01-01 2
4 石西 2013-01-01 1
--------------------------------
ストアドプロシージャ データベース名.dbo.sp_部署変更 を以下とします。
USE [データベース名]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_部署変更]
@社員コード nchar(10),
@部署コード nchar(10)
AS
BEGIN
SET NOCOUNT ON;
UPDATE t_社員 SET 部署コード = @部署コード
WHERE 社員コード = @社員コード;
SELECT Count(*) FROM t_社員 WHERE 部署コード=@部署コード
END
ソース
以下のプロシージャでイミデイトウィンドウに結果セットが表示されます
Option Compare Database
Option Explicit
Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" ( _
ByVal hwndParent As Long, _
ByVal fRequest As Long, _
ByVal lpszDriver As String, _
ByVal lpszAttributes As String) As Long
Private Const ODBC_ADD_DSN = 1
Private Const ODBC_ADD_SYS_DSN = 4
Private Const ODBC_REMOVE_SYS_DSN = 6
Sub odbc_connect_create()
Dim SqlODBC As Boolean
Dim Driver As String
Dim Attributes As String
Driver = "SQL Server" & vbNullChar
Attributes = "DSN=データソース名" & vbNullChar & _
"SERVER=サーバー名" & vbNullChar & _
"Description=" & vbNullChar & _
"DATABASE=データベース名" & vbNullChar
SqlODBC = SQLConfigDataSource(0, ODBC_ADD_DSN, Driver, Attributes)
If SqlODBC Then
MsgBox "成功"
Else
MsgBox "失敗"
End If
End Sub
Sub MyTest()
Dim cnc As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Dim i As Long
odbc_connect_create
cnc.Open "Provider=MSDASQL;Data Source=データソース名;" _
& "Initial Catalog=データベース名;" _
& "User ID=ユーザー;Password=パスワード;"
cmd.ActiveConnection = cnc
cmd.CommandText = "dbo.sp_部署変更" 'ストプロ名
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters("@社員コード") = "1"
cmd.Parameters("@部署コード") = "2"
rst.Open Source:=cmd, CursorType:=adOpenKeyset
While Not rst.EOF
For i = 0 To rst.Fields.Count - 1
Debug.Print rst.Fields(i).Value
Next
rst.MoveNext
Wend
End Sub