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

InfoPath & SQL Server !

Archive for the ‘SQL’ Category

IoT開発のためのマイコンボードについて考える – その必要な特性は何か

leave a comment »

現在、様々なマイコンボードが開発され生産、販売されており、それらは様々な用途に利用されているが、IoT 開発におけるマイコンボードに必要な特性は何だろう。

広告

C# – 教科「情報」の授業で使うタイピングトレーニングのソフトを作っています。その 3。河端さんとのコラボレーション。Microsoft Flow と Microsoft Power BI で何ができるか。

leave a comment »

教科「情報」の授業で使うタイピングトレーニングのソフトを作っており、Microsoft SQL Server の大家であり Microsoft MVP でもあった河端さんと一緒に考えている。私は Visual Studio でクライアントの開発をし、河端さんにクラウドのアプリケーションを作ってもらっている。クライアントは Windows デスクトップアプリで、開発言語はもちろん C# だ。

河端さんには、クライアントアプリケーションから POST データを受け取るサービスを、Microsoft Flow で作ってもらった。Microsoft Flow で受け取ったメッセージを電子メールで通知する、といったシステムを、お互い離れた拠点でメッセージをやりとりしながら、およそ 30 分で作ることができた。これが現代的な開発スタイルだといえよう。

そして河端さんには、Power BI の分析ページを作ってもらった。こんなかんじだ。

文字入力トレーニングアプリ_003_PowerBI_1_mid_640

文字入力トレーニングアプリ_004_PowerBI_2_mid_640

文字入力トレーニングアプリ_005_PowerBI_3_mid_640

河端さんは、私がクライアントの Windows フォームアプリケーションを調整している間に、Microsoft Flow に送られたデータをこのように分析する Microsoft Power BI のフォームを作られていた。これらのビューを作るには、およそ 15分もあればよいそうだ。

このように、Microsoft Flow と Microsoft Power BI を使うとアイデアさえまとまればアプリケーションを作る手間は革命的に小さくなった。重厚長大のシステム開発の時代は終わったのだ。

C# – 教科「情報」の授業で使うタイピングトレーニングのソフトを作っています。その 2。河端さんとのコラボレーション。

leave a comment »

先日、SQL Server のスペシャリストで Microsoft MVP でもあった河端善博さんと久しぶりにお会いし、Microsoft Flow や Power BI の話をうかがった。実に興味深く、私がやっている IoT や情報教育で使う場面がないか考えた。そこで、まず今作り始めている文字入力トレーニングソフトのデータを Microsoft Flow で処理し、Power BI で分析することをやってみることにした。

まず、実習結果を自分で見るだけなら時間を計り正しく入力できたかどうかを判定できればよい。しかしデータを集約するなら、誰の実習結果かという ID が必要になる。そこで ID をどうするかを含めて、通信データのフォーマットを決めることにした。河端さんから提示されたのは次の項目だ。

"生徒識別子"
"経過秒数"
"スコア"

生徒識別子は文字列型とし、経過秒数やスコアのデータ型をどうするか相談をしたが、型がそろった方がアプリケーション側で作りやすいので文字列型にしてもらった。これに加えて次の項目を付け加えた。

手本文字数"

「スコア」は何文字まで間違いなく入力できたかの文字数を評価することにしているが、もともとの手本の文字数が何文字かがあった方が良いと考えたので、それを加えることにしたのだ。これらの集めるデータは今後どんどん変わっていく可能性があるが、とりあえずこの 4つの項目にすると決めた。データの送信は Web サービスの POST メソッドとし、渡すデータは json で記述することにした。こんなかんじになる。

{
"生徒識別子": "A0000",
"経過秒数": "10",
"スコア": "89",
"手本文字数": "100"
}

すでに作っているアプリケーションに「生徒識別子」のテキストボックスを追加し、Web サービスに POST するコードを書いた。

文字入力トレーニングアプリ_001_mid_640

その他の変更点は、入力するための原稿をテキストファイルにして保存し、アプリケーションの起動時に読み込む形にした。また入力原稿は教科書の本文とすることとし、入力分のはじめとおわりを表示して、教科書のどこの文を入力するのかを間違わないようにした。

私がアプリケーションを調整している間に、河端さんに Microsoft Flow で Web サービスを作っていただいた。河端さんに作っていただいた Microsoft Flow は次のようなものだ。Web サービスへの POST の結果を知りたかったので、電子メールで送信してもらうようにお願いした。次の画面は河端さんからもらったものだ。

18109673_10155304824759394_589213491_n_mid_640

何度か試験を繰り返し、正しくデータが送られることを確認した。データの送信確認は電子メールが送られてくることでわかる。

文字入力トレーニングアプリ_002_mid_640

このように、私が Visual Studio 2017 でアプリケーションを作り、河端さんが Microsoft Flow でクラウド側のシステムを作る。このコラボレーションが、実質 30 分ほどで動くシステムができあがった。

たとえば生徒の家庭学習などを IT でサポートする場面で、このように簡単にアプリを作ってクラウドの共有フォルダなどで配布し、練習結果を Microsoft Flow で受け取って集計する、Power BI で分析する、といったことが簡単にできる。何年か前なら、なんらかの学習システムみたいなものを作ったものだが、今やこのような時代だ。

学校の先生のための SQL Server 2016 による成績処理 (1) – SQL Server 2016 Express のダウンロード

leave a comment »

今日における高等学校では生徒の成績処理や学籍管理において、多少ともコンピュータの処理がかかわっているだろう。授業担当者は自分が担当する講座の生徒の成績を、学級担任はクラスの生徒の出席状況やホームルーム活動の記録などをエクセルのような表計算ソフトで処理しているだろう。そして学校全体の成績管理をする教務部は、これらのデータを集めて成績会議の資料を作り、生徒の指導要録を管理し、また進路指導部は調査書の処理をしているはずだ。

これらのデータ処理をエクセルのような表計算ソフトを使って学校全体で行っているケースは多いと思われる。しかし表計算ソフトウエアはもともと個人ベースのデータ処理ツールとして開発されたもので、マルチユーザーでの利用には限界がある。学校の規模にもよるが、高等学校には数十名の教職員が勤務しており、定期考査が終わり評価をつけ、成績会議までの日程はあまり長くない。そして何よりも成績処理には正確さが求められる。成績処理には会計処理における「出納違算金」のようなものはなく、1点でも誤りがあってはいけないのだ。

また学校制度が多様化し、学習指導要領に決められていない「学校設定科目」などを多く開講する「総合学科」や夜間定時制を昼間の時間帯にも拡張した「多部制」、学年の区切りがない「単位制」など新しいタイプの学校ができ、また従来からも自宅学習が基本となる「通信制」がある。これらの学校では、そもそも紙ベースでの成績処理、学籍管理には無理があるため、成績処理システムを外注していることが多い。

筆者は10年間、生徒定員1,120名の大規模な多部制、単位制高校に勤務し、成績処理と学籍管理を行ってきた。この学校は午前、午後、夜間の3つの部を持つ多部制、単位制高校で、毎年280名の入学生を受け入れ、100講座の授業を編成し、約4,500の受講登録をして単位の管理を必要とした。出席データは週当たり8,000件、1年間で30万件となった。これらの処理を、私が赴任するまでは業者に発注したデータベースシステムを使っていたが、さまざまな理由で学校事情をあわないものであったため、筆者はMicrosoft SQL Serverを使って学校独自のシステムを構築して運用した。この経験から学校では、その学校に応じたシステムを現場の教員が作る、いわゆる「内製」が望ましいと確信している。SQL Serverは簡単だ。ぜひ多くの教員がSQL Serverを知り、自ら望む最高のデータベースを構築し運用できることを願っている。

現在マイクロソフトのサイトから、SQL Server 2016がダウンロードできる。
Microsoft SQL Server のページ
https://www.microsoft.com/en-us/sql-server/sql-server-2016

SQLServer2016_for_teachers_001_mid_640

SQL Server 2016にはいくつかのバリエーションがあるが、その中に無料で使えるExpress版がある。実運用では正式版を購入することになるが、試験的な利用ではこのExpress版を使うことができ、現時点でSQL Server 2016 SP1 Expressバージョンが提供されている。

上のページでスクロールし、Editions をクリックするとダウンロードページへのリンクがわかる。
Microsoft SQL Server ダウンロードのページ
https://www.microsoft.com/en-us/sql-server/sql-server-2016-editions

SQLServer2016_for_teachers_002_mid_640

ダウンロードのリンクをクリックすると Microsoft SQL Server 2016 Service Pack 1 Express のダウンロードページが開く。いくつかの言語の版を選択できるようになるので言語のドロップダウンリストボックスをクリックし、英語、フランス語、ドイツ語、イタリア語につづく Japanese を選択してダウンロードする。
Microsoft SQL Server 2016 Service Pack 1 Express ダウンロードのページ
https://www.microsoft.com/en-us/download/details.aspx?id=54284

SQLServer2016_for_teachers_003_mid_640

ダウンロードではディスクのどこかにフォルダを作り、そこに保存する。保存できれば次のようなファイルが生成する。ファイル名は SQLServer2016-SSEI-Expr.exe だ。

SQLServer2016_for_teachers_004_mid

重ねて述べるが、SQL Server は難しくない。また Microsoft SQL Server のように多くのユーザーの支持を得て、業界標準となり、長くバージョンアップを繰り返して使われてきた製品は、そのたびに使いやすく機能が豊富になる。身に着けたことは技術資産となり積み上げられる。これを機会にぜひ使ってほしい。

Written by Yoshio Matsumoto

2017年4月3日 at 10:21 AM

Microsoft Visual Studio 2015 と SQL Server データベースファイルで開発する「目からうろこ」の C# プログラミングによる成績処理システム(5) – 生徒基本情報のデータを整理してデータベースに保存する下準備をする

with 5 comments

1.既存のデータを集める

VisualStudio_成績処理_054_mid_640

生徒基本情報のようなデータは、成績処理にデータベースを使っていない学校でも、多くはエクセルのような表計算で管理されているだろう。まず校内にある生徒データを集めてエクセルでまとめる。エクセルはこのようなデータ型が決まっていないデータを集めて整理するには使いやすい。

この例でわかるように、表計算のデータはデータとしてそのまま使えない場合がある。よくあるのは、数字に見えるが実際は日本語の2バイトフォント、いわゆる全角文字になっていること、アルファベットも全角と半角が混在していること、よけいな空白が混じっていること、などだ。上の表計算データの例では、氏名が姓と名に分かれておらず、また空白が入っていること、氏名の後ろに何らかの意味を持った記号「・」があること、などだ。

2.氏名データを姓と名に分ける

VisualStudio_成績処理_055_mid_640

どうしても手作業が発生するのは、氏名データから姓と名を分ける作業だ。ここではエクセルの関数を使って氏名のデータから全角と半角の空白と、これも全角と半角の「・」を取り除き、前から2文字を仮に姓だとして、前から3文字以降を名だとして切り取っている。エクセルの表計算上の関数は次のようになる。

「姓名の空白をとる」関数の例 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(E2," ","")," ",""),"・",""),"・","")
「姓を切り取る」関数の例 =LEFT(H2,2)
「名を切り取る」関数 =MID(H2,3,10)

また数字のようで日本語であるかもしれない「学年」や「出席番号」を数字にし、性別からよけいな空白を取り除く、クラスを半角にする、などの処理をする。

「学年を数字にする」関数の例 =VALUE(A2)
「出席番号を数字にする」関数の例 =VALUE(D2)
「性別から空白を取る」関数の例 =SUBSTITUTE(SUBSTITUTE(F2," ","")," ","")
「クラスを半角にする」関数の例 =ASC(C2)

3.テーブル構造の見直しとテーブルを生成する SQL 文の変更

こうして既存のデータを整理すると、生徒基本情報データとしてあったほうが良いフィールドに気づく。ここでは「学科名」と「本科か専修コースか」のデータが必要だと考えた。

本校では、クラス名を学科名からつけている。建築科はクラス名に「A」をつけており、1年生は「A1」、2年生は「A2」といったものだ。したがって生徒が所属するクラス名から学科がわかるが、学科名はフィールドとして持っておいたほうが様々な処理がしやすいと考えた。また本校は一般の高校生が学ぶ「本科」に加えて、いちど高等学校を卒業した社会人が学ぶ「専修コース」があるので、それもデータとして加えたい。

・gakka 学科名 ユニコード可変長文字列型(4)
・honsen クラス名 ユニコード可変長文字列型(2)

「gakka」フィールドには「建築」、「機械」、「電気」、「情報技術」のデータを記録することに、「honsen」フィールドには「本科」または「専修」を記録することにする。

テーブル構造を変えるには、最初に作ったテーブル作成の SQL 文を変更して行う。メモ帳などのテキストファイルにしておいた元の SQL 文を次のように変更する。

VisualStudio_成績処理_056_mid_640

SQL 文のうち、[gakka] で始まる行と [honsen] で始まる行を追加した。

4.テーブルの削除とテーブル生成の SQL 文の実行

VisualStudio_成績処理_057_mid_640

Visual Studio の SQL Server オブジェクトエクスプローラーで、作った dbo.Seito テーブルを削除する。削除はテーブル名をポイントして右クリックし「削除」をする。

VisualStudio_成績処理_058_mid_640

テーブルを削除すると、テーブルにデータがあった場合そのデータがすべてなくなってしまうので、たいへん危険な操作になる。そこで「データベース更新のプレビュー」で、ほんとうに削除して良いか聞かれる。よければ「データベースの更新」をクリックする。

VisualStudio_成績処理_060_mid_640

テーブルがなくなった。

VisualStudio_成績処理_061_mid_640

SQL Server オブジェクトエクスプローラーで「テーブル」フォルダを右クリックし、もういちど「新しいテーブルの追加」を行う。

VisualStudio_成績処理_062_mid_640

ここでデザインビューを操作するのではなく、デザインビューの下の「T-SQL」に先のメモ帳で作り直した SQL 文を貼り付ける。すると上のデザインビューにも SQL 文に相当するデザインが表示される。

VisualStudio_成績処理_063_mid_640

テーブルのデザインビューの左上にある上向き矢印「更新」でデータベースを更新する。

VisualStudio_成績処理_064_mid_640

「データベース更新のプレビュー」で「データベースの更新」ボタンをクリックして更新を実行する。

VisualStudio_成績処理_066_mid_640

下部の「データツール操作」で更新が正常に完了したことがわかる。

VisualStudio_成績処理_067_mid_640

SQL Server オブジェクトエクスプローラーで生成したテーブルを確認する。

次回は整理したデータをテーブルに保存する作業を行う。

Microsoft Visual Studio 2015 と SQL Server データベースファイルで開発する「目からうろこ」の C# プログラミングによる成績処理システム(4) – Microsoft Visual Studio 2015 によるテーブル作成

leave a comment »

1.テーブルの作成

VisualStudio_成績処理_040_mid_640

前回までに Visual Studio の新しいプロジェクトを開始し、SQL Server データベースファイルを作成した。今回は SQL Server データベースファイルにテーブルを作成する。

Visual Studio の「SQL Server オブジェクトエクスプローラー」で SQL Server データベースファイルを展開すると「テーブル」が表示されるが、データベースファイルを作成した直後にはユーザーテーブルがなく、「システムテーブル」というフォルダだけが表示されている。これは SQL Server データベースファイル自体が利用するテーブルで、通常は中身を見ることがない。ユーザーが利用するテーブルを作成するには、「テーブル」フォルダを右クリックし「新しいテーブルの追加」を行う。

VisualStudio_成績処理_041_mid_640

Visual Studio の「SQL Server オブジェクトエクスプローラー」で「テーブル」フォルダを右クリックし「新しいテーブルの追加」を行うと、このようにテーブルのデザインビューが表示される。画面の左上にはデフォルトで「名前」、「データ型」、「Nullを許容」、「規定」の要素がある。これらを設定しながらテーブルの構造を決めていく。

2.生徒基本情報を保存するテーブルを作成する

まず生徒の氏名など基本情報を保存するテーブルを作成する。成績処理に必要な項目は何かを考えながらフィールドを決めていく。ここでは次のようなフィールドを作成することにした。

・seitoID 生徒番号 文字列型(6) 主キー
・sei 姓 ユニコード可変長文字列型(50)
・mei 名 ユニコード可変長文字列型(50)
・nen 学年 整数型
・class クラス名 1バイト可変長文字列型(3)
・num 出席番号 整数型
・sex 性別 ユニコード文字型
・birthday 生年月日 日付型
・nyunen 入学年度 整数型
・state 在籍状態 整数型

3.フィールド定義の考え方

ひとりの生徒に対して一意の「生徒番号」を与え、生徒個人にひとつの要素をフィールドとして用意する。姓、名、などだ。性別、生年月日、入学年度なども生徒ごとに決まった不変の値をとる。

学年、クラス、出席番号は、年度ごとに値が変わるフィールドになる。これは別テーブルにして年度ごとのデータを集積しなければならないが、生徒データにも現在の状態を記録することが望ましい。学年やクラスでデータを選択することが多いからだ。同様に、場合によっては姓、名も在学中に変わるケースがある。これも別テーブルで管理しなければならないが、現在の姓、名は生徒基本上でわかるようにしておきたい。これは厳密には「正規化」の概念に反することになる。データベース関係の書籍にはテーブル構造を考えるときに「正規化」をしなさい、と書かれているが、硬直的に正規化すると実際のデータ運用上クエリが複雑になるなど問題がおこる。このあたりは、ある程度データベース運用の経験を積むとわかってくる。「正規化」の考え方を理解した上で、実際にどこまで正規化をするかは、どのような処理をしたいのかを念頭におきながら設計していく。

4.データの型の考え方

次にデータの「型」をどうするかを考える。数値なのか文字なのか、コード化するかしないかは難しい選択だ。データベースは表計算ソフトなどでの集計と違い、それぞれのフィールドはデータの「型」を決めなけらばならない。

合計や平均を計算する必要があるデータは数値とする。たとえば出席日数や欠席時間数、成績といった項目だ。だが数字に見えても文字列型として処理することが望ましい場合もある。ゼロで始まるような数字、たとえば電話番号は数値型としては最初のゼロを記録することができなくなるため文字列型にする。学籍番号もゼロで始まる番号が与えられる可能性があれば、文字列型にする。

コード化するかどうかも選択が難しい。たとえば性別をコード化し、男は「1」、女は「2」とすることは考えがちだが、性別は多くの帳票で表示されるため、性別をコード化すると多くのクエリでテーブルの追加または表示のためのコードが必要となってしまう。漢字ならデータは2バイト、コードなら1バイトとデータ量は異なるが、「男」、「女」とデータを作っておくことが運用上望ましい。正確に分類集計したいとき、コード化しなければデータの統一性が失われる危険がある場合はコード化する。この例では「在籍状態」をコード化することにした。在籍状態は、通常を「1」、休学を「2」、転出を「3」、退学を「4」、卒業を「5」のように決める。コード化することにより、成績処理などでは在籍状態=1、在籍生徒数をカウントするときは在籍状態>=2、卒業生を集計するときは在籍状態<=5のようにして選択できる。ここを日本語で管理すると、「転出」を「転学」と記録してしまうなどデータの統一性が失われてしまう。

5.テーブルの作成

VisualStudio_成績処理_042_mid_640

テーブルのデザインビューで、既定で最初に「Id」という名前、データ型が「int」のフィールドがあり、そこには鍵のアイコンがついている。これは「主キー」である印だ。これを、フィールド名を「seitoID」に、データ型を「char(6)」に変更する。そして続くフィールドも設定していく。

VisualStudio_成績処理_043_mid_640

フィールドの名前、データ型などを決めたら、最後に「Nullを許容」のチェックを全部外そう。

VisualStudio_成績処理_044_mid_640

「Null」を許容にしておくと、データを登録しなくてもよいフィールドとなり、処理のときに例外が発生する可能性がある。もし何らかの事情で、一時的に「Null」データのまま処理したいケースが出てくる場合はチェックしたままにするが、後のことを考えると「Null」は許容しない方がよいだろう。

6.テーブル生成の SQL 文

フィールドを決めていくと、デザインビューの下の「T-SQL」のところに、CREATE TABLE ではじまるテーブルを定義する SQL 文ができあがっていくのがわかる。データベースにテーブルを作成する操作はこの SQL 文によってされるが、このようなテーブルの構造や構成を定義するために用いられる SQL 文を DDL(Data Definition Language)といい、データを操作する SQL 文である DML(Data Manipulation Language)、データへのアクセス権限などを制御する SQL 文であるDCL(Data Control Language)と区別される。

VisualStudio_成績処理_045_mid_640

SQL 文では CREATE TABLE [dbo].[Table] となっていることがわかる。これは「Table」という名前のテーブルを生成する、という意味だ。テーブル名は「Seito」としたいので、SQL 文の最初の行を CREATE TABLE [dbo].[Seito] のように変更する。

VisualStudio_成績処理_046_mid_640

SQL 文の最初の行を CREATE TABLE [dbo].[Seito] に変更した。

VisualStudio_成績処理_047_mid_640

7.SQL 文の保存

作った SQL 文は実行する前に選択して右クリックで「コピー」すると保存することができる。後でテーブル構造を見直したいときなど、SQL 文をコピーしておくと作業のやりなおしがしやすい。

VisualStudio_成績処理_047_mid_640

コピーした SQL 文はメモ帳などに貼り付けて一括管理しておくといい。

VisualStudio_成績処理_048_mid_640

8.データベースの更新でテーブルを作成する

VisualStudio_成績処理_049_mid_640

テーブル構造が決定したら、テーブルのデザインビューの上部にある上向きの矢印「更新」でデータベースの更新をする。

VisualStudio_成績処理_050_mid_640

「データベース更新のプレビュー」ウィンドウが表示されるので「データベースの更新」ボタンをクリックして更新する。これでデータベースに SQL 文が実行され、テーブルが生成する。このとき「スクリプトの生成」ボタンをクリックすると、テーブル生成の DDL 文、CREATE TABLE 文をファイルに保存することもできる。

VisualStudio_成績処理_052_mid_640

データベースの更新が正常に実行できたら、テーブルのデザインビューの下にある「データツール操作」ウィンドウに更新の手順が示される。

VisualStudio_成績処理_053_mid_640

テーブルができたら「SQL Server オブジェクトエクスプローラー」で確認する。ビューを最新の状態に更新すると、「テーブル」フォルダの配下に「dbo.Seito」テーブルができており、テーブル名を展開するとフィールドが列挙される。

次回はこのテーブルに生徒基本情報を保存しよう。

Microsoft Visual Studio 2015 と SQL Server データベースファイルで開発する「目からうろこ」の C# プログラミングによる成績処理システム(3) – Microsoft Visual Studio 2015 による SQL Server オブジェクトの管理とテーブルの表示

leave a comment »

1.SQL Server オブジェクトの管理

VisualStudio_成績処理_035_mid_640

前回は Visual Studio で新しいプロジェクトを開始し、ローカルコンピュータに Microsoft SQL Server データベースファイルを作成してデータ接続を構成した。

作成した Microsoft SQL Server データベースファイルには、実はまだテーブルやビューなど何も存在しない。テーブルやビューなどの作成も Visual Studio で開発することができる。Visual Studio で接続した SQL Server を見るには「SQL Server オブジェクトエクスプローラー」を使う。これはデフォルトで Visual Studio の左側のタブに表示されていないので、メニューの「表示」から「SQL Server オブジェクトエクスプローラー」をクリックして表示する。

VisualStudio_成績処理_036_mid_640

SQL Server オブジェクトエクスプローラーを表示すると左のペインに表示されるが、うっかり閉じるとまたメニューから開かなければならない。このSQL Server オブジェクトエクスプローラーは頻繁に使うので、閉じても左のタブからワンクリックで開くことができるようにしたい。

VisualStudio_成績処理_037_mid_640

SQL Server オブジェクトエクスプローラーをタブからワンクリックで開くことができるようにするには、「SQL Server オブジェクトエクスプローラー」のメニューバーで下向きの三角アイコンをクリックし「自動的に隠す」オプションをクリックしておくといい。

VisualStudio_成績処理_038_mid_640

SQL Server オブジェクトエクスプローラーを「自動的に隠す」オプションにし、左側のタブに固定した。

2.テーブルの表示

VisualStudio_成績処理_039_mid_640

ふたたびSQL Server オブジェクトエクスプローラーを表示すると「SQL Server」の項目がある。左の三角アイコンをクリックすると要素が展開される。「テーブル」まで展開すると、そこには「システムテーブル」のフォルダだけがあり、そのほかのテーブルはない。「システムテーブル」は SQL Server データベースファイル自体の設定に関するデータが保存されており、開くことは通常ない。

次回から、この SQL Server オブジェクトエクスプローラーを使ってテーブルやビューなどを作成する。