郵便データを他のテーブルで利用する・その1

プロデルで作成したテータベースに郵便番号データが登録出来たら。検索することで住所入力が簡単に出来るようになる。例えば、ユーザー登録が必要なプログラムを書く時にツールとして組み込めば便利に使うことが出来る。今回はユーザー登録機能を追加する事にする。前回までに作成したプログラムを実行するとこんな感じになる。(町域に「顔」を入力し検索した結果)
郵便番号を町域に「顔」を入力し検索した
この画面の右端にある項目は選択した郵便番号を表示するようにしている。
選択した郵便番号

この画面に機能を追加して住所を登録するプログラムを作ろうかと思う。

今回作成するもの

1.郵便番号検索にユーザー登録を追加する
2.ユーザー登録するテーブルを新しく設定する・
3.ユーザー登録にはIDを設定し重複を防ぐ
4.郵便番号を入力したら住所を自動的に入力させる。
5.郵便番号が分からない場合、住所の一部から郵便番号と住所を入力。
6.テーブルにユーザー登録する。

単純に考えればこんな感じ。もしろん登録したデータを検索したり修正できることも大事だけれど数回に分けて徐々に書くことにする。

ユーザーテーブル(user)の必要な項目を考える。

1.ユーザーID(id) 主キー設定
2.ユーザー名(name)
3.郵便番号(zip)
4.住所1(add1)
5.住所2(add2)
6.メールアドレス(mail)

サンプルなのでこの程度。

このテーブルでは主キーを設定します。作成するときに「項目名 integer primary key」と指定する事でID(項目名)には自動的にキーが付けられるようになります。「integer」は数値項目なので数字が入ります。

このテーブルを作成するプログラムはこちら

—————————— ここから

// プロデルからSQLiteデータベースを操作する例 //
// SQLiteのuserテーブルの作成
//SQLiteを利用するには、System.Data.SQLite.dllが必要です

「Produire.Data.SQLite.dll」を利用する
SQLiteというSQLiteデータベースを作る

SQLiteのデータソースを、「test01.db」に変える
SQLiteへ接続する

テーブルを作成する

SQLiteから切断する

テーブルを、作成する手順
     ーーテーブルの作成
     SQLiteで「CREATE TABLE user (
          id integer primary key,
          name TEXT,
          zip TEXT,
          add1 TEXT,
          add2 TEXT,
          mail TEXT);」を実行する               
終わり

—————————— ここまで

日本全国の郵便番号をSQLiteにする。(番外編)

日本全国の郵便番号をSQLのデータベーステーブルにすると思いのほか時間が掛かります。
私の低スペックパソコンでは数時間かかりました。
(時間が掛かるのは私が作ったプロデルのプログラムロジックに問題がある事が原因。通常なら数分で終わる筈なのです。バインド値を使えば通常は高速に処理できるのですがどこかが間違っているみたいです。)
使用するデータは日本郵便から提供されている日本全国の郵便番号データ「KEN_ALL.CSV」となります。
日本全国が必要な人はあまりいないと思うので、必要な都道府県のデータを選んでデータベース化してください。
前回のサンプルとは項目名やテーブル名が少し変わっていますが基本的には同じものです。
テーブル名を変えた関係で検索プログラムのテーブル名も変更してから利用してください。

—————————— ここから

//
// 全国郵便番号SQL作成
// 120万件のデータを処理する為、
// 実行から終了するまで数時間かかります。
//
// 画面の入出力は余計な時間が掛かる為ありません
//
// プロデルからSQLiteデータベースを操作する例 //
//SQLiteを利用するには、System.Data.SQLite.dllが必要です
「Produire.Data.SQLite.dll」を利用する

SQLiteというSQLiteデータベースを作る
SQLiteのデータソースを、「test01.db」に変える
SQLiteへ接続する
/*
     1.全国地方公共団体コード
     2.(旧)郵便番号(5桁)
     3.郵便番号(7桁)
     4.都道府県名(半角カタカナ)
     5.市区町村名(半角カタカナ)
     6.町域名(半角カタカナ)
     7.都道府県名 (漢字)
     8.市区町村名 (漢字)
     9.町域名 (漢字)
     
     ——————————
     今回使用する項目
     ——————————
     3.郵便番号(7桁)(数字だけど文字列)
     7.都道府県名 (漢字)
     8.市区町村名 (漢字)
     9.町域名 (漢字)
 
*/

//CSVファイルをデータ表に読み込み保存されているデータを取得。
データ表を作ってデータとする
データへ「KEN_ALL.CSV」から読み込む // 全国の郵便番号データ
一覧は、データの一覧
カウント=0
テーブルを、作成する // テーブルを作成します

データの一覧のすべての【行要素】についてそれぞれ繰り返す
     //行要素を表示 //各行ごとのデータは行要素です
     カウント=カウント+1  //行要素で良いはずなのですが不安なのでカウントを作ります。
     レコードは、一覧(カウント)  //一覧にCSVデータを読み込みます
     //レコードを報告する
     郵便番号は、レコード(3)// 郵便番号7ケタ 郵便番号は後で2つに分ける
     都道府県は、レコード(7)//都道府県・漢字
     市町村は、レコード(8)//市町村・漢字
     町名は、レコード(9)//町名・漢字

     //SQLiteにデータを書き込みます
     データを、追加する

繰り返し終わり

//最後に作成したデータをSQLiteで読み込んで表示します
データを、取得する

テーブルを、作成する手順
//テーブルを、破棄する手順
   ーーテーブルの破棄
   //SQLiteで「DROP TABLE zip;」を実行する
   
     ーーテーブルの作成 テーブル名 zip
     //1.zip1 =郵便番号
     //2.ken =都道府県名
     //3.city =市区町村名
     //4.machi =町域名
     SQLiteで「CREATE TABLE zip (
          zip1 TEXT,
          ken TEXT,
          city TEXT,
          machi TEXT);」を実行する
終わり

データを、取得する手順
     ーーデータの取得
/*
     SQLiteから「SELECT * FROM zip」を取得して結果とする
     「初期状態」として結果の内容を情報アイコンで表示する
*/
     「終わりました」と表示する。
終わり

データを、追加する手順
     ーーデータの追加

     SQL文は、「INSERT INTO zip (zip1,ken,city,machi) VALUES(?,?,?,?);」
     バインド値は、{郵便番号,都道府県,市町村,町名}
     //バインド値を報告する
     SQL文をバインド値としてSQLiteで実行する

終わり

—————————— ここまで

郵便番号データベースを検索する・その2

プロデルでデータベースを作成しても自由に使えなければ意味がないので「郵便番号データベースを検索する・その1」で取りあえず検索するサンプルプログラムを書いた。プログラムの中に検索する文字列を固定で埋め込む方法なので実際使うとしたら使い勝手が悪い。そこでSQLの特徴である検索機能をきちんと使ったものを作ることにした。
郵便番号を探す時の目安は住所です。その中で都道府県は範囲が広すぎるので、「市町村名」または「町域」の部分検索ができれば使い勝手が格段に向上する。
そこで今回はSQLらしさを少し考慮してプログラムを作ってみた。
今回使用する画面

—————————— ここから
//
// 郵便番号SQLで検索・画面
//
// プロデルからSQLiteデータベースを操作する例 //
//SQLiteを利用するには、System.Data.SQLite.dllが必要です

/*  登録したテーブルの中身を確認するサンプルプログラムなので↓に書いておきます。
     SQLiteで「CREATE TABLE yubin (
          ycode1 TEXT,
          ken TEXT,
          city TEXT,
          machi TEXT);」を実行する
*/     

「Produire.Data.Base.dll」を利用する
「Produire.Data.SQLite.dll」を利用する
「Produire.Data.Grid.dll」を利用する

SQLiteというSQLiteデータベースを作る
SQLiteのデータソースを、「test01.db」に変える
ws01=「」 // 検索文字列1
ws02=「」 // 検索文字列2

メイン画面を表示する

待機する
  
メイン画面とは
     ウィンドウを継承する
     はじめの手順
          初期化する
          ーー貼り付けた部品に対する操作をここに書きます
          //表部品1のデータ表をデータに変える
     終わり
  初期化する手順
     ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
     この内部領域大きさを{658,322}に変える
     この内容を「郵便番号検索」に変える
     ラベル3というラベルを作る
          その位置と大きさを{293,24,324,12}に変える
          その内容を「左のテキストボックスに検索したい市町村名の一部を入力してください」に変える
          その移動順を7に変える
          そのドラッグドロップを×に変える
     テキスト1というテキストを作る
          その位置と大きさを{92,24,126,19}に変える
          その移動順を5に変える
          そのドラッグドロップを×に変える
     ラベル1というラベルを作る
          その位置と大きさを{33,27,53,12}に変える
          その内容を「市町村名」に変える
          その移動順を3に変える
          そのドラッグドロップを×に変える
     表部品1という表部品を作る
     表部品1を初期化開始する
          その位置と大きさを{33,95,600,204}に変える
          その列見出し高さを18に変える
          その移動順を2に変える
          そのドラッグドロップを×に変える
     表部品1を初期化終了する
     ボタン1というボタンを作る
          その位置と大きさを{293,43,110,33}に変える
          その内容を「検索を開始する」に変える
          その移動順を1に変える
          そのドラッグドロップを×に変える
     ラベル2というラベルを作る
          その位置と大きさを{33,57,29,12}に変える
          その内容を「町名」に変える
          その移動順を4に変える
          そのドラッグドロップを×に変える
     テキスト2というテキストを作る
          その位置と大きさを{92,57,126,19}に変える
          その移動順を6に変える
          そのドラッグドロップを×に変える
終わり

//検索するボタンが押された時の手順
ボタン1がクリックされた時の手順
ws01=テキスト1の内容 //入力した内容を検索する変数にコピーします
ws02=テキスト2の内容

データを、取得する

     終わり

データを、取得する時の手順
          ーーデータの取得
    // データベースを占有しないようにここで接続する
    SQLiteへ接続する         

    // 郵便番号テーブルからword_searchをAND条件で検索します。
      SQLiteから「SELECT * FROM ubin2 where city like “%[ws01]%” AND machi like “%[ws02]%”;」をデータ表として取得してデータとする
     // データベースを占有しないようにここで切断する
     SQLiteから切断する          
     
     データの名前は、「郵便番号」
     表部品1のデータ表をデータに変える

     //表部品の列名を変える為に取得する
     列一覧は、表部品1の列一覧
    列一覧(1)の見出しは、「郵便番号」
    列一覧(1)の幅は、60
    列一覧(2)の見出しは、「都道府県」
    列一覧(2)の幅は、70
    列一覧(3)の見出しは、「市町村」
    列一覧(3)の幅は、120
    列一覧(4)の見出しは、「町域」
    列一覧(4)の幅は、290
  終わり
終わり

—————————— ここまで
ありそうな住所の一部を入力すれば検索できるようになりました。

 
検索結果

 

郵便番号データベースを検索する・その1

作成したデータベースは検索しなければ意味がないので検索する方法を、今回は固定文字列を直接入力して検索する方法。
検索する文字「以下に掲載がない場合」
作成したデータの町名からこの文字列を探して表示する。
入力した任意の文字列を検索する方法は後日後悔する予定。
通常のやり方で作成したら弾かれてしまったので原因を調査中。

既にSQLデータは作成してあるので呼び出すだけで良い。
SQLで呼び出しに使う命令はselectなのでそれを利用する。

尚、今回のプログラムではグリッドを使用するDLLとデータベースを使用するDLLが追加されている。
「Produire.Data.Base.dll」を利用する
「Produire.Data.SQLite.dll」を利用する
「Produire.Data.Grid.dll」を利用する

このDLLを使用しなければならないことが分からず正直かなり悩みました。

こんな画面になる
検索結果
サンプルプログラムは以下の通り。

——————————ここから
//
// 郵便番号SQLで検索・画面
//
// プロデルからSQLiteデータベースを操作する例 //
//SQLiteを利用するには、System.Data.SQLite.dllが必要です

「Produire.Data.Base.dll」を利用する
「Produire.Data.SQLite.dll」を利用する
「Produire.Data.Grid.dll」を利用する

SQLiteというSQLiteデータベースを作る
SQLiteのデータソースを、「test01.db」に変える
SQLiteへ接続する

メイン画面を表示する

待機する

メイン画面とは
ウィンドウを継承する
はじめの手順
初期化する
ーー貼り付けた部品に対する操作をここに書きます
//表部品1のデータ表をデータに変える
終わり
初期化する手順
ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
この内部領域大きさを{658,322}に変える
この内容を「メイン画面」に変える
表部品1という表部品を作る
表部品1を初期化開始する
その位置と大きさを{26,94,602,188}に変える
その列見出し高さを18に変える
その移動順を2に変える
そのドラッグドロップを×に変える
表部品1を初期化終了する
ボタン1というボタンを作る
その位置と大きさを{26,12,75,33}に変える
その内容を「スタート」に変える
その移動順を1に変える
そのドラッグドロップを×に変える
終わり

//スタートボタンが押された時の手順
ボタン1がクリックされた時の手順
データを、取得する
終わり

データを、取得する時の手順
/*  登録したテーブルの中身を確認するサンプルプログラムなので↓に書いておきます。
SQLiteで「CREATE TABLE yubin (
ycode1 TEXT,
ken TEXT,
city TEXT,
machi TEXT);」を実行する
*/
ーーデータの取得
// 郵便番号テーブルから町名=”以下に掲載がない場合”を検索します。
SQLiteから「SELECT * FROM ubin2 where machi =”以下に掲載がない場合”; 」をデータ表として取得してデータとする
データの名前は、「郵便番号」
表部品1のデータ表をデータに変える
終わり
終わり
——————————ここまで

郵便番号のデータベース作成・その2

「その1」で作成したSQLite作成プログラムには欠点がある。
「その1」のSQLiteのプログラムの中には項目の中にキーが設定されていない。このままでは「その1」のプログラムを複数回実行すれば同じ郵便番号が複数存在出来てしまう。つまり設定が間違っている。
SQLiteに限らず全てのSQLにはデータの重複を防ぐキーを設定することが出来る。今回はそれを踏まえて重複しないように修正する。(「その1」のプログラムを複数回実行すればエラーが発生するが強制終了せずに継続させれば同一データが複数登録されてしまう。)
SQLの資料を検索するとキー設定という重複を防ぐ説明がすぐに見つかるのでSQLiteでテータ作成するときにキーを付けることが出来れば郵便番号データの重複が防止出来る。形式的には次のようになる。

CREATE TABLE テーブル名
(項目名1 INTEGER UNIQUE,
項目名2 INTEGER,
項目名3 TEXT,
項目名4 DATE);

キーの設定は項目名の後ろに「UNIQUE」を加える事で設定することが出来る。(郵便番号データではINTEGER(数値)・DATE(日付)形式は使用しない。)

データベースにどの項目は「その1」と同じ。

1.郵便番号(7桁)…… 半角文字列
2.都道府県名 ………… 漢字(コード順に掲載)
3.市区町村名 ………… 漢字(コード順に掲載)
4.町域名 ……………… 漢字(五十音順に掲載)

必要なのは、この4つの項目となる。

作るのはデータベースの枠と郵便データのテーブル。データベースの枠はそのまま使用するのでデータベース名はそのまま。

データベース名=test01

新テーブル名 =ubin

比較するために前回作成したyubinテーブルはそのまま残しておく。

現在、元の郵便番号データに重複しているデータが存在している為、途中で数回エラーが発生しています。エラーが発生したら「続ける」を選択してください。ちゃんと郵便番号テーブルが作成されます。(現在対応策を調査中)
郵便番号データは比較的件数の少ない県のデータを使う事をお勧めします。

——————————ここから

//
// 郵便番号SQL作成02
//
// プロデルからSQLiteデータベースを操作する例 //
//SQLiteを利用するには、System.Data.SQLite.dllが必要です
「Produire.Data.SQLite.dll」を利用する

SQLiteというSQLiteデータベースを作る
SQLiteのデータソースを、「test01.db」に変える
SQLiteへ接続する

//CSVファイルをデータ表に読み込み保存されているデータを取得。
データ表を作ってデータとする
データへ「data.csv」から読み込む  // 好きな都道府県の郵便番号データを使用してください。
一覧は、データの一覧
カウント=0
テーブルを、作成する // テーブルを作成します

データの一覧のすべての【行要素】についてそれぞれ繰り返す
     カウント=カウント+1  //行要素で良いはずなのですがエラーが出るのでカウントを作ります。
     レコードは、一覧(カウント)  //一覧にCSVデータを読み込みます
     //レコードを報告する
     郵便番号は、レコード(3)// 郵便番号7ケタ (キーとして使用する)
     都道府県は、レコード(7)//都道府県・漢字
     市町村は、レコード(8)//市町村・漢字
     町名は、レコード(9)//町名・漢字

     //SQLiteにデータを書き込みます
     データを、追加する

繰り返し終わり

//最後に作成したデータをSQLiteで読み込んで表示します
データを、取得する

テーブルを、作成する手順
     ーーテーブルの作成 テーブル名 ubin
     //1.ycode1 =郵便番号 キーとして使用
     SQLiteで「CREATE TABLE ubin2 (
          ycode1 TEXT UNIQUE,
          ken TEXT,
          city TEXT,
          machi TEXT)」を実行する
終わり

データを、取得する手順
     ーーデータの取得
     SQLiteから「SELECT * FROM ubin2」を取得して結果とする
     「初期状態」として結果の内容を情報アイコンで表示する
終わり

データを、追加する手順
     ーーデータの追加
     SQL文は、「INSERT INTO ubin2 (ycode1,ken,city,machi) VALUES(?,?,?,?);」
     バインド値は、{郵便番号,都道府県,市町村,町名}
     //バインド値を報告する
     SQL文をバインド値としてSQLiteで実行する

終わり

——————————ここまで

郵便番号のデータベース作成・その1

日本郵便では郵便番号のデータのダウンロードファイルを用意されている。今回はそのデータを利用してSQLiteのデータベースを作成するプロデルのサンプルを作ってみた。(ファイル名はダウンロード後、各自で自由に命名してください。)

今回はCSVファイルをSQLに書き出すものなので、読み込むものはまた後で書きます。

私のブログで頻繁に使用している郵便番号のデータは次のような構成になっている。

郵便番号データファイルの形式等
全角となっている町域部分の文字数が38文字を越える場合、また半角となっているフリガナ部分の文字数が76文字を越える場合は、複数レコードに分割しています。
この郵便番号データファイルでは、以下の順に配列しています。
全国地方公共団体コード(JIS X0401、X0402)……… 半角数字
(旧)郵便番号(5桁)……………………………………… 半角数字
郵便番号(7桁)……………………………………… 半角数字
都道府県名 ………… 半角カタカナ(コード順に掲載) (注1)
市区町村名 ………… 半角カタカナ(コード順に掲載) (注1)
町域名 ……………… 半角カタカナ(五十音順に掲載) (注1)
都道府県名 ………… 漢字(コード順に掲載) (注1,2)
市区町村名 ………… 漢字(コード順に掲載) (注1,2)
町域名 ……………… 漢字(五十音順に掲載) (注1,2)

このデータをもとにSQLiteでデータベースを作成するプログラムを作ろうかと考えている。

取りあえず最初から全国では時間が掛かるので東京都のデータをもとに作成する。
プロデルのCSVファイルの乱を見ると、次のような例が出ている。

CSVファイルを読み込む
CSVファイルをデータ表に読み込むことですでに保存されているデータを取得できます。

データ表を作ってデータとする
データへ「data.csv」から読み込む。

データの一覧のすべての【行要素】についてそれぞれ繰り返す
行要素(1)を報告する
繰り返し終わり

何を変えるのかと考えれば、読み込むファイル名と「この行要素(1)を報告する」箇所にデータベースを入れ込むようにすれば良いのでその方向で考える。
その前にデータベースにどの項目を入れるのか考える。

1.郵便番号(7桁)…… 半角数字
2.都道府県名 ………… 漢字(コード順に掲載)
3.市区町村名 ………… 漢字(コード順に掲載)
4.町域名 ……………… 漢字(五十音順に掲載)

必要なのは、この4つの項目となる。

作るのはデータベースの枠と郵便データのテーブル

データベース名=test01

テーブル   =yubin

テーブルの項目
1.ycode1 =郵便番号(7桁)…… 半角数字
2.ken =都道府県名 ………… 漢字(コード順に掲載)
3.city =市区町村名 ………… 漢字(コード順に掲載)
4.machi =町域名 ……………… 漢字(五十音順に掲載)

この前提でプログラムを作ります。プログラムには画面を付けていないので、動作している際に何も反応が無いので不安だと思います。動作確認後に画面をお追加してみてください。

今回のプログラムも郵便番号データを用いています。作成するものが大きなデータなので数分間掛かります。全ての作成が終了した段階でSQLiteに書き込んだデータを表示します。

なお、[test01.db]が既に存在しているとエラーが発生します。

一度、動作させた段階でファイルが作成されるので複数回プログラムを動作させる場合はご注意ください。([test01.db]を削除してから利用してください)

——————————ここから

//
// 郵便番号SQL作成
//
// プロデルからSQLiteデータベースを操作する例 //
//SQLiteを利用するには、System.Data.SQLite.dllが必要です
「Produire.Data.SQLite.dll」を利用する

SQLiteというSQLiteデータベースを作る
SQLiteのデータソースを、「test01.db」に変える
SQLiteへ接続する
/*
1.全国地方公共団体コード
2.(旧)郵便番号(5桁)
3.郵便番号(7桁)
4.都道府県名(半角カタカナ)
5.市区町村名(半角カタカナ)
6.町域名(半角カタカナ)
7.都道府県名 (漢字)
8.市区町村名 (漢字)
9.町域名 (漢字)

——————————
今回使用する項目
——————————
3.郵便番号(7桁)(数字だけど文字列)
7.都道府県名 (漢字)
8.市区町村名 (漢字)
9.町域名 (漢字)

*/

//CSVファイルをデータ表に読み込み保存されているデータを取得。
データ表を作ってデータとする
データへ「data.csv」から読み込む
一覧は、データの一覧
カウント=0
テーブルを、作成する // テーブルを作成します

データの一覧のすべての【行要素】についてそれぞれ繰り返す
//行要素を表示 //各行ごとのデータは行要素です
カウント=カウント+1  //行要素で良いはずなのですが不安なのでカウントを作ります。
レコードは、一覧(カウント)  //一覧にCSVデータを読み込みます
//レコードを報告する
郵便番号は、レコード(3)// 郵便番号7ケタ 郵便番号は後で2つに分ける
都道府県は、レコード(7)//都道府県・漢字
市町村は、レコード(8)//市町村・漢字
町名は、レコード(9)//町名・漢字

//SQLiteにデータを書き込みます
データを、追加する

繰り返し終わり

//最後に作成したデータをSQLiteで読み込んで表示します
データを、取得する

テーブルを、作成する手順
ーーテーブルの作成 テーブル名 yubin
//1.ycode1 =郵便番号
//2.ken =都道府県名
//3.city =市区町村名
//4.machi =町域名
SQLiteで「CREATE TABLE yubin (
ycode1 TEXT,
ken TEXT,
city TEXT,
machi TEXT);」を実行する
終わり

データを、取得する手順
ーーデータの取得
SQLiteから「SELECT * FROM yubin」を取得して結果とする
「初期状態」として結果の内容を情報アイコンで表示する
終わり

データを、追加する手順
ーーデータの追加

SQL文は、「INSERT INTO yubin (ycode1,ken,city,machi) VALUES(?,?,?,?);」
バインド値は、{郵便番号,都道府県,市町村,町名}
//バインド値を報告する
SQL文をバインド値としてSQLiteで実行する

終わり

——————————ここまで

SQLiteについてのイメージ

代表的な日本語プログラムでは各種データベースを扱うことが出来ます。今回は「なでしこ」「プルデル」の両方に梱包されているSQLiteについてのイメージを少し書きます。
SQLはデータベースを扱うために独立した言語で、使用しているプログラムの中からSQLを呼び出す形で指示を与えて使います。SQLは独立した言語なので是非覚えましょう。今回紹介するSQLiteはパソコン単体で使用することが出来るデータベースでSQLの入門学習に適しています。
今回は日本語プログラムを対象にしていますが、PHP等の他言語でも使い方は同じです。

(以前私が改造したサンプルプログラムはこちらを参考にしてください。)

ここでは表計算ソフトの画面コピーを使いながらイメージだけ掴んでください。SQLについてはネット上に詳細な解説が大量にあるのでそちらを参考になさってください。

プロデルにはサンプルが用意されています。プロデルを標準的にインストールをした場合、サンプルは「C:\Program Files (x86)\Produire\サンプル」フォルダの中にあります。

SQLのサンプルは「C:\Program Files (x86)\Produire\サンプル\データ操作\データベース」に存在しています。
SQLサンプルフォルダ

今回使用するサンプルプログラムは「プロデルでSQLite.rdr」です。
——————————ここから
1    //
2    //サンプルは「プロデルでSQLite.rdr」
3    //
4    //
5    // プロデルからSQLiteデータベースを操作する例 //
6    //SQLiteを利用するには、System.Data.SQLite.dllが必要です
7
8    「Produire.Data.SQLite.dll」を利用する
9    SQLiteというSQLiteデータベースを作る
10
11    SQLiteのデータソースを、「database.db」に変える
12    SQLiteへ接続する
13
14    テーブルを作成する
15
16    データを取得する
17    データを追加する
18    データを更新する
19    データを削除する
20
21    テーブルを破棄する
22
23    SQLiteから切断する
24
25
26
27    テーブルを、作成する手順
28         ーーテーブルの作成
29         SQLiteで「CREATE TABLE 楽曲 (
30              曲名 TEXT,
31              アーティスト TEXT,
32              アルバムID NUMBER);」を実行する
33    終わり
34
35    データを、取得する手順
36         ーーデータの取得
37         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して結果とする
38         「初期状態」として結果の内容を情報アイコンで表示する
39    終わり
40
41    データを、追加する手順
42         ーーデータの追加
43         SQL文は、「INSERT INTO 楽曲 (曲名,アーティスト) VALUES (?, ?)」
44         バインド値は、{「I am your singer」、「サザンオールスターズ」}
45         SQL文をバインド値としてSQLiteで実行して、件数1とする
46
47         バインド値は、{「勝手にシンドバット」、「サザンオールスターズ」}
48         SQL文をバインド値としてSQLiteで実行して、件数2とする
49
50         ーー内容の確認
51         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
52         「追加後」として「[件数1+件数2]件、追加しました。[改行][結果の内容]」を情報アイコンで表示する
53    終わり
54
55    データを、更新する手順
56         ーーデータの更新
57         SQL文は、「UPDATE 楽曲 SET 曲名=? WHERE 曲名=?」
58         バインド値は、{「I AM YOUR SINGER」、「I am your singer」}
59         SQL文をバインド値としてSQLiteで実行して、件数とする
60
61         ーー内容の確認
62         SQL文は、「SELECT 曲名,アーティスト FROM 楽曲 WHERE 曲名=?」
63         バインド値は、{「I AM YOUR SINGER」}
64         SQLiteからSQL文をバインド値として取得して、結果とする
65         「更新後」として「[件数]件、更新しました。[改行][結果の内容]」を情報アイコンで表示する
66    終わり
67
68    データを、削除する手順
69         ーーデータの削除
70         SQL文は、「DELETE FROM 楽曲 WHERE アーティスト=?」
71         バインド値は、{「サザンオールスターズ」}
72         SQL文をバインド値としてSQLiteで実行して、件数とする
73
74         ーー内容の確認
75         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
76         「削除後」として「[件数]件、削除しました。[改行][結果の内容]」を情報アイコンで表示する
77    終わり
78
79    テーブルを、破棄する手順
80         ーーテーブルの破棄
81         SQLiteで「DROP TABLE 楽曲
——————————ここまで

各行ごとに適当に解説

8行目 「Produire.Data.SQLite.dll」を利用する
頭のコメント欄に書いてあるように使用するDLLを指定します。
プログラム言語が、最初から使わないものを組み込んでおくとサイズばかり大きくなるために使用する時に呼び出す使い方をします。

9行目から12行目まではそのまま使用します。

9    SQLiteというSQLiteデータベースを作る
10
11    SQLiteのデータソースを、「database.db」に変える
12    SQLiteへ接続する

11行目の「database.db」の名前は分かりやすいものに変更してください。サンプルを動かす場合は、そのままでも構いません。(同じ名前のファイルが存在した場合エラーになります。)ここまでの作業を表計算ソフトに例えれば、表計算ソフトを起動するまでの手順です。

起動
表計算ソフトならこんな状態。

14    テーブルを作成する
テーブルを作成する手順(オブジェクト)を呼び出します。(27行目から33行まで)

27    テーブルを、作成する手順
28         ーーテーブルの作成
29         SQLiteでCREATE TABLE 楽曲 (
30              曲名 TEXT,
31              アーティスト TEXT,
32              アルバムID NUMBER);を実行する
33    終わり
テーブルを作る
表計算ソフトに例えるならこんな状態です。2行目は無視してください。

データベースに新しいテーブルと属性を指定します(表計算ソフトに例えるとシート名と各列名と列の属性を指定します。)

テーブル名 = シート名
項目名   = 列名

この列は後からでも増やしたり減らしたりすることが出来ます。ここではテーブルの中に3つの列を作成しました。1列目は「曲名」、2列目は「アーティスト」、3列目は「アルバムID」が作成されます。

16    データを取得する

楽曲テーブル(楽曲シート)が出来たのでデータを読み込みます。この段階ではデータは空です。

35    データを、取得する手順
36         ーーデータの取得
37         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して結果とする
38         「初期状態」として結果の内容を情報アイコンで表示する
39    終わり

データを取得
表計算ソフトなら色のついた部分に条件に合ったデータが読み込まれるイメージです。(今回の例では空です。)

17    データを追加する

楽曲テーブル(楽曲シート)にデータを追加します。

41    データを、追加する手順
42         ーーデータの追加
43         SQL文は、「INSERT INTO 楽曲 (曲名,アーティスト) VALUES (?, ?)」
44         バインド値は、{「I am your singer」、「サザンオールスターズ」}
45         SQL文をバインド値としてSQLiteで実行して、件数1とする

楽曲テーブルで設定した項目名「曲名」と「アーティスト」に追加するデータ(値)を入れます。

値1, 値2= VALUES (?, ?)

VALUES (?, ?)にバインド値を設定します。バインド値とは対応する値を割り当てることで、この場合(曲名、アーティスト)となります。追加する項目の数だけ()の中が増えます。

実際に追加するデータを44行目でバインド値を指定し、45行目でSQLに渡します。

追加
表計算ソフトならデータが追加されたイメージです。

46
47         バインド値は、{「勝手にシンドバット」、「サザンオールスターズ」}
48         SQL文をバインド値としてSQLiteで実行して、件数2とする

47行目で新たなバインド値を設定してデータを追加します。

2つ目追加

表計算ソフトならデータが更に追加されたイメージです。

50         ーー内容の確認
51         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする

51行目で、曲名とアーティストを楽曲テーブルから読み込み、見つけたデータを「結果」にセットします

52         「追加後」として「[件数1+件数2]件、追加しました。[改行][結果の内容]」を情報アイコンで表示する
53    終わり

結果表示

結果の内容を画面に表示します。

55    データを、更新する手順

データの内容を変更する場合にデータの更新をする必要があります。

56         ーーデータの更新
57         SQL文は、「UPDATE 楽曲 SET 曲名=? WHERE 曲名=?」
58         バインド値は、{「I AM YOUR SINGER」、「I am your singer」}
59         SQL文をバインド値としてSQLiteで実行して、件数とする

57行目のUPDATEで 楽曲テーブルの中にある曲名を変更する指示をします。どんなデータを更新するのかはWHERE 曲名=?で指定します。

バインド値で「新しい値」、「古い値」を指定してSQLを実行します。

更新
表計算ソフトならこんな感じでしょうか?

SQL文として書くと次のような感じです。

  1. データベーのス(以下、DB)を最初に作り接続する。
  2. DBの中にテーブルを作る。
  3. DBの中にテーブルにデータを書き込む。
  4. DBの中にテーブルに入っているデータを変更する。
  5. DBの中にテーブルに入っているデータを削除する。
  6. DBの中にテーブルを破棄する。
  7. DBとの接続を切断する。

1.最初に「枠の名前.db」というデータを入れる枠(グループ)を作ります。平たく言えばグループ名ですね。(このサンプルでは「database.DB」)
これは只の枠(グループ)なので、実際データを入れる場所はテーブルとして枠(グループ)の中に別途に作成します。枠(グループ)の中には複数のテーブルを作ることが出来ます。通常は枠(グループ)を消すことは無いので最初に1度枠を作れば済みます。今から枠を使うよ!という合図が「接続する」の意味です。(あくまでも日本語プログラム向けに大胆に大雑把な説明です。)

2.実際にデータを入れる場所(テーブル)を作ります。
SQL文では以下のように書きます。
CREATE TABLE 楽曲 ( 曲名 TEXT, アーティスト TEXT,アルバムID NUMBER)

3.テーブルの中にデータを書き込みます。
SQL文では以下のように書きます。
INSERT INTO 楽曲 (曲名,アーティスト) VALUES (?, ?)
バインド値は、{「I am your singer」、「サザンオールスターズ」}

4.テーブルの中のデータを更新します。
SQL文では以下のように書きます。
UPDATE 楽曲 SET 曲名=? WHERE 曲名=?
バインド値は、{「I AM YOUR SINGER」、「I am your singer」}

5.テーブルの中のデータを削除します。
SQL文では以下のように書きます。
DELETE FROM 楽曲 WHERE アーティスト=?
バインド値は、{「サザンオールスターズ」

6.テーブルを破棄します。
SQL文では以下のように書きます。
DROP TABLE 楽曲

日本語プログラムについて

日本語プログラムはパソコンを使って(スマホ用は出来ない)プログラムを覚え始めるにはハードルが低い言語だと思っています。特にコンピューター言語に関する理解を深める時に、日本語で考えられることは重要な機会です。
(日本語プログラムには「なでしこ」「プロデル」「MIND」等があります。)

 

「なでしこ」はオフィス製品と連動させる時にはかなり強力です。表計算の入力や集計などを目的としているのであれば「なでしこ」のほうが向いているような気がします。日報入力のような業務をしているのであれば、便利につかえるのではないでしょうか。また、MS製品だけでなくOpenOffice.org系(OOO)とも連携しています。
ネットワークに資料が多いので安心して入門できます。

 

「プロデル」は、「なでしこ」よりもプログラム言語としての構造がしっかりしているようです。オブジェクト指向のプログラムを書くことが出来、MSオフィス製品との連携も出来るようです。
まだ学んでいる最中なので何とも言えないのですが、SQLについての取り扱いは「なでしこ」よりも「プロデル」のほうが分かりやすいかもしれません。また、他言語を意識しているらしく、プロデルは他言語に進むための最初のステップとして良い選択かと思います。

 

「MIND」は日本語プログラムとしては最も古いものです。約35年間バージョンを重ねてきて言語として完成されています。2017年の春に突然フリーになりました。それまでは有料でかなりお高かったのですがw。MINDの場合ネットワーク関係も含め大規模な開発まで出来ます。(スマホ関係の開発もアンドロイドなら可能。)
プログラムの能力は安定性も含めかなり高いのですがコンピュータの基本を知らないと難しいかも知れません。今まで有料だったために資料がネットに少ない(ほぼ無い)。他言語に詳しい人が導入するには良いのではないでしょうか?
MINDの場合、有料の講習があります。「Windows版」と「Linux版」があります。

先日の続き、表に出来ました

先日、「プロデルでこんな事を実現したい」と書いた。その後、プロデル開発者の「ゆうとさん」に同様の質問をさせていただいたところ、「データ表」を使う事で実現できるとのお返事をいただきました。
ゆうとさん、感謝!感謝!です。

そこで、こんなサンプルを作ってみました。

データ表

——————————ここから
//
// CSVファイルを読み込みデータ表として表示
//
//

データというデータ表を作る

メイン画面を表示する
待機する

メイン画面とは
ウィンドウを継承する

はじめの手順
初期化する
データ表を作ってデータとする
データへ「data.csv」から読み込む // 郵便番号データ

表部品1のデータ表をデータに変える // ここでデータ表にセット

終わり
初期化する手順
この内部領域大きさを{442、258}に変える
この内容を「表部品のテスト」に変える
このドラッグドロップを○に変える
ラベル1というラベルを作る
その内容を「ラベル1」に変える
その位置と大きさを{259、16、39、12}に変える
テキスト1というテキストを作る
その位置と大きさを{12、13、241、19}に変える
表部品1という表部品を作る
表部品1を初期化開始する
その位置と大きさを{12、38、418、208}に変える
その位置固定方向を「右+左+下+上」に変える
表部品1を初期化終了する
終わり

表部品1のセルがクリックされた時の手順
ラベル1の内容は、「[イベントの行],[イベントの列]を選択中」
テキスト1の内容は、表部品1の選択セルの内容
表部品1の選択行を表示。

終わり

テキスト1のキーが入力された時の手順
もしイベントのキー番号が13なら
表部品1の選択セルの内容は、テキスト1の内容
もし終わり

終わり
終わり
——————————ここまで

プロデルのデータ表とは何ぞな?

ところで、データ表に関する理解がまだ曖昧なので、自分が現在理解している範囲で書いてみた。間違っている可能性はあるが恐らくこのような感じ。
データ表イメージ

多分このような感じ、まだまだ色々なことが出来そうなのだけれど機能が多すぎて見つけ切れていない。