ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Posts Tagged ‘データベース

神戸SQL Server Users GroupのSQL Serverセミナー(初級1)を実施した

leave a comment »

校務の情報化にはデータベースの知識と技術が必要なことから、SQL Serverを勉強するコミュニティを作った。とりわけ今年度から指導要録のデータベース化が一歩前進することから、各学校の担当者はデータベース化に取り組まざるを得ないはずだ。

神戸SQL Server Users Group
http://kobesqlserverusersgroup.wordpress.com/

昨日、2013年11月9日(土)には神戸SQL Server Users Groupと特定非営利活動法人 情報技術相互支援協会の共催で、SQL Serverセミナー(初級1)を開催した。

このSQL Serverセミナーでは、SQL Serverの初心者がSQL Serverの基礎を学び、データベースを使ったシステムを作り運用することができるようにすることを目標としている。1回のトレーニングを90分とし、初級講座を1、2と分けて企画した。初級1ではSQL Management Studioの使い方、テーブル作成、データベースダイアグラム、ビューとリレーションシップ、データの型、簡単なSQL文、を内容とした。初級2ではストアドプロシージャ、トリガ、ユーザー定義関数、データベースダイアグラム、SQLの応用、を計画している。

初級セミナーは1と2でおおよそ基本を網羅するように考えたが、やはり90分では深まりに欠ける。あらかじめ用意した初級1のプリントをひととおり網羅したが、やりたいと思っていた直積やPIVOTまで説明できなかったし、SQL文もごく基本的なものに留まった。次回は初級1.5的なセミナーとし、フォローアップを考えている。

今後もSQL Serverセミナーは神戸三宮で定期的に開催する予定だ。日程は決まり次第、神戸SQL Server Users Groupのblog http://kobesqlserverusersgroup.wordpress.com/ に公開するので、興味がある人はチェックしてほしい。

広告

Microsoft Visual Studio LightSwitch 2011を使ってみた – テンプレートとウィザードにより簡単にSQL Serverなどのデータベースと連携する業務アプリケーションを作ることができる

leave a comment »

IMG_8288_mid_640_480

Microsoft Visual Studio LightSwitchのページには「Microsoft Visual Studio LightSwitch は、テンプレートなど使って素早く簡単に業務アプリケーションを作成し、デスクトップやクラウドに展開できる簡易開発ツールです。」とある。Visual Studioはたいへん使いやすい開発ツールであり、書店にいくと初心者向けの解説書がたくさんある。どの本もわかりやすく、C#プログラミングを独習する環境は整っている。しかしほとんどの初心者向けの解説書では、Windows Formをつくりアプリケーションの中でデータを処理することは説明されているが、データベースに接続するアプリケーションを作ろうと思えば敷居がぐっと高くなる。それには「データベース接続アプリケーション開発入門」といった別の解説書があるくらいだ。

いまどきデータ処理を行うとき、SQL Serverなどのデータベース連携抜きに業務アプリケーションは考えられないだろう。データベースに連携しなくてよいなら、ExcelやAccessなどを使えばいいはずだ。いかにデータベース連携アプリケーションを簡単に作ることができるか、その解答が、このMicrosoft Visual Studio LightSwitchだ。

少し使ってみればわかるが、データベースにテーブルさえ作っておけば、Visual Studio LightSwitchではウィザードによってあっというまにデータベース連携のフォームを作ることができる。デフォルトで用意されているテンプレートは、データを閲覧するための「一覧および詳細画面」、「データ検索画面」、データを編集するための「詳細画面」、エクセルのような表の形で編集できる「編集可能グリッド画面、そして新規データを入力するための「新規データ画面」だ。

データに対して処理をしたいとき、デザイン画面からドロップダウンリストで「生徒_Inserted」や「生徒名_Changed」といったメソッドを追加でき、そこに「合計点数 = 中間考査点 + 期末考査点」や「result = 中間考査 + 期末考査」といった式を書くことで演算値を得ることができる。直観的でわかりやすい。

学校で使うなら、欠席時間数、中間考査と期末考査の素点、平常点、などを入力し、評価点を定期考査6割、平常点4割で集計し、ランク付けして10段階評価と5段階評定を自動的に計算する、欠席時間数が所定の時間をオーバーしたら評価は出さない、といったフォームを簡単に作ることができる。またデータをSQL Serverに連携しておけば、入力結果はSQL Serverにストアされる。

Microsoft Visual Studio LightSwitchは全機能を持った評価版を90日間試すことができる。また驚くべきことにアカデミック版なら、今Amazonで調べると4,109円である。Microsoft Visual Studio LightSwitch、まさに学校の教員むけの開発ツールだという印象だ。成績処理などのシステムを改善しようと思っているなら、ぜひこのMicrosoft Visual Studio LightSwitchを使ってみることをお奨めする。

SQL Server – 「基準値」テーブルでコードを一括管理する

leave a comment »

SQL Serverによるシステムがある程度になると、いろいろな処理をするためのコードを効率よく処理することが必要になる。学校の場合は、たとえば「教科科目コード」や「時限コード」のような時間割に関するコード、「在籍コード」や「異動コード」など生徒の在籍状態に関するコード、などだ。

これらのコードをシステム上どのようにして処理するかだが、単純に考えると「教科科目コード」や「時限コード」といった名前のテーブルを作りコードを記録することだが、それぞれのコードに対してテーブルを作ると、テーブルの数が増えてシステム全体の見通しが悪くなる。ちなみに、このようにテーブルを作る場合でも、テーブル名は「コード教科科目」や「コード時限」のように「コード」といった共通の名前を前にするとテーブル名を一覧表示したときに見通しがよくなる。もちろん「C_教科科目コード」や「C_時限コード」のようにシンボリックな文字を前につけてもよい。

システムが大きくなると、このようなコードを記録する必要も大きくなる。そこでコードを一括して「基準値」テーブルにストアして管理する方法がよい。そのためにコードはすべて二桁の文字char(2)か、または日付smalldatetimeと統一し、次のようなテーブルを作る。

——————————————————————————-

テーブル名:基準値
フィールド:
基準値管理番号 int IDENTITY(1,1) NOT NULL
      基準分類 varchar(50)
      基準内容 varchar(50)
      基準値 char(2)
      基準日 smalldatetime
      表示順 int

——————————————————————————-

このテーブルで、「基準分類」によってコードの分類をし、コードの内容は「基準内容」に記述する。たとえば次のようにデータをストアする。

——————————————————————————-

基準分類    基準内容    基準値    基準日    表示順
性別          男              01          NULL      1
性別          女              02          NULL      2
異動         入学           01          NULL      1
異動         休学           02          NULL      2
異動         復学           03          NULL      3
異動         留学           04          NULL      4
異動         転学           05          NULL      5
異動         退学           06          NULL      6
異動         卒業           07          NULL      7
教科         国語           01          NULL      1
教科         地歴           02          NULL      2
教科         数学           03          NULL      3
教科         理科           04          NULL      4
教科         保健体育    05          NULL      5
教科         芸術           06          NULL     6
教科         外国語        07          NULL     7
教科         家庭           08          NULL     8
教科         情報           09          NULL     9
教科         商業           10          NULL    10
日程    前期開始日  NULL  2011/04/01   1
日程    前期終了日  NULL  2011/09/30   2
日程    後期開始日  NULL  2011/10/01   3
日程    後期終了日  NULL  2012/03/31   4

——————————————————————————-

この「基準値」テーブルを使って必要なコードを取得する。たとえば「性別」のコードを使うときは、

select 基準内容,基準値 from 基準値 where 基準分類=’性別’ order by 表示順

といったクエリを使う。これを「v_性別コード」のようなビューにしておくのもよいだろう。

「日程」データを取得するには、

select 基準内容,基準日 from 基準値 where 基準分類 = ‘日程’ order by 表示順

とする。

このように、コードを一元管理することで「あのコードを格納したのはなんというテーブルだったっけ」というように探し出す必要がなくなるのだ。

Written by Yoshio Matsumoto

2011年11月10日 at 10:55 PM

正しく作られたシステムでも、運用を誤り破綻する恐れをゼロにできない

leave a comment »

いささか大上段に構えたタイトルにしたが、実際におこったことは些細なことである。しかし、今日はあらためてシステムを作ることの難しさを考えさせられた。

今日のテーマはシステム構築における純粋な技術の話ではなく、人の思考や行動といったヒューマンな側面についてである。しかしシステム開発は技術的に完全であればよいものではなく、ヒューマンな要素を十分に考慮しなければならない。また狭い意味でのコンピュータシステムだけを考えるのではなく、データ入力の帳票のあり方、作業の方法なども見直さなければならないケースもある。

私は勤務校でSQL Serverをデータベースにし、InfoPathとAccessを組み合わせた、いわゆる「OBA開発」の手法でクライアントサーバー型の「校務システム」を構築し、運用している。このシステムの基本は、単位制高校である本校の講座編成、時間割、履修登録、出欠、考査点、成績、修得単位など、教務処理を行うものである。それに加えて、通知表などを家庭に発送するための住所管理、職員の勤務時間を集計する従事時間集計、学校評価のアンケート集計など校内の情報管理を一元的に行うものへ発展させている。「OBA開発」の利点は、運用しながらシステムを改良することがやりやすいところだ。

このシステムに今年度から生徒の保健情報も扱うことにした。身長、体重などの健康記録に加えて、内科検診など検査結果も処理できなければならない。これらのデータをどのようにデータベース化するかについては、養護教諭つまり保健の先生と相談しながら設計し、実際のデータに対応できるものにした。このあたりの詳細は、また別にblogにまとめるつもりだ。

さて前置きが長くなったが、このシステムに「結核検診結果」を入力することになった。結核検診について、SQL Serverのテーブル構造は次のようになっている。

<SQL Serverのテーブル構造>
学籍番号 char(7)
年度 char(2)
結核検診 char(2)
結核検診詳細 varchar(50)

「結核検診」フィールドはコード管理し、00が「未受診」、01が「異常なし」、02が「異常あり」とし、所見があったときは「結核検診詳細」フィールドに自由記述することとした。

これにデータを入力するためのInfoPathフォームは次のようなものである。

脊柱側弯_001_edit
<Fig.1 結核検診結果を入力するInfoPathフォーム>

SQL Serverで「結核検診」フィールドのデフォルト値を00にしておき、ボタンで01または02に変更できるようにする。「結核検診詳細」テキストボックスは、「結核検診」フィールドが02でなければグレーアウトし、読み取り専用になるようにしておく。これはInfoPathのテキストボックスのプロパティで「条件付き書式」で設定する。結核検診の結果が「異常あり」でなければ、詳細は入力できないようにしておくのだ。入力間違いを少なくする仕掛けだ。

さて、入力作業をしているところに、ふと、立ち寄って後ろから見ていると、なにかおかしいことに気づいた。次のような入力画面が見えたのだ。

脊柱側弯_002_edit
<Fig.2 目にとまったおかしな入力画面>

結核検診の結果を入力しているのに、詳細が「脊柱側湾」となっている。入力担当は若い男性教員だ。どうやら養護教諭に頼まれてかわりに入力しているらしい。

「脊柱側湾」って、結核と関係ないんじゃない」「はあ。」「それは内科検診の項目だから、入力フォームを間違っていると思うよ」「はあ。でも結核検診の結果に書いてあるんです。養護教諭の先生がとりあえずそこに入力しておいて、って言ったので」

そこで入力のために使っている検診結果の表を見ると、確かに次のように書かれている。氏名はもちろん仮名である。

脊柱側弯_003_edit
<Fig.3 データ入力に使った結核検診の結果表>

「結核検診」の記録のはずなのに、結核と関係ない「脊柱側湾」の所見が書かれている。これはおかしいのではないか。そこで養護教諭に事情を問いただした。すると、こういうことである。

結核検診はレントゲンなので、結核の疑いのあるなしだけでなく、脊柱側湾つまり脊柱が曲がっている症状もわかることが多いのだ。そこで慣習として、いわばサービスみたいなものとして、脊柱側湾の症状がレントゲンからわかれば、検査機関が所見に書いてくれるということなのだ。

養護教諭の立場からすると、少しでも多くの症状が早く発見できればよいのだろうが、データ入力上は間違いの原因になる。この生徒は、脊柱側湾であるが、結核の異常はないのである。しかし、上のような入力では、結核検診で異常が発見されたことに集計されてしまう。

何が問題なのか。まず入力に使う結果用紙の様式が問題である。脊柱側湾を結核検診で所見に書くなら、所見の欄を2つに分け、まず結核検診の結果を書き、それとは別にその他の所見を書くべきである。検査結果の用紙を見直したい。

もし検査用紙の見直しができないならば、データ入力において、やはりそのデータに関する、ある程度の知識を持っていること、データがどのように集計されるべきなのかという意味を理解していることが必要である。書式がデータ入力に即していなかったり、記入の仕方があいまいであっても、きちんと判断できる人間が入力するなら問題ない。

今回のケースは些細なこと、また結核検診という、まず全員が異常なしとなるだろう記録であったので、このまま間違い入力をしてしまっても、後で間違いが発見されただろう。しかしこのようなケースが他の例でも起こりうることであり、いかに正しく設計されたシステムであっても、間違ったデータ入力が見過ごされて信頼性のないデータで汚染され、全体として機能しないシステムに陥る危険を垣間見た気がする。

アドミンティーチャーズ第5回(東京)勉強会は2011年2月5日開催

leave a comment »

ようやく東京勉強会の計画ができたアドミンティーチャーズだ。テーマは「校務処理にデータベースを活用しよう」とした。コンピュータや校内LANなど機器としては充実してきた近年だが、必ずしも校務の情報化がすすんだとは言えない。校務の情報化はデータベースの活用が欠かせないが、まだまだ学校でデータベースをうまく活用している事例は少ないと思われる。そこで今回はテーマをデータベースに絞った。

私からは、全日制普通高校を念頭に置いた教務処理システムを、InfoPathとAccessで作成する演示をする。InfoPathもAccessもMicrosoft Officeの製品であり、これらを使ってシステムを開発することを「OBA開発」と言う。実際に作るところを見てもらえばわかるが、InfoPathとAccessによるデータベースシステムを作成するのは実に簡単である。データベースはできればSQL Serverにしたいところだが、データベースをやったことがない人には敷居が高いようなので、Accessデータベースを使うことにした。50分でどこまでできるか、楽しみにして欲しい。

場所は、筑波大学東京キャンパスをお借りすることができた。学校の先生だけでなく、学校の情報化に関心のある方はぜひ参加して欲しい。参加費無料、定員は40名だ。参加受付はアドミンティーチャーズのWebより電子メールで登録することにしている。

アドミンティーチャーズWeb

http://adminteachers.wordpress.com

第5回勉強会(東京)のページ

http://adminteachers.wordpress.com/2010/12/27/%e7%ac%ac%ef%bc%95%e5%9b%9e%e3%82%a2%e3%83%89%e3%83%9f%e3%83%b3%e3%83%86%e3%82%a3%e3%83%bc%e3%83%81%e3%83%a3%e3%83%bc%e3%82%ba%e5%8b%89%e5%bc%b7%e4%bc%9a%ef%bc%88%e6%9d%b1%e4%ba%ac%ef%bc%89%ef%bd%9e/

Written by Yoshio Matsumoto

2011年1月14日 at 11:32 PM