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

InfoPath & SQL Server !

Archive for the ‘システム管理’ Category

C# – 教科「情報」の授業で使うタイピングトレーニングのソフトを作っています。その 5。ユーザー ID を Active Directory から取得するようにした。

leave a comment »

教科「情報」の授業でタイピングソフトを自作して生徒実習をしている。このねらいは 2 つある。ひとつは、実際に使いやすいソフトウエアを使いたい、ということがある。特に生徒の実習データを Microsoft Flow に送信して集計しやすくする、ということがある。もう一つの目的は、ソフトウエア開発の実際を生徒に見せたい、ということだ。

いわゆる「ウォーターフロー型」の開発には限界があることが多く指摘されている。現代的なソフトウエア開発環境を最大限に活用するには、アジャイルと呼ばれる開発スタイルが望ましい。そこで教科「情報」の授業で自分が作ったソフトウエアを生徒に使わせながら、問題点や改善点を指摘させて次のバージョンに適用する、という手法でソフトウエア開発の実際を間接的に体験させるのだ。

そのためには、最初から完成されたソフトウエアを使わさない。最初はごく基本的な仕組みだけ作ったソフトウエアを使わせ、問題点や改善点を指摘することを演習とする。

様々な意見が生徒から出て興味深いのだが、これはまた別項でまとめることにする。今回のマイナーバージョンアップでは「学籍番号を入力するのが面倒だ」と「学籍番号を全角で入力してしまう間違いがおこる」ことを回避することを考えた。これは、システム管理をやっている者には常識的な実装になるが、ユーザー ID を Active Directory から取得することだ。これは一行のコードで実現できる。

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

myUserName = Environment.UserName;

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

そして取得したユーザー ID を gakuseID テキストボックスに表示する。

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

gakuseID.Text = myUserName;

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

ちゃんと取得することが確認できれば、学籍番号のテキストボックスの Enabled プロパティを false にし、書き換えられないようにする。

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

gakuseID.Enabled = false;

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

これで学生番号は間違いなく処理されるようになる。

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 オブジェクトエクスプローラーで生成したテーブルを確認する。

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

郵便番号データを SQL Server で利用するには(2) – データ変換サービス DTS を使わず Access を利用してデータを SQL Server に取り込む

leave a comment »

SQL Server に Excel や Access、CSV形式などのテキストファイルを取り込むために、データ変換サービス、DTS がある。だがデータ変換サービスはデータ型に厳密であるなど、実際の運用においては使いにくい面もある。そこでデータ変換サービス DTS を使わず、Access を利用してデータを SQL Server に取り込むことを紹介する。Access を使うと、取り込みたいデータを確認しながら作業ができるので、データ型やフィールドサイズが不明の場合でも対応しやすい。

ここで SQL Server に取り込みたいデータが、日本郵便からダウンロードできる全国郵便番号であるとする。郵便番号データのダウンロードについては、前回の blog を参考にしてほしい。

 

ダウンロードした csv データファイルを Access に取り込むため、まず Access を起動して空のデータベースを作成する。ここで使用した Access のバージョンは Microsoft Office Access 2007 だが、違うバージョンでもうまくいくはずだ。Access データベースファイルを作成する場所はローカルコンピュータのドキュメントなど適当な場所でいい。

SQL_DTS_Access_001_mid_640

<Fig.1 : Microsoft Office Access 2007 を起動して空のデータベースを作成する。

空のデータベースを作成したら、リボンメニューの「外部データ」から「テキストファイルのインポート」を実行する。日本郵便からダウンロードしたデータが、csv 形式のテキストファイルだからだ。

SQL_DTS_Access_002_mid_640

<Fig.2 : 「外部データ」メニューの「テキストファイルのインポート」を実行する>

データのインポートはウイザードに従ってすすめる。「データのインポート元とインポート先、またはリンク元とリンク先の選択」でデータをインポートする郵便番号ファイルを選択し、データの保存方法は「現在のデータベースの新しいテーブルにソースデータをインポートする」を選ぶ。

SQL_DTS_Access_003_mid_640

<Fig.3 : データのインポート元とインポート先、またはリンク元とリンク先の選択>

ファイルを指定したら読み込むデータが表示されるので、データの区切り形式を選択する。データの区切りは「区切り記号付き」を選ぶ。

SQL_DTS_Access_004_mid_640

<Fig.4 : データインポートウィザードでデータの区切り形式を選択する>

次にフィールド区切り記号を選択する。フィールド区切り記号は「カンマ」を指定する。また「先頭行をフィールド名として使う」オプションは、読み込まれたデータを見てフィールド名に相当するデータがないので、チェックを外す。

SQL_DTS_Access_005_mid_640

<Fig.5 : フィールド区切り記号の選択と先頭行をフィールド名として使うかの選択>

次に読み込むフィールドのフィールド名や型を設定する。Access が読み取ったデータからフィールドの型を類推して決めてくれるが、郵便番号は数値として判断される場合がある。確かに郵便番号は数値なのだが、数値として読み取った場合は先頭のゼロが無視されてしまうので、郵便番号のフィールドは「テキスト型」に変更しておく。

SQL_DTS_Access_006_mid_640

<Fig.6 : フィールドのオプションを設定する>

主キーの設定では、ここでインポートするデータの主キーが不明であるので、「主キーを自動的に設定する」を選んでおく。こうすれば自動的に「ID」のフィールドが作られ、連番が与えられる。

SQL_DTS_Access_007_mid_640

<Fig.7 : 主キーの設定>

インポートウィザードの最終場面では、インポート先のテーブル名を記述する。ここではファイル名から自動的に割り当てられた「KEN_ALL」の名前とした。

SQL_DTS_Access_008_mid_640

<Fig.8 : インポート先のテーブルの指定>

インポートが完了したら、「インポート操作の保存」の画面になる。同じインポート操作を後で繰り返したい場合は、ここで「インポート操作の保存」にチェックをしておくと、簡単に再現できる。ここでは繰り返ししないつもりなので、チェックをしないでおく。

SQL_DTS_Access_009_mid_640

<Fig.9 : インポート操作の保存>

インポートウィザードが終わったら、インポートデータは新たに生成した「KEN_ALL」テーブルに保存されている。テーブルの下部にはレコード数が 123,708 件であることがわかる。

SQL_DTS_Access_010_mid_640

<Fig.10 : インポートウィザードを終了しデータをインポートした>

読み込んだ「KEN_ALL」テーブルのデータを見ると、フィールド1 は意味がよくわからない何らかの管理番号になっているようだ。フィールド2 は郵便番号の前部分、フィールド3 は郵便番号の全6桁、フィールド4 からフィールド6 が住所の読み仮名、フィールド7 からフィールド9 が住所になっている。フィールド10 から15 は何らかの管理フラグだ。

データ構造がわかったら、これに相当するテーブルを SQL Server に作る。CREATE 文は次のようなものとした。

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

CREATE TABLE 郵便番号住所2(
    管理番号 int NULL,
    プレ郵便番号 varchar(7) NULL,
    郵便番号 char(7) NULL,
    都道府県カナ nvarchar(7) NULL,
    市区町村カナ nvarchar(25) NULL,
    住所それ以降カナ nvarchar(80) NULL,
    都道府県 nvarchar(10) NULL,
    市区町村 nvarchar(25) NULL,
    住所それ以降 nvarchar(80) NULL,
    管理フラグ1 char(1) NULL,
    管理フラグ2 char(1) NULL,
    管理フラグ3 char(1) NULL,
    管理フラグ4 char(1) NULL,
    管理フラグ5 char(1) NULL,
    管理フラグ6 char(1) NULL
)

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

SQL_DTS_Access_011_mid_640

<Fig.11 : SQL Server Management Studio で郵便番号住所をストアするテーブルを作る>

次に Access を SQL Server のテーブルに「リンクテーブル」として接続する。リボンメニューの「外部データ」から「その他」をクリックし「ODBC データベース」を実行する。

SQL_DTS_Access_012_mid_640

<Fig.12 : リボンメニューの「外部データ」から「その他」をクリックし「ODBC データベース」を実行する

外部データの取り込みウィザードがはじまる。日本郵便のサイトからダウンロードした csv のテキストファイルは Access に取り込んだが、ここでは SQL Server のテーブルにリンクするために「リンクテーブルを作成してソースデータにリンクする」を選択する。

SQL_DTS_Access_013_mid_640

<Fig.13 : 外部データの取り込みウィザードでリンクテーブルを作成してソースデータにリンクする>

「データソースの選択」では、適切な SQL Server へのデータソースがあれば選択するだけでいいが、なければ新規作成する。DNS 名のところの「新規作成」ボタンをクリックする。

SQL_DTS_Access_014

<Fig.14 : データソースの選択>

セットアップするデータソースのドライバーを選択する。接続したい SQL Server を選択して「次へ」をクリックする。

SQL_DTS_Access_015

<Fig.15 : セットアップするデータソースのドライバーを選択する>

データソース名を決めて入力する。データソース名は、後で見てわかるような、適当な名前でいい。

SQL_DTS_Access_016

<Fig.16 : データソース名を決めて入力する>

データソースが作成される。「完了」をクリックする。

SQL_DTS_Access_017

<Fig.17 : データソースの作成>

接続する SQL Server を選択する。「サーバー」テキストボックスの右端▼をクリックすると、利用できる SQL Server が選択できるので、テーブルを作成した SQL Server を選択して「次へ」をクリックする。

SQL_DTS_Access_018

<Fig.18 : 接続する SQL Server を選択する>

SQL Server のログイン認証を選択する。「ネットワークへのログイン ID で、Windows NT の認証メカニズムを使う」はいわゆるWindows 統合認証で、「ユーザーが入力する SQL Server 用のログイン ID とパスワードを使う」は SQL Server にユーザーを作ってログインするものだ。作業している環境によるが、ここでは前者のログインで利用するものとする。

SQL_DTS_Access_019

<Fig.19 : SQL Server のログイン認証を選択する>

既定のデータベースを設定する。郵便番号住所テーブルを作成したデータベース名は「test」だったので、それを選択する。

SQL_DTS_Access_020

<Fig.20 : 既定のデータベースを設定する>

これでデータソースの作成を完了する。

SQL_DTS_Access_021

<Fig.21 : データソースの作成を完了する>

データソースが作成されたら、データソースの詳細が表示される。ここで「データソースのテスト」をクリックすると、SQL Server に接続テストをすることができる。

SQL_DTS_Access_022

<Fig.22 : データソースの作成完了とテスト>

データソースの接続テストが成功した。

SQL_DTS_Access_023

<Fig.23 : SQL Server へのデータソースの接続テスト>

データ接続ができたら、リンクしたいテーブルを指定する。ここでは「郵便番号住所2」テーブルに接続したい。

SQL_DTS_Access_024

<Fig.24 : テーブルのリンク>

リンクテーブルが作成できた。リンクテーブルは地球のようなアイコンで、画面の左側「すべてのテーブル」に「dbo.郵便番号住所2」の名前で表示されている。このテーブルは Access 上に実体はなく、SQL Server のテーブルにリンクしている。

SQL_DTS_Access_025_mid_640

<Fig.25 : リンクテーブルの作成完了>

リンクテーブル「dbo.郵便番号住所2」を開くと、SQL Server 上のデータを見ることができる。まだデータは入っていないので、一件もデータがない。

SQL_DTS_Access_026_mid_640

<Fig.26 : リンクテーブル「dbo.郵便番号住所2」を開いてデータを確かめる>

リンクテーブルが作成できたら、Access にインポートしたデータを、リンクテーブル「dbo.郵便番号2」へコピーする。Access でテーブルへデータをコピーするとき、簡単なのは「追加クエリ」を作成することだ。

「新しいクエリ」を作成し、テーブル「KEN_ALL」を元データとする。画面に表示された「KEN_ALL」テーブルの各フィールドを下段にドラッグし、表示させる。

SQL_DTS_Access_027_mid_640

<Fig.27 : 新しいクエリを作りフィールドを表示させる>

次にこのクエリを「追加クエリ」にする。Access では SQL 文を使ってデータを追加することもできるが、単純にテーブルからテーブルへデータを追加する場合は、追加クエリを使うと便利だ。

クエリを追加クエリにするには、クエリの編集画面で「デザイン」メニューの「+!」のアイコン、「追加」をクリックする。すると「追加」のウインドウが表示され、追加先のテーブルを選択するようになる。追加先はリンクテーブル「dbo.郵便番号2」を選択する。

SQL_DTS_Access_028_mid_640

<Fig.28 : クエリを追加クエリにする>

SQL_DTS_Access_029_mid_640

<Fig.29 : 追加クエリの設定で追加先のテーブルを選択する>

dbo.郵便番号2」をクエリを追加クエリにすると、画面の下部に表示されたフィールドの下の項目が変わる。単なる選択クエリの場合は、「フィールド」、「テーブル」、「並べ替え」、「表示」、「抽出条件」、「または」となっているが、追加クエリにすると「表示」の項目はなくなり、かわりに「レコードの追加」が表示される。これは、データを追加するテーブルのどのフィールドに追加するかを選択する項目だ。各フィールドの「レコードの追加」クリックすると、追加先に設定した「dbo.郵便番号2」の各フィールドが表示されるので、追加したい適切なフィールドを選択し決定していく。追加しなくてもよいフィールドは指定しなくていい。

ここで作成した SQL Server の「dbo.郵便番号2」の場合、「KEN_ALL」テーブルの各フィールドに対して、「ID」を「管理番号」に、「フィールド1」は指定せず、「フィールド2」を「プレ郵便番号」に、以降、フィールド3から「郵便番号」以降を順に設定する。

SQL_DTS_Access_030_mid_640

<Fig.30 : クエリを追加クエリにした>

SQL_DTS_Access_031_mid_640

<Fig.31 : 追加クエリの各フィールドに追加先のフィールドを設定する>

追加クエリができたら保存する。クエリ名は「郵便番号住所の追加」とした。

SQL_DTS_Access_032_mid_640

<Fig.32 : 追加クエリを保存する>

追加クエリが保存できたら、「すべてのテーブル」にあるクエリの名前「郵便番号住所の追加」をダブルクリックする。「追加クエリを実行すると、テーブルのデータが変更されます」となるので「はい」をクリックする。次に追加されるデータの件数が表示されるので、間違いなければ「はい」をクリックする。

SQL_DTS_Access_033_mid_640

<Fig.33 : 保存した追加クエリ「郵便番号住所の追加」をダブルクリックして実行する>

SQL_DTS_Access_034_mid_640

<Fig.34 : 追加クエリを実行してテーブルにデータを追加する>

SQL_DTS_Access_035_mid_640

<Fig.35 : 追加されるデータの件数が表示される>

この追加クエリは、SQL の INSERT 文になっている。SQL 文を確かめるには、追加クエリをデザインし「SQL ビュー」にするといい。次のような SQL 文が生成していることがわかる。

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

INSERT INTO dbo_郵便番号住所2 ( 管理番号, プレ郵便番号, 郵便番号, 都道府県カナ
              , 市区町村カナ, 住所それ以降カナ, 都道府県, 市区町村, 住所それ以降
              , 管理フラグ1, 管理フラグ2, 管理フラグ3, 管理フラグ4, 管理フラグ5, 管理フラグ6 )
SELECT KEN_ALL.ID, KEN_ALL.フィールド2, KEN_ALL.フィールド3, KEN_ALL.フィールド4
              , KEN_ALL.フィールド5, KEN_ALL.フィールド6, KEN_ALL.フィールド7, KEN_ALL.フィールド8
              , KEN_ALL.フィールド9, KEN_ALL.フィールド10, KEN_ALL.フィールド11, KEN_ALL.フィールド12
              , KEN_ALL.フィールド13, KEN_ALL.フィールド14, KEN_ALL.フィールド15
FROM KEN_ALL;

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

SQL_DTS_Access_037_mid_640

<Fig.36 : 追加クエリを SQL ビューで確認する>

追加クエリを実行すると、Access にインポートされたデータが SQL Server に追加されているはずだ。「dbo.郵便番号住所2」のリンクテーブルを開いたままなら、一度閉じて再度開くと最新のデータが表示される。

SQL_DTS_Access_038_mid_640

<Fig.37 : 「dbo.郵便番号住所2」のリンクテーブルを開いてインポートされたデータを表示する>

SQL Server Management Studio で直接 SQL Server のテーブルを確かめても、データがインポートされたことが確認できる。

SQL_DTS_Access_039_mid_640

<Fig.38 : SQL Server Management Studio でインポートされたデータを確認する>

このように、Access を使って SQL Server にデータをインポートすることができる。まず Access に CSV データを取り込み、次に「リンクテーブル」で Access を SQL Server に接続し、「追加クエリ」でデータを追加するのだ。

Access の追加クエリは画面上でフィールドを選択することで視覚的にテーブルからテーブルにデータを追加することができるので、SQL Server のデータ処理に使ってもいいだろう。

郵便番号データを SQL Server で利用するには(1) – SQL Server 2012 Management Studio でデータ変換サービス DTS を使って CSV データを SQL Server に取り込む

leave a comment »

データ変換サービス DTS はSQL Server 2000 の頃からよく使っていた。Excel や Access 、CSV 形式のテキストファイルなどを SQL Server にウィザードで取り込むことができる便利なツールだ。だが DTS は無償版の SQL Server 2012 Management Studio のメニューからは利用できない。

SQLSV_MS_2012_DTS_003_mid_640

<Fig.1 : SQL Server 2012 Management Studio の「ツール」メニューからはデータ変換サービス DTS が使えない>

データ変換サービス DTS を利用するには、Windowsのスタートメニューで Microsoft SQL Server 2012 から「データのインポートおよびエクスポート」を実行するか、以下のフォルダにある DTSWizard.exe を直接実行する。フォルダ名はインストールしている SQL Server や Management Studio のバージョンによって異なる場合もある。

C:\Program Files\Microsoft SQL Server\110\DTS\Binn

SQLSV_MS_2012_DTS_004_mid_640

<Fig.2 : Windowsのスタートメニューから「データのインポートおよびエクスポート」を実行する>

SQLSV_MS_2012_DTS_005

<Fig.3 : C ドライブの Program Files フォルダから直接 DTS ウィザード DTSWizard.exe を起動する>

データ変換サービス DTS を起動する前に、日本郵便の Web ページから最新の郵便番号データをダウンロードしておく。データは CSV 形式で、ZIP 形式の圧縮になっている。ファイルをダウンロードし、適当なフォルダに保存して展開しておく。展開すると次のように KEN_ALL.CSV というファイルができる。これは全国の郵便番号を一括でダウンロードしたファイルだ。

ちなみにこのファイルは、Excel をインストールしているコンピュータなら下のように Excel との関連付けがされており、ダブルクリックすると Excel で開くことができる。しかし Excel のバージョンや保存形式によって最大行数の制約を受けることがあるので、くれぐれも上書き保存しないように。うっかり上書き保存するとデータが切り捨てられてしまう場合がある。

SQLSV_MS_2012_DTS_006_mid_640

<Fig.4 : 日本郵便の Web サイトから郵便番号データをダウンロードする>

SQLSV_MS_2012_DTS_007

<Fig.5 : 日本郵便からダウンロードした ZIP 圧縮形式の郵便番号データを解凍した>

郵便番号データの準備ができたら、データ変換サービス DTS を起動する。次の起動画面が表示されるだろう。

SQLSV_MS_2012_DTS_008

<Fig.6 : データ変換サービス DTS を起動する>

「次へ」をクリックしてウィザードをすすめると「データソースの選択」画面になる。ここでは CSV 形式のテキストファイルを読み込みたいので、「データソース」を「フラットファイルソース」にし、先に保存した郵便番号の CSV ファイルを「ファイル名」のところで「参照」ボタンをクリックして選択する。

「ロケール」と「コードページ」には文字コード体系がデフォルトで設定されているはずだ。「形式」では「テキスト修飾子」がデフォルトで<なし>になっているが、この郵便番号ファイルはテキストデータをダブルクォーテーション「”」で囲んでいるので、「テキスト修飾子」に「”」を入力する。またデータにフィールド名はないので「先頭データ行を列名として使用する」のチェックを外す。

SQLSV_MS_2012_DTS_009

<Fig.7 : データ変換サービス DTS でデータソースの選択をする>

左側の「データソース」で「全般」から「列」のビューに切り替えると、データをプレビューで確認できる。

SQLSV_MS_2012_DTS_010

<Fig.8 : データ変換サービス DTS のデータソースの選択で「列」のビューに切り替える>

次に左側の「データソース」で「全般」から「詳細設定」のビューに切り替える。ここで重要なのは、OutputColumnWidth の設定で、この値を読み込むデータの最大サイズ以上に指定しておかなければならない。

そこであらかじめ Excel で郵便番号データの各フィールドの要素と最大データ長を調べておく。フィールドの要素は次のようになっている。

列0 : 何かの管理番号(最大5桁の数字)
列1 : 郵便番号の前から3~5桁を切り取った数値
列2 : 郵便番号(7桁の数字)
列3 : 都道府県の半角カナ(最大文字長7)
列4 : 市区町村の半角カナ(最大文字長22)
列5 : 市区町村以降の半角カナ(最大文字長73)
列6 : 都道府県(漢字、最大文字長4)
列7 : 市区町村(漢字、最大文字長10)
列8 : 市区町村以降(漢字、最大文字長37)
列9~14 : 住所データを管理する何らかの記号(1桁の数値)

デフォルトで OutputColumnWidth の値は50に設定されている。ここで問題になるのは、列5の半角カナ73文字と列8の漢字37文字だ。漢字は2バイト文字なので、文字数の2倍、74以上のサイズを必要とする。そこでこの2つのフィールドは、それぞれサイズを増やしておかなければならない。

SQLSV_MS_2012_DTS_011

<Fig.9 : データ変換サービス DTS のデータソースの選択で「詳細設定」のビューに切り替える>

あらかじめデータの最大サイズがわかっていれば手作業でOutputColumnWidth の値を変更するが、わからないときは「型の推測」ボタンをクリックし、実際のデータをスキャンして自動的に調べることもできる。

SQLSV_MS_2012_DTS_012

<Fig.10 : データ変換サービス DTS で列の型の推測をする>

SQLSV_MS_2012_DTS_013

<Fig.11 : データ変換サービス DTS で型の推測をした>

ここまでで入力データの設定ができた。次は変換先の設定をする。変換先はデフォルトの SQL Server Native Client とし、サーバー名をドロップダウンで選択する。そしてデータベースをデータをインポートしたいデータベースに変更する。

SQLSV_MS_2012_DTS_014

<Fig.9 : データ変換サービス DTS で変換先を選択する>

次の「コピー元のテーブルおよびビューを選択」では、元データとインポートするテーブルとのデータマッピングを編集することができる。「マッピングの編集」ボタンをクリックする。

SQLSV_MS_2012_DTS_015

<Fig.10 : データ変換サービス DTS でコピー元のテーブルおよびビューを選択する>

「列マッピング」のビューでは、変換元と変換先のフィールド名、フィールドの型、サイズが自動的に設定されている。設定値は「型の推測」で元データから得られたものだ。

SQLSV_MS_2012_DTS_016

<Fig.11 : データ変換サービス DTS で列マッピングを編集する>

「型の推測」で列0から列2までは数字と判断されている。SQL Server でどのような処理をしたいかによるが、数字であってもコードとして処理したい場合は、文字列にしたほうが扱いやすい場合がある。また住所のデータは varchar ではなく nvarchar にしたい。そこで型やサイズを手作業で変更する。

SQLSV_MS_2012_DTS_017

<Fig.12 : データ変換サービス DTS で変換先の型とサイズを編集する>

またデフォルトで「変換先テーブルを作成する」のラジオボタンが選択されており、SQL Server に新しくテーブルを作成することができるが、「SQL の編集」ボタンをクリックすると「テーブル作成 SQL ステートメント」のウィンドウが表示され、SQL Server に生成するテーブルのテーブル名やフィールド名を編集することができる。テーブル名を「郵便番号住所」とし、各フィールド名を設定する。

SQLSV_MS_2012_DTS_018

<Fig.13 : テーブル作成 SQL ステートメントを編集する>

テーブル作成 SQL ステートメントの編集を終了すると「列マッピング」のビューに戻る。このビューに戻っても「変換先」のフィールド名は変わらず「列 0」や「列 1」といったデフォルトのままであるので、手作業で「変換先」のフィールド名を書き換える。ドロップダウンリストには表示されないので、手作業で書き換える必要がある。

SQLSV_MS_2012_DTS_019

<Fig.14 : データ変換サービス DTS の列マッピングで変換先のフィールド名を編集する>

列マッピングの編集が終わると「コピー元のテーブルおよびビューを選択」画面に戻る。このときも戻ったときは「変換先」のテーブル名がデフォルトで与えられたままなので、「テーブル作成 SQL ステートメント」で変更したテーブル名に手作業で書き換える必要がある。

SQLSV_MS_2012_DTS_020

<Fig.15 : データ変換サービス DTS のコピー元のテーブルおよびビューを選択で変換先のテーブル名を書き換える>

次に「データ型マッピングの確認」になる。変換先のテーブル名やフィールド名、データの型やサイズを変更したので、データの切り捨てなどがおこる可能性があるとの注意がされるが、間違いがなければこのまま次にすすめてよい。

SQLSV_MS_2012_DTS_021

<Fig.16 : データ変換サービス DTS でデータ型マッピングの確認をする>

ここまでで設定は終了し、最後の「パッケージの実行」では、いますぐ実行したい場合は「すぐに実行する」のチェックボックスを入れたままにし、次へすすむ。

SQLSV_MS_2012_DTS_022

<Fig.17 : データ変換サービス DTS でパッケージの実行をする>

SQLSV_MS_2012_DTS_023

<Fig.18 : データ変換サービス DTS でウィザードを完了する>

ウィザードを完了すると、データ変換サービス DTS が変換元のデータを読みとり、SQL Server に送信する。変換のプロセスがわかり、レポートが表示される。

SQLSV_MS_2012_DTS_024

<Fig.19 : データ変換サービス DTS で変換プロセスとレポートを表示する>

SQL Server Management Studio でテーブルとデータを確認する。すべてのデータが変換されたかどうかは、ビューを作って確かめる。

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

SELECT COUNT(*) AS Expr1 FROM dbo.郵便番号住所

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

SQLSV_MS_2012_DTS_025_mid_640

<Fig.20 : SQL Server Management Studio でテーブルとデータを確認する>

SQLSV_MS_2012_DTS_026_mid_640

<Fig.21 : SQL Server Management Studio でデータの件数を確認する>

データ変換サービス DTS では、変換元のフィールドサイズの最大サイズがわかっていれば手作業で OutputColumnWidth の値を変更し、わからなければ「列の型の推測」でデータサイズを調べ、自動的に適用させればよい。その場合は、変換先のフィールドが設定したい型やサイズにならない場合があるので、そのときは手作業で編集する。

データ変換サービス DTS でエラーがおこったときは、まずフィールドサイズが OutputColumnWidth の設定値を超えていないかを確認しよう。

片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(4) – 「検索条件ビルダー」を使ってキーワードによる「前方一致」、「後方一致」、「部分一致」検索を実装する

with 5 comments

Microsoft Visual Studio 2013 を使えば、ノンコードで SQL Server に接続するデータベースアプリケーションを作ることができることを紹介した。前回「片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(3) – 「検索条件ビルダー」を使ってキーワードによる選択クエリをノンコードで実装する」では、全文一致検索によってデータを絞り込むアプリケーションは「条件検索ビルダー」でノンコードで実装できることを紹介した。今回は、キーワードの「完全一致」ではなく、「前方一致」あるいは「後方一致」、「部分一致」で検索するフォームを作ってみよう。「前方一致」あるいは「後方一致」、「部分一致」を「条件検索ビルダー」を使って実装するには、SQL 文を LIKE 演算子で構成するとよい。

Visual Studio 2013 を起動し、新しいプロジェクトを作成する。言語はC#として Windows Form フォームアプリケーションを作ろう。

前方一致後方一致_001_mid_640

<Fig.1 : Visual Studio 2013 で Windows Form アプリケーションを作る新しいプロジェクトを始める>

次にデータ接続を作成しよう。画面の右端「データソース」タブを展開し、「新しいデータソースを追加」する。データソースの構成は「データソース構成ウィザード」で画面に従ってすすめる。説明は省略するが、画面ショットだけ紹介しよう。

前方一致後方一致_002_mid_640

<Fig.2 : 「データソース」タブを展開し「新しいデータソースの追加」をクリックして「データソース構成ウィザード」をはじめる>

前方一致後方一致_003_mid_640

<Fig.3 : 「データソース構成ウィザード」でデータソースの種類を選択する>

前方一致後方一致_004_mid_640

<Fig.4 : 「データソース構成ウィザード」でデータベースモデルを選択する>

前方一致後方一致_005_mid_640

<Fig.5 : 「データソース構成ウィザード」でデータ接続を選択する>

前方一致後方一致_006_mid_640

<Fig.6 : 「データソース構成ウィザード」で接続文字列をアプリケーション構成ファイルに保存する>

前方一致後方一致_007_mid_640

<Fig.7 : 「データソース構成ウィザード」でデータベースオブジェクトを選択する>

「データソース構成ウィザード」を終了すると、データソースに接続先の SQL Server のテーブルが表示される。「生徒」テーブルをデザインビューのフォームへドラッグし、データグリッドビューを作成しよう。データグリッドビューを作成したら、すべてのフィールドが表示されるようにデータグリッドビューを右に広げよう。

前方一致後方一致_008_mid_640

<Fig.8 : 「データソース構成ウィザード」でデータソースが構成できた>

前方一致後方一致_009_mid_640

<Fig.9 : 構成したデータソースから「生徒」テーブルをフォームにドラッグしてデータグリッドビューを作成する>

データグリッドビューが生成すると同時に、データ接続に関するオブジェクトが5つ生成する。データセット、バインディングソース、テーブルアダプター、テーブルアダプタマネージャー、そしてバインディングナビゲーターだ。このうち、生徒BindingSource または生徒TableAdapter、あるいはデータグリッドビューを選択して右上に表示される「スマートタグ」の小さな三角アイコン▲をクリックし「クエリの追加」をする。

前方一致後方一致_010_mid_640

<Fig.9 : スマートタグから「クエリの追加」を行う>

スマートタグから「クエリの追加」を行うと「条件検索ビルダー」ウィンドウが表示される。ここで絞り込む検索条件を次のように LIKE 演算子を使ってクエリテキストを編集しよう。

——————————————————————-
SELECT 学籍番号, 氏名, クラス, 住所, 性別, 性別コード FROM dbo.生徒
WHERE 氏名 LIKE @SelectNameLike
——————————————————————-

前方一致後方一致_011

<Fig.10 : スマートタグから「クエリの追加」を行い「条件検索ビルダー」を起動する>

前方一致後方一致_012

<Fig.11 : 「条件検索ビルダー」でクエリテキストを編集する>

クエリを設定するとフォームに fillByToolStrip が自動的に生成する。次にフォーム上にテキストボックスとボタンを作成し、ボタンのテキストを「前方一致」とする。そしてボタンのクリックイベントに次のコードを書く。SQL 文では「%」が任意の文字列をあらわすのだ。

——————————————————————-
try
    {
    this.生徒TableAdapter.FillBy(this.mYSQLSVDataSet.生徒, textBox1.Text + "%");
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

前方一致後方一致_013_mid_640

<Fig.12 : フォームにテキストボックスと「前方一致」のボタンを作る>

前方一致後方一致_014_mid_640

<Fig.13 : 「前方一致」ボタンのクリックイベントにコードを書く>

同様に「後方一致」と「部分一致」、「全件取得」のボタンを作成する。ボタンのクリックイベントにそれぞれ次のコードを書く。

<「後方一致」ボタンのクリックイベント>
——————————————————————-
try
    {
    this.生徒TableAdapter.FillBy(this.mYSQLSVDataSet.生徒, "%" + textBox1.Text);
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

<「部分一致」ボタンのクリックイベント>
——————————————————————-
try
    {
    this.生徒TableAdapter.FillBy(this.mYSQLSVDataSet.生徒, "%" + textBox1.Text + "%");
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

<「全件取得」ボタンのクリックイベント>
——————————————————————-
try
    {
    this.生徒TableAdapter.Fill(this.mYSQLSVDataSet.生徒);
    }
catch (System.Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    }
——————————————————————-

前方一致後方一致_015_mid_640

<Fig.14 : 「後方一致」、「部分一致」、「全件取得」ボタンを作りクリックイベントにコードを書く>

ビルドしてテキストボックスに入力し、絞り込み検索を確かめる。

前方一致後方一致_016_mid_640

<Fig.15 : アプリケーションをビルドして「後方一致」、「部分一致」、「全件取得」の動作を確かめる>

このように前方一致、後方一致または部分一致のフォームを作るには、検索条件ビルダーで SQL 文を LIKE 演算子で絞り込むこととし、fillBy メソッドの文字列に SQL 文で任意の文字列を示す「%」を加えるといい。

<前の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(3) – 「検索条件ビルダー」を使ってキーワードによる選択クエリをノンコードで実装する

<次の記事>
片手間プログラマーの復権 – Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る(5) – 「検索条件ビルダー」を使ってキーワードによる「部分一致」検索をノンコードで実装する

Microsoft MVAで自宅にいながらインターネットでトレーニングを受けることができる。ビデオ教材もあり、日本語コンテンツもある。

leave a comment »

「Microsoft MVA」は「マイクロソフト・バーチャル・アカデミー」の略。インターネットでマイクロソフト製品の使い方などを学ぶことができる。

Microsoft Virtual Academy
http://www.microsoftvirtualacademy.com/?mtag=MVP10329

Microsoft_Virtual_Academy_mid_640

コンテンツはWebテキスト、PDF、ビデオ教材などさまざまなものが用意されている。日本語だけではなく英語のコンテンツも多いが、ビデオ教材では英訳がついたものもある。

ビデオ教材では、マイクロソフトの著名なエバンジェリストから講義を受けることができる。たとえば「いまさら聞けないWindowsストアアプリ開発入門」では、「Windows Phoneゲーム プログラミング」や「ゼロからはじめるプログラミング 第2版 ソフトウェア実践講座」、「Silverlight大全(共著)」などの著者で、マイクロソフトのエバンジェリスト田中達彦氏からレクチャーを受けることができる。

ビデオ教材では実際に開発をする場面を見ることができ、文章や話し言葉ではわかりにくい開発の実際に触れることができる。これからは自宅で、あるいは職場で、時間の持てるときにこのようなWeb教材で学習する時代になる。今後ますますコンテンツが充実し、開発や運用のトレーニングがしやすくなることを期待し、また楽しみにしている。ぜひ体験してもらいたい。

神戸三宮の駅前で定期的に開催する神戸SQL Server Users Group(KSSUG)のSQL Serverセミナーは第二回「初級1」と「初級2」を終了した。

leave a comment »

神戸三宮の駅から歩いて数分の貸会議室を借りて、実習形式のSQL Serverセミナーを開催している。昨日は第二回目のセミナーで、「初級1」と「初級2」を連続で実施した。

神戸SQL Serverセミナー「初級1」2013年12月14日(土)http://kobesqlserverusersgroup.wordpress.com/2013/11/26/sql-server%e3%82%bb%e3%83%9f%e3%83%8a%e3%83%bc%e5%88%9d%e7%b4%9a%ef%bc%91-2013%e5%b9%b412%e6%9c%8814%e6%97%a5%ef%bc%88%e5%9c%9f%ef%bc%89-900%ef%bd%9e1030-%e4%b8%89%e5%ae%ae/

神戸SQL Serverセミナー「初級2」2013年12月14日(土)http://kobesqlserverusersgroup.wordpress.com/2013/11/28/sql-server%e3%82%bb%e3%83%9f%e3%83%8a%e3%83%bc%e5%88%9d%e7%b4%9a2-2013%e5%b9%b412%e6%9c%8814%e6%97%a5%ef%bc%88%e5%9c%9f%ef%bc%89-1030%ef%bd%9e1150-%e4%b8%89%e5%ae%ae/

「初級1」はSQL Serverをやってみたいが触ったことのない人を想定して、データベースの作成、テーブル作成から始める実習、「初級2」はユーザー定義関数とストアドプロシージャ作成の基本実習、を行った。1回のセミナーは1時間20分で、ノートパソコンを使った実習形式だ。

今後は高度なSQL文、実務的なストアドプロシージャ、カーソルの使い方、直積やPIVOPビュー、そしてユーザー管理とActiveDirectoryの連携、またVisual Studioを使ったクライアントアプリケーションの開発、など少しずつ内容を深めていきたいと思っている。

ほぼ月1回、できれば月2回程度開催し、少しでも多くの人にSQL Serverに興味と関心を持ってもらいたい。私自身、自学自習の一般ユーザーにすぎないが、この6年間、実務でSQL Serverによるデータベースシステムの開発と運用、管理をやってきた経験をふまえ、ユーザーに知識と技能を伝えられたらと思っている。