ちょいと思う事があって

パソコンを使ってプログラムを作るとき、古い時代のおじさん世代としては画面が気になる。
その中で入力画面が簡単に作れる言語を手に入れようと思うとVisual系になってしまう。
ここで突然Visual系と言われてもパソコン言語に縁の無い人にとっては何のことか分からない。そんなものだ、Visual系とは画面を、イメージのままに作れる種類の言語(主にパソコン)で主にC#とかBasic等がある。言語使うためには色々な設定(プラットフォーム)が必要で正直に言えば設定で挫折する人も少なくない。(マイクロソフト「Visual Studio 2017 Community」は無料です)。初心者がプログラムを始めようにも敷居が高い。
そんな中で異色を放っているのが「日本語プログラム」で、「なでしこ」・「プロデル」は画面が簡単に作れるだけでなく。インストールするだけで簡単に始めることが出来る。それでいてプログラム言語としての要所はきちんと押さえているのでプログラムの基礎を付けることが出来る。日本語だから簡単とは言わないが、書き間違いを探しやすいのは事実。逆に、人によっては日本語だから曖昧さゆえの壁に当たるかもしれない。
入力画面が簡単に作れて、入力ができる、これは事務系のプログラムには必須事項なので利用しないのはもったいない。しかも、エクセル・ワード等との連携が得意なので使い方によっては時短が可能になる。

ちょいと思う事があって、今日はそんなことを節操なく書いている。

もしも、興味を持った人がいれば、言語の名前で検索していただければ簡単に見つかる。

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

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

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

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

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

 

 

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版」があります。

こんな事をプロデルで実現したい

日本語プログラムには「プロデル」以外にも「なでしこ」や「MIND」がある。歴史が最も古い「MIND」が今年から無償となりもしかしたら今後話題になるかもしれない。

私は「なでしこ」を業務を簡略化するために数年前から使っているので思考ベースがどうしても「なでしこ」になってしまい。「なでしこ」にある機能を使いたい欲が出てくる。
プロデルで、このようなことを行いたいと考えている。

今回は「なでしこ」のサンプル

郵便番号のCSVファイルを読み、グリッド表示する

CSVファイルを読んでグリッドに表示
ぐりっとのターゲット行をクリックしたときにその内容を表示

このプログラムのサンプル

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

##
## なでしこでCSVファイルを読みグリッドに表示する
##
「{デスクトップ}data.csv」を開いてCSV取得
住所に代入

#グリッドに表示してみる

郵便住所グリッドとはグリッド
郵便住所グリッドのアイテムは住所
そのダブルクリックした時は~
  それは郵便住所グリッドのテキスト
  A=それ\0,4
  B=それ\0,5
  「A={A}{~}B={B}」を言う

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