![]() |
[Windowsシステム運用]
InfoPath−SQL Server連携で構築するC/Sシステム―― ストアド・プロシージャをInfoPathから実行。IT Proでも自力構築できるC/Sシステム入門 ――第5回(最終回) ストアド・プロシージャで引数を使う1.ストアド・プロシージャへ引数を渡す方法兵庫県立西宮香風高等学校システム管理課長Microsoft MVP for InfoPath 松本 吉生 2007/08/08 |
|
本連載では、SQL Serverのストアド・プロシージャをOffice InfoPathから利用する方法について解説する。InfoPathは電子フォーム・ソリューションの開発で利用されるアプリケーションであるが、SQL Serverを呼び出してデータを処理することもできる。Visual BasicやC#などでコードを記述する必要もない。 前回は「商品管理」テーブルに対して、商品番号が1000から9999までのデータを一括して作成するストアド・プロシージャを作り、これをInfoPathのフォームから実行する方法を説明した。このストアド・プロシージャでは、作成する商品番号がストアド・プロシージャの中に記述されており、動的に設定することはできなかった。この方法では、商品番号を変えるためには、その都度ストアド・プロシージャを書き換えなければならない。これでは実際的ではないので、フォーム上のテキスト・ボックスに作成したい商品番号を入力し、ストアド・プロシージャのパラメータを変更することによって、必要に応じて商品番号の始めと終わりを設定できるようにしたい。 |
Index
|
||||||||||
|
引数を使うストアド・プロシージャ
ストアド・プロシージャでこのような処理を行うとき、「引数」を使う方法がある。作成する商品番号の開始番号と終了番号をストアド・プロシージャの実行時に渡して動的に処理を行うのだ。そこで前回のストアド・プロシージャを改良し、引数で開始番号と終了番号を渡すようにしたものが次の「makeitemcodeplus」ストアド・プロシージャである。前回のストアド・プロシージャ「makeitemcode」も再掲するので対比してほしい。
※前回説明した、makeitemcodeストアド・プロシージャを作成するクエリ |
※引数を用いるように改良したmakeitemcodeplusストアド・プロシージャを作成するクエリ |
改良したmakeitemcodeplusの2行目「@startitemcode INT,@enditemcode INT」が引数を規定しているところである。INT型の「@startitemcode」が開始番号で、同じくINT型の「@enditemcode」が終了番号である。このストアド・プロシージャを実行するときは、次のようなクエリを実行する。
makeitemcodeplus [開始番号], [終了番号] |
具体的には、
makeitemcodeplus 1000, 2000 |
とクエリを行えば、商品番号が1000から1999までのデータが作成されることになる。
だがこのストアド・プロシージャは、InfoPathのフォームから利用することはできない。なぜならInfoPathのデータ接続は、フォームのコントロールに入力された値を引数に使うことができないからである。
テーブルの値をパラメータとして読み込むストアド・プロシージャ
引数としてパラメータをストアド・プロシージャに渡すことがInfoPathのフォームからはできないのだが、フォームのコントロールに入力された値をいったん一時テーブルにストアし、ストアド・プロシージャが一時テーブルの値を読み取って一連の商品番号を作成する、という方法を取ることができる。なお、ここで「一時テーブル」というのは、SQL Serverの持つ一時テーブル機能を使うのではなく、単にテーブルを作成して一時的に利用することを指す。以下ではこの方法について説明する。
![]() |
||||||||||||
一時テーブルを使ってパラメータをストアド・プロシージャに渡す | ||||||||||||
InfoPathのフォームから引数としてパラメータをストアド・プロシージャに渡すことはできない。代わりに、フォームのコントロールに入力された値をいったん一時テーブルにストアし、ストアド・プロシージャが一時テーブルの値を読み取って、一連の商品番号を作成する。 | ||||||||||||
|
一時テーブルと一時テーブルを利用するストアド・プロシージャの作成
一時テーブルは開始番号と終了番号を記録するだけであるので次のようなテーブルとし、「商品番号作成」というテーブル名にしておく。
列名 | データ型 |
開始番号 | PrimaryKey,int |
終了番号 | int |
![]() |
|
テーブル名「商品番号作成」 |
この一時テーブル「商品番号作成」から「開始番号」と「終了番号」をパラメータとして呼び出し、一連の商品番号を作成するストアド・プロシージャ「makeitemcodenew」は次のようになる。
|
4行目の「@startitemcode」で開始番号を、5行目の「@enditemcode」で終了番号を意味する変数を定義している。6行目のSELECT文は、一時テーブルから開始番号を読み込んで「@startitemcode」変数に格納し、7行目のSELECT文は、一時テーブルから終了番号を読み込んで「@enditemcode」変数に格納している。
InfoPathフォームの作成
InfoPathのフォーム作成は、まず一時テーブルのデータ接続から作成する。InfoPathを起動し、左のペインから[フォームのデザイン]をクリックしてウィザードを開始する。データ接続の作成方法はこれまでに何度も行った方法と同じであるが、念のためウィザードを画面を追って説明すると次のようになる。
ウィザードを完了すると、フォーム上にデフォルトでテキストやレイアウト枠、ボタン・コントロールができるので、これをすべて削除する。そしてデータソースの「dataFields」から「商品番号作成」繰り返しグループをフォーム上にドラッグし、「繰り返しテーブル」をクリックして繰り返しテーブルを作成する。
![]() |
||||||||||||
![]() |
||||||||||||
![]() |
||||||||||||
繰り返しテーブルの作成 | ||||||||||||
フォーム上のデフォルトのテキストやレイアウト枠、ボタン・コントロールを削除し、次に、データソースから繰り返しグループをドロップする。 | ||||||||||||
|
できた繰り返しテーブルは、横幅を調節して適切な大きさに変更する。
![]() |
||||||
![]() |
||||||
![]() |
||||||
繰り返しテーブルの幅の調節 | ||||||
デフォルトで作成されたテキスト・ボックスの幅が広いので、適切な大きさに調節する。 | ||||||
|
![]() |
![]() |
INDEX | ||
[Windowsシステム運用]InfoPath−SQL Server連携で構築するC/Sシステム | ||
第5回 ストアド・プロシージャで引数を使う | ||
![]() |
1.ストアド・プロシージャへ引数を渡す方法 | |
2.ストアド・プロシージャを実行するデータ接続の作成 | ||
3.フォームの作成と動作の確認 | ||
![]() |
![]() |
運用 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
![]() |
|
|
|
![]() |