[Windowsシステム運用] InfoPath−SQL Server連携で構築するC/Sシステム 第3回 データ接続におけるSQL文を編集する3.InfoPathのデータ接続にDELETE文を記述する兵庫県立西宮香風高等学校システム管理課長Microsoft MVP for InfoPath 松本 吉生 2007/05/24 |
|
|
InfoPathのデータ接続はSQL文を書くことができるということが分かったが、SELECT文以外のSQL文を書くことができるだろうか。例えばDELETE文をデータ接続に書くと、そのままではInfoPathがエラーメッセージを出し、データ接続を構成することができない。しかし、ある工夫をすることでDELETE文もデータ接続に書いて実行することができる。ここではInfoPathのデータ接続にDELETE文を書いて実行する手順を説明するが、このDELETE文のテストでは、実際に実行してしまったときに大切なデータを失わないように、データ接続先を間違えたり、SQL文を書き間違えないように慎重に行ってほしい。
先に作ったInfoPathのフォームを利用し、メニューバーから「ツール」−「データ接続」をクリックし、新しいデータソースを作る。「データ接続」のウィンドウには、先に作った「メイン接続」があるはずだ。新しくデータ接続を作成するために、[追加]ボタンをクリックする。
データ接続の追加 | ||||||
「データ接続」ウィンドウでデータ接続を追加する。 | ||||||
|
次のウィンドウでは、追加するデータ接続が「データの送信」か「データの受信」かを選ぶ。直感的にはDELETE文をSQL Serverに投げるので「データの送信」のように思うが、「データの送信」ではSQL Serverに接続できない。ここで作成するSQL文は、あくまでもSQL Serverに対するクエリ=問い合わせであるので、「データの受信」を選択する。その次のウィンドウでは、データの受信元として「データベース(Microsoft SQL ServerまたはMicrosoft Office Accessのみ)」を指定する。
データ接続の使用 | ||||||||||||
データ接続の使用を選択する。 | ||||||||||||
|
データ接続ウィザードの次の画面では、[データベースの選択]ボタンをクリックする。すると先に作成したメイン・データソースのデータファイルができているので、それを選択して[開く]ボタンをクリックする。メイン・データソースのテーブル構造が表示されるので[SQLの編集]ボタンをクリックする。
データベースの設定 | ||||||||||||
データベースを設定する。 | ||||||||||||
|
データソースにはメイン・データソースのSQL文が生成されているので、このSQL文を、次のように変更する。このSQL文は、「商品管理」テーブルのデータをすべて削除するSQL文である。
delete from 商品管理 |
変更したら[SQLステートメントのテスト]ボタンをクリックする。すると「テストに失敗しました。」というエラー・メッセージが出るので、[詳細の表示]ボタンをクリックしてエラーの詳細を見る。すると「ADO アダプタはスキーマを取得できませんでした。指定されたクエリで返されるレコードセットはありません。SQL ステートメントを確認してください。」というメッセージが表示される。
なぜこのようなエラーが出るかといえば、InfoPathのデータ接続はデータを得るためのものであるが、ここで変更したSQL文は何もデータを取得しないため、返されるレコードセットがないのでエラーと判断されたのである。そこで、ダミーのSELECT文を付け加えて、次のようなSQL文にする。
select 'dummy' |
ここで「select 'dummy'」の文は、「dummy」という固定の文字列を取得するダミーのSELECT文である。そして[SQLステートメントのテスト]ボタンをクリックしてSQL文を確かめる。すると「テストに失敗しました。」とのダイアログボックスが表示されるので、[詳細の表示]ボタンをクリックする。エラーの詳細には「複数のレコードセットはサポートされていません。」と書かれている。
SQLの編集でダミーのSELECT文を付け加える | ||||||||||||
|
ダミーのSELECT文によって、1件のレコードセットしか返されないはずなのに、複数のレコードセットが返されたというエラーの理由は、SQL Serverの処理の仕方にある。SQL Serverはステートメントによる処理が終わったとき、「X行処理されました」という、処理行数の結果をクライアントに返すようになっている。この処理行数の結果を、ダミーのSELECT文の結果と合わせて「複数のレコードセットが返ってきた」とInfoPathが勘違いしているのである。
SET NOCOUNT ONで処理行数の結果を返さないようにする
このような現象はSQL Serverのストアド・プロシージャでは既知の事実であり、処理行数の結果を返さないようにするための方法として、「SET NOCOUNT ON」がある。これを使って、再度SQLの編集で、SQL文を次のように変更し、[SQLステートメントのテスト]を行ってみよう。
set nocount on |
SET NOCOUNT ONの追加 | |||||||||
SQLの編集で「SET NOCOUNT ON」の文を付け加える。 | |||||||||
|
テストに成功したら、[OK]ボタンをクリックして「SQLの編集」ウィンドウに戻り、[OK]をクリックする。ここで「入力されたSQLステートメントはツリービューで表示できません。続行しますか?」のダイアログボックスが出るが、[はい]をクリックしてよい。さらにデータ接続ウィザードを[次へ]ボタンをクリックして次へ進めようとすると、「安全であるかどうかを判断できません。」というメッセージが出る。これも[はい]をクリックして構わない。
編集完了時のメッセージ | ||||||
SQLの編集を完了する際には、このようなメッセージが表示される。 | ||||||
|
データ接続ウィザードの最後の段階で、データ接続の名前を決める。ここでは「データの全削除」といったような、分かりやすい名前を付けておこう。もう1つ重要なことは、「フォームを開くとき自動的にデータを取得する」のチェック・ボックスを外しておくことである。このチェック・ボックスはデフォルトでチェックされているが、これをチェックしたままにしておくと、フォームを開いたときに自動的にクエリが送信されて、すべてのデータが削除されてしまう。そして最後は[完了]ボタンをクリックしてウィザードを終了する。ウィザードを終了すると、データ接続に「データの全削除」というデータ接続ができていることが確認できる。
ウィザードの完了 | |||||||||||||||
データ接続ウィザードの最後に、データ接続の名前を入力する。 | |||||||||||||||
|
■
今回は、データ接続の設定を編集して、任意のSQL文を記述する方法について説明した。またDELETE文のような、結果のセットを返さないSQL文(SELECT文以外のSQL文など)を実行させる方法についても解説した。次回は、こうやって作成したSQL文をInfoPathから呼び出して実行する方法や、呼び出しのためのボタンを作成する方法などについて解説する。
INDEX | ||
[Windowsシステム運用]InfoPath−SQL Server連携で構築するC/Sシステム | ||
第3回 データ接続におけるSQL文を編集する | ||
1.InfoPathのデータ接続にSELECT文を記述する | ||
2.InfoPathのデータ接続にサブクエリを記述する | ||
3.InfoPathのデータ接続にDELETE文を記述する | ||
運用 |
- 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をインストールしてみる
|
|