質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

4470閲覧

ストアード・プロシージャーに引数を渡せない

maqua0319

総合スコア17

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/11/11 17:39

前提・実現したいこと

Access 2019 でアプリケーションを作成中です。
複数人が同時にアクセスできるようSQLserver でデータを管理することになっています。
Accessのクエリーでデータ処理を行うと、一部の処理で重たくなるので、SQLサーバのストアード・プロシージャーを使うこととしました。
やりたいことは、koujiNoでリレーションがはられている各テーブルのkoujiNoを別の番号に変更することです。
Accessのクエリを用いても実行出来ますが、
・データ件数が多くなると処理が重たくなること
・transaction処理としたいこと
などを勘案して、ストアード・プロシージャーで処理するのが適切だと考えています。

発生している問題・エラーメッセージ

accessのVBAからストアード・プロシージャーを呼び出そうとしているのですが、エラーが発生して実行出来ません。
エラーは .execute で発生します。
うまくパラメータを指定できないためだと思われます。

「実行時エラー '-2147217904(80040e10)' プロシージャまたは関数 'change_No'にはパラメーター'@oldNo'が必要ですが、指定されませんでした。」

該当のソースコード

VBAで記述

1public function change_No(oldno as long, newNo as long) as boolean 2 Dim cnn As New ADODB.Connection 3 Dim cmd As New ADODB.Command 4(中略) 5 With cnn 6 .Provider = "SQLOLEDB" 7 .ConnectionString = "Data Source=" & sn & ";" & _ 8 "Initial Catalog=" & DSN & ";" & _ 9 "User ID=" & SQLid & ";Password=" & SQLpw & ";" 10 .Open 11 End With 12 With cmd 13 .ActiveConnection = cnn 14 .CommandType = adCmdText 15 .CommandText = "change_No" 16 .Parameters.Refresh 17 cmd.Parameters.Append cmd.CreateParameter("Return", adInteger, adParamReturnValue) 18 .Parameters.Append .CreateParameter("oldNo", adInteger, adParamInput, , oldNo) 19 .Parameters.Append .CreateParameter("newNo", adInteger, adParamInput, , newNo) 20 .execute 21 End With

試したこと

パラメータをapend するところは直接 .createparamete メソッドを使っていますが、一旦変数を介して見たのですが、症状は同じです。

補足情報(FW/ツールのバージョンなど)

SQLserverは15.0.2070 です。
AccessはAccess2019 バージョン2010 です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ストアド側の引数の定義はどうなっていますか?
CommandType を adCmdStoredProc にしてみるとどうでしょう。

投稿2020/11/12 01:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maqua0319

2020/11/12 15:04

ご回答ありがとうございます。 ご指摘頂いた adCmdText から adCmdStoredProc に変更したところ、 エラーが出ずにきちんと動作しました。 心から感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問