閑話休題・プロデルでSQLを使うメリット

プロデルで業務に使えるサンプルプログラムを作り公開しているが、それなりに悩みながらコードを書いている。何かが間違っていたり勘違いしていたりと、その原因はいろいろある。以前SQLは「なでしこ」よりも「プロデル」のほうが優れていると書いた。その理由を書いていなかった。「なでしこ」はSIFT-JISで処理を行っている(変換命令が用意されているので問題はない。)のに対して、「プロデル」はユニコードを使用している。この違いが大きい。ともにSQLite3を利用しているので大差はないが使用コードの違いで「プロデル」では内部に漢字で変数項目が使える。(どちらでも保存した内容に漢字などを使用できるので勘違いしないでほしい。)データベースは他の言語からも使用できる方が便利なので項目名は出来る限り「半角英数」で処理したほうが良いとは思う。

例えば、「プロデル」で作成したデータベースをRubyで読み込むとか、PHPでも利用するとかした場合は便利かと思う。

SQLの利用にはこだわりを持っている。が独立した言語であることは以前書いた。UNIXなどを利用するとシェルというバッチプログラムを使用してSQLを直接操作するだけでかなりの処理ができるようになる。「プロデル」でフロント部分を作りその中でSQLを利用すれば比較的簡単にプログラムが組めるようになるはずだと考えている。

なぜ、いまこんなことを書いているかといえば、プログラムの途中で嵌まっているからだ。次回はどうなるか分からない。また脱線する?たぶん、書き込みだけのSQLプログラムになるとおもうけど。そのうちプログラム作成手順が読みやすいようにまとめます。

 

 

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

終わり

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

日本のバブルの原因と破滅まで

日本のバブル崩壊に至る経緯が分かりやすく出ていたので転載

出典はこちら

5: 以下、5ちゃんねるからVIPがお送りします 2017/12/17(日) 23:43:23.057 ID:MIPbrLsq0
じゃあ日本のバブルの原因と破滅までほそぼそ語っていきます

ブラックマンデーという世界株価大暴落事件が起きる

日本「やばいから証券会社のみなさん、なんとか株価維持するようお願いします」

野村証券、山一證券、日興証券、大和証券「わかりました」

証券会社「みんなーすげえ金融商品できたぞー」

特金
簡単に言うと、企業の代わりに株とか買って資産運用します
すくなくとも銀行の金利は絶対保証します
→要は最低でも銀行の金利と同じ、儲かればそれ以上絶対に払うと言う保証付きのもの

金利保証は違法だったが政府は黙認

日本企業「マジかよ。買います買います!」

こうして日本企業は本業以外での株や不動産なんかの投資による利益が爆上げする

当時は「財テク」と呼ばれ、めちゃくちゃ流行した

日本企業「もっと特金買いてえ」

証券会社「ワラント債やりましょう(ボソッ」

ワラント債
お金を返してもらう権利プラス利子(ここまでは普通の債権)
プラス株を安く買う権利

※厳密には違うけど簡単のためこんな感じの説明で

日本企業「ワラント債やってます!みんな買ってください!」

海外「利子だけじゃなくて株ももらえんのかよ!買います!買います!」

こうして世界のお金が日本企業に集まりだす

ワラント債の売り方も工夫してて、日本円で買ってもらうんじゃなくてドルで買ってもらってた

当時は円が大人気だったので

例えばワラント債を100ドルで買ってもらう(たとえばこの時点で1ドル = 100円とする)

ドルのまま持っとく

時間経つとたとえば1ドル = 120円になる

最初は
100円*100ドル = 1万円
だったのが
120円*100ドル = 1.2万円
になる

つまりお金借りてるのに逆にお金受け取ってるみたいな状態になってた

ワラント債を発行すればするほど儲かる自体に

日本企業「どんどん売りますよー」

海外「買います買います!」

日本企業「金集まったから特金にどんどんつぎ込みます」

証券会社「特金で集めた金で株に投資しまくります」

こうして日本の株価は高騰する

金が儲かりまくると企業は不動産を買いまくり、地価がどんどん高騰する

不動産価値がどんどん上がるので銀行が企業に融資するとき本来は
会社の業績だったり、利益だったりを見るものなんだけど
「その会社がどのくらい不動産を持っているか」が基準になり始める

つまり本業がどれだけ調子悪くても不動産持ってれば金が借りれる状態になる

世界「日本の銀行金貸しすぎだろ。不公平だからいじめるか」

1987年に「バーゼル合意」に参加
ここでBIS規制というものが作られる

BIS規制は簡単に言うと、

「銀行が自分で持ってるお金の12.5倍までしか貸しちゃダメです」
(自己資本最低でも8%もっとけ)

っていう規制

日本「それじゃ今の好景気終わっちまうよ。なんとか頼む」

世界「しょうがないな。じゃあ日本だけ特別に持ってる株の含み益の半分を自己資本(自分の持ってるお金)としてカウントしていいよ」

日本「どうも」

まあややこしいので簡単に言うと

「日本の株価が上がり続ければ、日本の銀行は今まで通りの感じで貸付ができる」

「裏を返すと株価が下がりだしたら銀行即潰れます」

まあそんなこんなで日本は儲かり続け>>1で書いたようなとんでもないことが起こり続けます

海外の証券会社からは「日本の市場は政府によって操縦されている」と揶揄されまくった

それでも日本の株価は伸び続けた

ところが当時のリクルートが政治家に賄賂としてこっそり自社の株を配りまくったのがバレ(リクルートコスモス未公開株事件)、日本全体に政治家に対する不信感が強まる

当時の日銀の総裁は大蔵省(いまの財務省)から選ぶのが通例(政府がコントロールしやすいため)がだったんだが、

政治家への不信感から、大蔵省と全く関係のない日銀の中から叩き上げでのし上がった三重野康が日銀の総裁として君臨する

これを機にバブルは崩壊し始める

三重野総裁は「株は一度も買ったことない」「いまのバブルは日本をダメにする」「長期的にみてバブルは日本経済へ悪影響である」と公言しまくっていた

そこで三重野総裁はバブルを鎮圧するべく策を講じる

日本は好景気で給料も上がってはいたんだけど、
それを上回る勢いで地価も爆上げしていた

なので普通のサラリーマンは家を買うことは不可能に近い状態になったりしていた

三重野総裁はバブルを鎮めるため、金利を引き上げた

金利を引き上げることで、株や不動産への投資をやめささ、預金するよう促した
みんなの目を覚まさせようとしていた

しかしヒートアップしていた日本企業はそんなのには目もくれず株への投資をやめなかった
そんなこんなで株価はやっぱり上がり続け、当時の日経株価は市場最高の38915円にまで達していた(比較のために現在は22500円)

そこで次に三重野総裁は「不動産向け融資を減らす」という作戦に出た

つまり今まで盛んに行われていた「不動産買って儲けるんで金貸してください!」っていう企業に金を貸さないようにし始めた

ても実はこれには抜け穴があった

銀行が貸すのはダメだけど、住宅金融専門会社、通称「住専」は今まで通りでOK

つまり規制はされたけど本音では不動産に投資したかった銀行は、住専に肩代わりさせることで今まで通りの融資を続けようとした

まあでも不動産向け融資の規制は一定の効果があった

金利引き上げ、不動産向け融資の規制

これだけしてもバブルはなかなか収まらなかった

そこで、日銀はどんどん金利あげる
最終的には定期預金の金利は6%になる

日銀の金利の話がどんどん広まっていくと

「普通に貯金してても2%、定期なら6%金利もらえるし、わざわざ株に投資しなくてよくね?」

という風潮になっていく。

これが浸透していき、株式市場は崩壊し始める

バブル期は銀行の預金金利が5%とかだったもんなぁ

大蔵省はなんとか株価を維持するために証券会社に圧力をかけ株をみんなに買わせようとした

しかしうまくいかず株価はどんどん暴落

日本企業、日本人が買い漁った海外の高級ビルなんかは軒並み売りに出されるように……

これにより不動産価格も暴落

株、不動産が暴落すると借金を返済できない企業が続出する
企業に貸付を行っていた銀行たちは不良債権(返してもらえないお金)がどんどん増えていく

お金返してもらえない

仕方ないのでその分は自分が持ってるお金から捻出

自己資本の比率が下がっていく

>>37 BIS規制に引っかかっちゃう

こうして企業はどんどん破産、倒産

銀行もやばい

国民「銀行にお金預けといたらやばくね?」

国民「だよな。引き出しとこうぜ」

こうして取り付け騒ぎが起きる

銀行「取り付けが増えて預金がどんどん引き出されると銀行全部潰れちゃう…」

日本「やばいやばい。とりあえずペイオフ制度(預金額の1000万までしか保証しない)を一時的に変更して政府が全額保証することにしよう」

しかし間に合わず銀行、証券会社はどんどん潰れる

1996年
阪和銀行破綻
1997年
三洋証券破綻
北海道拓殖銀行破綻
山一證券破綻

バブル崩壊で有名な個人投資家も次々破産

尾上縫(おのうえぬい) 破産
累計借金額 1兆1975億円
ピーク時は借金の利子だけで1日1億7000万あったもよう

その後日本は世界各国が成長を続ける中デフレ時代を過ごすことになる

通称「失われた20年」

63: 以下、5ちゃんねるからVIPがお送りします 2017/12/18(月) 00:45:58.035 ID:tuzHMqBr0
終わり

最近色々本読んでつけただけの知識で付け焼き刃だからいろいろボロあると思う

大筋はこんな感じです

出典: world-fusigi.net