Mam's WebSite
建築CGパース住宅CGパース

Mamの覚書Q&A検索

トップページMamの覚書Q&A検索Access(VBA)⇒Q&A


大項目:「 Access 」 - 中項目:「 VBA 」

「 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


Mam's WebSite