プロデル入門02・その2

今回は、その1で用いたサンプルプログラム「プロデルでSQLite.rdr」について触れながら次のステップに進む。

プロデルデザイナで表示された内容を見ると

基本的な内容が19行目(SQLiteから切断する)

で終わっていることが想像できると思う。それ以降に記述してあるものは、各オブジェクト(パーツごとに分けたプログラム)で19行目までのプログラムによって呼び出されている。

最初の処理

4行目から8行目までがデータベースを使うために設定するとなる

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

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

4行目はSQLiteを使うために必要なDLL(ダイナミック・リンク・ライブラリ)で必ず入れなければならない。この記述をすることでプログラムに必要なツールを内部で呼び出すようになる。

5行目は「SQLiteデータベースを作る」と書いてありますが、SQLiteを使用するために必要なので4行目とペアで利用すると覚えておいてください。

7行目で使用するデータベースを指定しています。青文字の名前を利用するデータベースの名前に設定します。

8行目でデータベースに接続することで利用できるようになりました。

その1ではこの下に画面を表示するオブジェクトを追加しました。今回は追加した部分は無視します。(今見ているプログラムはサンプルそのものです。)

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

今回のサンプルプログラムを動かすまでデータベースファイル(以下、DB)は存在していませんから10行目で中で使用するテーブルを作成します。

10 テーブルを作成する  ・・・ オブジェクトを呼び出します。

10行目で「テーブルを作成する」オブジェクトを呼び出します。

23行目から29行目にかかれているプログラムが実行されます。

23 テーブルを、作成する手順
24 ーーテーブルの作成
25 SQLiteで「CREATE TABLE 楽曲 (
26 曲名 TEXT,
27 アーティスト TEXT,
28 アルバムID NUMBER);」を実行する
29 終わり

テーブルを作成する命令の詳細についてはSQLの説明になるので割愛します。

11
12 データを取得する
13 データを追加する
14 データを更新する
15 データを削除する

この部分は、それぞれ目的としたオブジェクトを呼び出すものです。

ここから「その1」で作成したプログラムに戻ります。

ここでは「その1」で作成した「入力画面」と13行目「データを追加する」に限定して書きます。

先ほど無視した9行目に追加した

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

により、10行目以降のプログラムは「待機」状態になる為、画面からボタンを押すなどしない限りプログラムは画面を表示したまま待機するようになっています。

画面に入れたものをデータベースに登録する為に「登録する」ボタンを押した時の処理を追加します。

前回、作成途中のボタンをクリックしたのでプログラムの下の方に

「ボタン1がクリックされた時の手順」が追加されています。前回、コメントに「登録ボタンが押された処理」と追記しました。

この中に書いていきます。

画面上のテキスト項目は3つあります。プログラムの「メイン画面」の部分を見ると「テキスト1・2・3」と名前が付いていることが分かります。

画面があるという事は入力した文字がPC内に書き込まれた訳ですから、それを取り出してDBに渡す必要があります。

画面の項目をDBテーブルに渡します。テーブルで使用している項目は「曲名,アーティスト,アルバムID」なので、今回はそのまま使用します。

画面のテキストの内容をDBテーブルの項目に割り当てます。

曲名=テキスト1の内容

アーティスト=テキスト2の内容

アルバムID=テキスト3の内容

と書けば、内容をセットすることが出来ます。

セット出来たらDBに書き込みます。

サンプルプログラムの書き込む箇所は次のようになっています。

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

これを参考に変更していきます。

バインド値の中に書き込む内容をセットすれば良いので、テキスト項目からセットした変数をここにセットします。

「曲名・アーティスト・アルバムID」の3項目の内容をセットするには、変数名を[]で囲みます。

ーーデータの追加
SQL文は、「INSERT INTO 楽曲 (曲名,アーティス,アルバムID) VALUES (?, ?, ?)

バインド値は、{[曲名]、[アーティスト]、[アルバムID]}

ここで赤字で書いた違いに注意してください。

この作業を「ボタン1がクリックされた時の手順」に記入して余計な部分を削除します。

————-このような感じになります。

ボタン1がクリックされた時の手順
//登録ボタンが押された処理
ーーデータの追加
SQL文は、「INSERT INTO 楽曲 (曲名,アーティス,アルバムID) VALUES (?, ?, ?)

バインド値は、{[曲名]、[アーティスト]、[アルバムID]}
SQL文をバインド値としてSQLiteで実行しする

ーー内容の確認
SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
「追加後」として「[件数1]件、追加しました。[改行][結果の内容]」を情報アイコンで表示する
終わり

————-このような感じになります。

次に続きます。

プロデル入門02・その1

画面の作り方とボタンの作り方をやったので、SQLiteを使って入力したデータを保存と呼び出しをすることにする。いままでもSQLについては書いているので、ここでは画面に入力したデータをSQLに書き込んでみる。

最初に、今回はSQLを使用するので、サンプルプログランからPC単体で動くSQliteのサンプルを呼び出します。

サンプルの位置は下記の場所を参考にしてください。

C:\Program Files (x86)\Produire\サンプル\データ操作\データベース

利用するサンプルは「プロデルでSQLite.rdr」です。

このサンプルプログラムには画面がありません。そこで、先ほど作成した画面を追加して分かりやすいものにしたいと思います。

その前に、呼び出したサンプルプログラムを別の名前で保存してください

尚、サンプルでは決まったデータの書き込みをしていますが。画面を付ける事により、自由なデータを入力して検索できるようになります。

前回までに作成した画面と同じようなものを作って行きます。

このような感じで作成してください。作成したボタンをクリックし。分かるようにコメントを書き入れます。(コメントの開始は // です。)

サンプルプログラムを読んで項目名を一致するように変更します。

サンプルプログラムの中にテーブルを作詞する手順が書いてあるので、その内容に従って画面の項目(ラベル)を設定します。

曲名 TEXT,
アーティスト TEXT,
アルバムID NUMBER

画面の作成が終わったら。作成された画面プログラムが動作するように画面を呼び出す命令の位置を変更します。

画面プログラムは「メイン画面とは」と書かれている部分の数行上に

—————–

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

—————–

と記載されているので。その部分をすべて9行目にカット&ペーストで移動してください。この2行の命令を9行目に映す事で、画面を表示して待機する事で画面に処理の主導権を渡すようになります。(ボタンを押さないと動かない状態にする)

次回に続きます。

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

今回作成するプログラムは、郵便番号を検索して見つけた住所をコピーして画面に入力するサンプルプログラムです。下記の動画を参考にしてください。

郵便番号のプログラムと、ユーザー登録のプログラムで共通するのは郵便番号と住所なので、その部分から改造しはじめようかと考えている。

ユーザーテーブルの項目。

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

郵便番号テーブルの項目。

1.zip1 =郵便番号
2.ken =都道府県名
3.city =市区町村名
4.machi =町域名

郵便番号検索で使用したプログラムをコピーして変更する。

 

検索に使用したテキスト項目に入れた住所から検索できるようにしたい。郵便番号検索では「市町村」と「町域」の二つで検索を行っていたが、住所登録する場合は1か所で間に合わせたい。
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,576}に変える
この内容を「郵便番号検索」に変える
ラベル1というラベルを作る
その位置と大きさを{17,83,53,12}に変える
その内容を「郵便番号」に変える
その移動順を10に変える
テキスト0というテキストを作る
その位置と大きさを{76,83,60,19}に変える
その移動順を9に変える
郵便ラベル3というラベルを作る
その位置と大きさを{290,332,324,12}に変える
その内容を「左のテキストボックスに検索したい市町村名の一部を入力してください」に変える
その移動順を7に変える
郵便テキスト1というテキストを作る
その位置と大きさを{76,329,126,19}に変える
その移動順を5に変える
郵便ラベル1というラベルを作る
その位置と大きさを{17,329,53,12}に変える
その内容を「市町村名」に変える
その移動順を3に変える
郵便表部品1という表部品を作る
郵便表部品1を初期化開始する
その位置と大きさを{17,360,600,204}に変える
その列見出し高さを18に変える
その移動順を2に変える
郵便表部品1を初期化終了する
ボタン1というボタンを作る
その位置と大きさを{218,327,66,23}に変える
その内容を「住所検索」に変える
その移動順を1に変える
ラベル2というラベルを作る
その位置と大きさを{17,117,35,12}に変える
その内容を「住所1」に変える
その移動順を11に変える
テキスト1というテキストを作る
その位置と大きさを{76,114,384,19}に変える
その移動順を12に変える
テキスト2というテキストを作る
その位置と大きさを{76,150,384,19}に変える
その移動順を13に変える
ラベル3というラベルを作る
その位置と大きさを{17,157,35,12}に変える
その内容を「住所2」に変える
その移動順を14に変える
終わり

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

データを、取得する
終わり

データを、取得する時の手順
ーーデータの取得
SQLiteへ接続する         // データベースを占有しないようにここで接続する
// 郵便番号テーブルからword_searchをAND条件で検索します。
例外監視
SQLiteから「SELECT * FROM zip where ken like “%[ws01]%” or city like “%[ws01]%” or machi like “%[ws01]%”;」をデータ表として取得してデータとする
発生した場合
監視終わり
SQLiteから切断する      // データベースを占有しないようにここで切断する

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

郵便表部品1のセルがクリックされた時の手順

テキスト0の内容は、郵便表部品1の選択セルの内容
ws01=テキスト0の内容

ーークリックされた郵便番号を元に住所を検索します。zip1= “[ws01]が検索キーワードとなります。

ーーデータの取得
SQLiteへ接続する         // データベースを占有しないようにここで接続する
例外監視
// 郵便番号テーブルからword_searchをAND条件で検索します。
SQLiteから「SELECT ken,city,machi FROM zip where zip1= “[ws01]” ;」を取得して結果とする
発生した場合
監視終わり
SQLiteから切断する      // データベースを占有しないようにここで切断する

ーー得られた結果の内容を繋げてテキスト1に表示します。

//住所A=結果の内容
住所A=結果(1,1)&結果(1,2)&結果(1,3)

//住所を表示
テキスト1の内容を住所Aに変える

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

プロデルで作成した郵便番号検索の動画

先日プロデルで作成した郵便番号のプログラムを動かしている状況を動画にしてみた。

サンプルで作成した郵便番号検索の動画。日本全国のデータが入っています。

郵便データを他のテーブルで利用する・その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で実行する

終わり

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