トップへ(mam-mam.net/)

Access ADOでMS SQLサーバーのストアドプロシージャを実行して結果をもらうには

検索:

「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