<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Microsoft Office InfoPath</title><link>http://blogs.sqlpassj.org/hotikisu/category/521.aspx</link><description>Microsoft Office InfoPathについて</description><managingEditor>ホチキス先生</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>ホチキス先生</dc:creator><title>なぜ外注した教務システムは使い物にならないのか（１）要件定義に失敗する</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/11/14/26047.aspx</link><pubDate>Fri, 14 Nov 2008 00:58:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/11/14/26047.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/26047.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/11/14/26047.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/26047.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/26047.aspx</trackback:ping><description>&lt;P&gt;自分の学校の教務システム、本校では「支援システム」と呼んでいるのだが、これをSQL ServerとInfoPath、AccessなどのOfficeアプリケーションを組み合わせて作り、「なぜ外注した教務システムは使い物にならないのか」について思うところをまとめてみる。これはあくまでも現時点でのまとめなので、今後また考え方は変わるかもしれないが、あくまでも現時点のまとめである。&lt;/P&gt;
&lt;P&gt;まず最も大きな理由は「要件定義に失敗する」ということだ。そもそもシステムを外注するためには、どのような業務を実現したいのかという整理が必要である。実現したいシステムが整理されて、それを「要件定義」にまとめられるのだが、そもそも「何をどうまとめていいかわからない」のが原因である。&lt;/P&gt;
&lt;P&gt;学校側は自己の要件定義をまとめる力がない。ではシステム業者はどうか。受注する側は、要件定義が少ないほどいい。作りこまなければならない部分が少なくてすむからだ。だから業者側から積極的に要件定義に協力するということはない。契約の上では仕様を満たせばいいわけだが、本当の目的はシステムが業務にあわせて「ちゃんと動くこと」のはずだ。&lt;/P&gt;
&lt;P&gt;最近ある雑誌のコラムに「要求定義は発注側、受注側、両方の責任」という記事があるのを目にした。これなど当たり前のことのように思えるが、実際は問題がおきたとき「仕様を満たしている」ことが責任の範囲になるようだ。このような問題は、大企業間のシステム外注でもおきているらしい。&lt;/P&gt;
&lt;P&gt;学校の教務システムに慣れた業者は、「要件定義シート」といった雛形を用意しており、学校の要件定義が簡単にまとめられるようにしている。このようなシートを用意することは一見良心的なように思えるが、実は業者が「作ることができる」あるいは「作りたい」システムの雛形を選択肢に与えているにすぎない。このようなシートにチェックして要件定義ができるなら苦労はない。しかし実際は、このような一般化に現れない部分こそ、学校ごとに異なる仕様が必要になる要件なのだ。&lt;/P&gt;
&lt;P&gt;一般化に現れない部分はシステム的には部分的な細部的構造であるのだが、実は部分的な細部の要求を満たそうと思えば、データベースの全体構造を変更せざるを得なくなってくる。これについては別途まとめて述べたい。&lt;/P&gt;
&lt;P&gt;要件定義に失敗すれば、その要件定義に基づいた仕様も間違いであり、当然開発されたシステムも使い物にならなくなる。本校ではある意味「要件定義を行いながらシステムを開発している」という同時並行でやっている。したがって常に要件定義を見直しながらシステムを構築、更新している訳だ。&lt;/P&gt;
&lt;P&gt;なぜこのようなことが可能になったか。それはSQL ServerとInfoPath、Accessなどのオフィスアプリケーションの組み合わせが、直感的でわかりやすいインタフェース、コードをほとんど書く必要がない、などの変化に順応した開発環境を提供してくれるからだ。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/26047.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>TechEd 2008 Yokohamaでライトニング・トークに出る</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/06/25435.aspx</link><pubDate>Wed, 06 Aug 2008 21:38:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/06/25435.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25435.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/08/06/25435.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25435.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25435.aspx</trackback:ping><description>&lt;P&gt;今年は昨年と少し趣向が変わったTechEdのコミュニティ・プログラム。「ライトニング・トーク」というプログラムで「簡単! InfoPath と SQL Server でリッチなインターフェイスのクライアント サーバー システム構築」という話をさせてもらえることになった。&lt;/P&gt;
&lt;P&gt;5分程度ということで詳しい説明はできないが、いま業務としてやっているデータベースについて話す。InfoPathをクライアントのフロントエンドに使い、データベースSQL Serverに接続するクライアント・サーバー・アプリケーションについてだ。&lt;/P&gt;
&lt;P&gt;俺はもともとプログラマーではなく、どちらかといえば管理運用の仕事をしている立場にいる。学校のデータベースを日常業務の空き時間を使って構築してきた経験から、実際の業務に直接携わっている人間、運用についてよく知っている人間がデータベースを構築することが、最も効率よく成功するシステムを構築できると確信している。&lt;/P&gt;
&lt;P&gt;マイクロソフトのSQL Server、InfoPathやAccessといったオフィス製品、Active Directoryなど使いやすいシステムを組み合わせて利用することで、たいていのデータベースは自前で構築できる。その可能性を実感してもらえれば嬉しい。&lt;/P&gt;
&lt;P&gt;マイクロソフトTeceED 2008 Yokohama公式サイト&lt;BR&gt;&lt;A href="http://www.microsoft.com/japan/teched/2008/default.mspx"&gt;http://www.microsoft.com/japan/teched/2008/default.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Birds of a Feather &amp;amp; ライトニング・トーク&lt;BR&gt;&lt;A href="http://www.event-marketing.jp/events/te08/special/bof.htm"&gt;http://www.event-marketing.jp/events/te08/special/bof.htm&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25435.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>InfoPathの改ページについて</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25282.aspx</link><pubDate>Sun, 29 Jun 2008 17:24:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25282.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25282.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25282.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25282.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25282.aspx</trackback:ping><description>&lt;P&gt;InfoPathは2003 SP1から「改ページ」が挿入できるようになったようだ。&lt;/P&gt;
&lt;P&gt;Microsoft Office Online 「改ページを挿入する」&lt;BR&gt;&lt;A href="http://office.microsoft.com/ja-jp/infopath/HP010957061041.aspx"&gt;http://office.microsoft.com/ja-jp/infopath/HP010957061041.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Microsoft Office Online 「ページ区切りを挿入する」&lt;BR&gt;&lt;A href="http://office.microsoft.com/ja-jp/infopath/HP100240281041.aspx"&gt;http://office.microsoft.com/ja-jp/infopath/HP100240281041.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Microsoft Office Online 「InfoPath 2003 Service Pack 1 の概要」&lt;A href="http://www.microsoft.com/japan/office/previous/2003/infopath/prodinfo/sp1.mspx"&gt;http://www.microsoft.com/japan/office/previous/2003/infopath/prodinfo/sp1.mspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25282.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>InfoPathの弱いところ。複数ページの印刷処理。</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25281.aspx</link><pubDate>Sun, 29 Jun 2008 17:21:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25281.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25281.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/29/25281.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25281.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25281.aspx</trackback:ping><description>&lt;P&gt;InfoPathをSQL Serverに接続してクライアント・サーバーシステムにしている。InfoPathの弱いところは印刷だが、特に複数ページわたる印刷物を作成したいときに、改行の自由度が小さいところだ。&lt;/P&gt;
&lt;P&gt;データベースに生徒データと講座データ、それを関連付ける受講データがある。ここから各生徒の時間割個票を出力したい。このときInfoPathならクエリフィールドの学籍番号を使って、一人の生徒の時間割個票を出力するのは簡単だ。しかし担任が自分のクラスの生徒の時間割個票をまとめて印刷したい、というような場合がある。&lt;/P&gt;
&lt;P&gt;Accessなら接続先のデータのうち「学籍番号」を「グループヘッダー」にして「改ページ」しておけば、自動的に一人ずつの時間割個票がまとめて印刷処理できる。InfoPathでもこのようなグループ処理ができればいいのだが。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25281.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>SQL ServerとAccessによるクライアントサーバーシステムの事例はあるのか</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/28/25279.aspx</link><pubDate>Sat, 28 Jun 2008 12:41:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/28/25279.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25279.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/28/25279.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25279.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25279.aspx</trackback:ping><description>&lt;P&gt;InfoPathをクライアントにして、SQL Serverデータベースシステムを作っている。InfoPathはデータの入出力には得意だが、印刷の自由度が小さい。そこでクライアントにAccessを使い、アクセスプロジェクトでSQL Serverに接続することも併用している。&lt;/P&gt;
&lt;P&gt;いろいろとやってみると、これが結構便利だ。Accessのレポートで表を作ることも面倒だが、Accessはよく使っていて慣れているので、手際よく作るコツはわかっている。&lt;/P&gt;
&lt;P&gt;もしかしたらSQL ServerとAccessだけでクライアントサーバーシステムを構築する事例もあるのではないか、と思うようになってきた。ちょっと調べてみると、Microsoftや@ITなどの記事はあるが、具体的な事例を書いたページは見当たらない。実際にやってみると工夫のしがいもあるので、またここに書いていきたい。&lt;/P&gt;
&lt;P&gt;Microsoft Office Online 「Access プロジェクトについて (ADP)」&lt;BR&gt;&lt;A href="http://office.microsoft.com/ja-jp/access/HP052731031041.aspx"&gt;http://office.microsoft.com/ja-jp/access/HP052731031041.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;@IT「データベース・サーバのフロントエンドとしてAccessを利用する」&lt;A href="http://www.atmarkit.co.jp/fwin2k/win2ktips/346dbaccess/dbaccess.html"&gt;&lt;BR&gt;http://www.atmarkit.co.jp/fwin2k/win2ktips/346dbaccess/dbaccess.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;@IT 「AccessをMSDEのフロントエンドとして利用する」&lt;A href="http://www.atmarkit.co.jp/fwin2k/win2ktips/404accessmsde/accessmsde.html"&gt;http://www.atmarkit.co.jp/fwin2k/win2ktips/404accessmsde/accessmsde.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Microsoft Office Online 「アクセスプロジェクト」&lt;BR&gt;&lt;A href="http://office.microsoft.com/ja-jp/access/CH062526761041.aspx"&gt;http://office.microsoft.com/ja-jp/access/CH062526761041.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25279.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>InfoPath2003とSQL Server2000の組み合わせでバグかもしれない現象に遭遇した。その２</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/26/25269.aspx</link><pubDate>Thu, 26 Jun 2008 11:47:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/26/25269.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25269.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/26/25269.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25269.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25269.aspx</trackback:ping><description>&lt;P&gt;&lt;SPAN lang=EN-US&gt;また似たようなエラーが出るようになった。今回は順調に稼動していたマシンで、あるときからInfoPathが使えなくなった。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;データは「従事時間調査」というものを行うもので、単にひとつのテーブルだけがデータ接続になっている。テーブル構造の概要は次のとおり。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;[職員番号],[氏名],[月],[日],[従事時間]・・・&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;フォームは「月」でクエリを行い、一月ごとの従事時間入力を行うようにしている。ここである教員が、4月や6月のデータは読み出せるのだが、5月のデータを読み出そうとすると「一部の動作規則を適用できませんでした」というメッセージが出てエラーになる。詳細は以下のとおり。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;「一部の動作規則を適用できませんでした」&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;ドキュメント オブジェクトの query メソッドに失敗しました。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;指定されたクエリを実行できません。&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;ファイルは有効な XML ドキュメントではありません。&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;無効な文字で名前が始まりました。&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;行 197、位置 3&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;/&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;--^&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;----------------------------------------------------------------------------&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;「一部の動作規則を適用できませんでした」というメッセージがおかしい。フォーム上、何も動作規則を設定していないのだが。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;以前におこった現象については、以下に記述している。&lt;BR&gt;&lt;A href="http://blogs.sqlpassj.org/hotikisu/archive/2007/01/16/20444.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/archive/2007/01/16/20444.aspx&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25269.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>セカンダリデータ接続で必要なデータだけを取得するには（SQL Serverにサブクエリのビューを作る）</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25019.aspx</link><pubDate>Thu, 12 Jun 2008 22:40:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25019.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25019.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25019.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25019.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25019.aspx</trackback:ping><description>&lt;P&gt;InfoPathのセカンダリデータ接続でサブクエリーを書いてデータを絞り込む手法を紹介した。&lt;/P&gt;
&lt;P&gt;InfoPathでSQL Serverから自分の氏名を取得するには（データ接続にサブクエリーを書く）&lt;BR&gt;&lt;A href="http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx&lt;/A&gt;&lt;BR&gt;セカンダリデータ接続で必要なデータだけを取得するには（データ接続にサブクエリーを書く）&lt;A href="http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;このサブクエリーを書く方法は、SQL Serverにビューを作ってもできる。次のようなテーブルがSQL Serverにあるとする。&lt;/P&gt;
&lt;P&gt;　　生徒（学籍番号,生徒氏名,担任ユーザーID）&lt;/P&gt;
&lt;P&gt;このとき、次のようなビューをSQL Serverに作る&lt;/P&gt;
&lt;P&gt;　　select 学籍番号 from dbo.生徒 where ('（ドメイン名）' + 担任ユーザーID = (select suser_sname() as Expr 1))&lt;/P&gt;
&lt;P&gt;もし担任ユーザーIDにドメイン名も含んだユーザーデータを作っておくなら次のようでいい&lt;/P&gt;
&lt;P&gt;　　select 学籍番号 from dbo.生徒 where 担任ユーザーID = (select suser_sname() as Expr 1)&lt;/P&gt;
&lt;P&gt;このビューに対してInfoPathでセカンダリデータ接続を作る。つまり、SQL Serverに書かれたビューも、それを呼び出すアクティブディレクトリユーザー名に対してsuser_sname()関数が正しく実行されるのだ。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25019.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>セカンダリデータ接続で必要なデータだけを取得するには（データ接続にサブクエリーを書く）</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx</link><pubDate>Thu, 12 Jun 2008 22:28:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25018.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25018.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25018.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25018.aspx</trackback:ping><description>&lt;P&gt;InfoPathではメイン接続以外にセカンダリデータ接続を作ることができ、でデータを取得することができ、セカンダリデータ接続で取得したリストをフォームのドロップダウンリストボックスなどで選択要素として利用できる。これはとても便利だ。しかしセカンダリデータ接続では動的にクエリを行ってデータを選択することができないため、対象のテーブルの全部のデータを取得するしかない。このときに問題となるのが、ある程度のデータ量を超えたとき、フォームの実行速度が極端に低下することだ。フリーズしたのではないか、と思うほどパフォーマンスが低下する。これはぜひ後のバージョンでは解決してもらいたいが、現状では次のようなサブクエリを使って、動的にクエリを行う工夫ができる。&lt;/P&gt;
&lt;P&gt;たとえば生徒40人のクラスが30学級あれば、全校生徒のデータは120人になる。このうち自分の担任するクラスのリストだけをセカンダリデータ接続で取得したいときには、次のようにする。&lt;/P&gt;
&lt;P&gt;（１）次のテーブルを作る&lt;BR&gt;　　生徒（学籍番号,生徒氏名,担任ユーザーID）&lt;BR&gt;（２）InfoPathでデータ接続ウィザードを実行し、SQL文を次のように書き換える&lt;BR&gt;　　　select "生徒氏名" from "dbo"."生徒" as "生徒" where '（ドメイン名）' + 担任ユーザーID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;つまりSQL Serverから自分のアクティブディレクトリユーザー名を取得するsuser_sname()関数を利用してサブクエリーを書き、生徒テーブルから自分のクラスの生徒データだけを取得するのだ。&lt;/P&gt;
&lt;P&gt;このとき、テーブルの担任ユーザーIDにドメイン名も含めてデータを登録しているなら次のようでいい&lt;/P&gt;
&lt;P&gt;　　　select "生徒氏名" from "dbo"."生徒" as "生徒" where 担任ユーザーID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;ここでは学校のクラスで担任が自分のクラスの生徒名をリストとして取得する例を説明したが、一般企業でも社員の中から自分が所属する支店の社員情報だけのリストを取得したい、といった事例が考えられるだろう。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25018.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>InfoPathでSQL Serverから自分の氏名を取得するには（データ接続にサブクエリーを書く）</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx</link><pubDate>Thu, 12 Jun 2008 22:11:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/25016.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/12/25016.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/25016.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/25016.aspx</trackback:ping><description>&lt;P&gt;以前、InfoPathのデータ接続でSQL Serverからアクティブディレクトリのユーザー名を取得する方法を書いた。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.sqlpassj.org/hotikisu/articles/16073.aspx"&gt;http://blogs.sqlpassj.org/hotikisu/articles/16073.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ここで使ったsuser_sname()関数を使って、InfoPathでSQL Serverから自分の氏名を取得するデータ接続を作ってみた。方法は次のとおり。&lt;/P&gt;
&lt;P&gt;（１）SQL Serverに次のようなユーザー情報のテーブルを作っておく&lt;BR&gt;　　ユーザー（ログオンID,ユーザー氏名）&lt;BR&gt;（２）InfoPathでデータ接続を作る&lt;BR&gt;（３）ウィザードで適当なテーブルを選択し、SQLの編集を行う&lt;BR&gt;（４）SQL文を次のように書き換える&lt;/P&gt;
&lt;P&gt;select "ユーザー氏名" from "dbo"."ユーザー" as "ユーザー" where '（ドメイン名\）' +&amp;nbsp;ログオンID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;もしユーザーテーブルのログオンIDにドメイン名も含んだデータを格納しているなら、次のようでいい。&lt;/P&gt;
&lt;P&gt;select "ユーザー氏名" from "dbo"."ユーザー" as "ユーザー" where&amp;nbsp;ログオンID = (select suser_sname())&lt;/P&gt;
&lt;P&gt;&amp;nbsp;つまりInfoPathのデータ接続にサブクエリを書くだけでいいのだ。この手法は応用がきくだろう。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/25016.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ホチキス先生</dc:creator><title>あまりにも複雑なビューを作りすぎた自分に責任があるのだが</title><link>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/06/24835.aspx</link><pubDate>Fri, 06 Jun 2008 01:00:00 GMT</pubDate><guid>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/06/24835.aspx</guid><wfw:comment>http://blogs.sqlpassj.org/hotikisu/comments/24835.aspx</wfw:comment><comments>http://blogs.sqlpassj.org/hotikisu/archive/2008/06/06/24835.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.sqlpassj.org/hotikisu/comments/commentRss/24835.aspx</wfw:commentRss><trackback:ping>http://blogs.sqlpassj.org/hotikisu/services/trackbacks/24835.aspx</trackback:ping><description>&lt;P&gt;いくつものビューを組み合わせ、ビューのネスト状態と言っていいほどのビューを作ってしまった。作ろうと思えばいくらでも複雑なビューができてしまうので、気をつけないといけない。ついにクライアントのInfoPathから接続してもタイムアウトになってしまうくらいのビューを作ってしまった。&lt;/P&gt;
&lt;P&gt;InfoPathからSQL Serverの複数のテーブルを参照するにはいくつかの方法がある。ひとつはテーブルを結合してひとつのビューにし、それに接続する方法だ。この方法の利点は、データ構造がSQL Serverに依存するので、InfoPathのメンテナンスが必要ないことだ。ビューを変えたければSQL Server側だけで変更すればよい。しかしこの方法はInfoPathからデータの送信ができない。&lt;/P&gt;
&lt;P&gt;ふたつ目の方法は、InfoPathのメインデータソースに複数のテーブルをバインドする方法。この場合は、主キーさえ間違いなく設定すれば送信可能なフォームができる。しかしデータ構造を変更しようと思えば、InfoPathのフォームを編集し、データ接続を再設定しなければならない。InfoPathのデータ接続ウィザードは構造の視認性が良くないので、あまり複雑な構造は実際には作れないだろう。&lt;/P&gt;
&lt;P&gt;そしてもうひとつは、セカンダリデータソースとしてメインデータソースと分けて接続する方法だ。これならメインデータソースは送信可能だし、セカンダリデータソースは元のテーブルやビューと一対一で接続するので構造がわかりやすい。しかしメインデータソースとセカンダリデータソースの連携には制約がある。この点については、おそらくVSTOなどで開発するとある程度融通が利くのではないか、と想像しているのだが。&lt;/P&gt;
&lt;P&gt;複雑なビューについては、自分では合理的に作っているつもりだが、本当はもっと効率のよいクエリの書き方があるのだろうと思う。それと、SQL文として複雑であるか否かという問題と、処理速度が早いか遅いかは別問題であるので、クエリの実行速度についても検討しなければいけない時期にやってきた。ましてや今年は単年度だけの処理をやっているが、来年、再来年と年を経るごとにデータ量は増えていくわけで、そのこともパフォーマンスに影響するはずだ。というか、影響しないように作らなければならない、と言うべきか。&lt;/P&gt;
&lt;P&gt;ある意味でシステム構築は初期のステージを過ぎ、次のステージへ進んだといえる。&lt;/P&gt;&lt;img src ="http://blogs.sqlpassj.org/hotikisu/aggbug/24835.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>