CSVデータを追加・修正します

データ表を使ってCSVデータを追加・修正します。CSV型データはエクセルや売上、会計などのソフトでそのまま読み込めるので使えると便利です。

プロデルではデータ表という表形式のコンポーネントが用意されているのでそのままデータを追加したり修正することが出来るようになります。前回作成したプログラムの画面に保存するためのボタンを追加します。

前今回はメイン画面にボタンを追加してデータを追加して保存できるようにします。

-----ここから

データというデータ表を作る
データに{「名前」、「年齢」 、「住所」 、「メモ」}という列を加える
データへ「年齢表.CSV」から読み込む

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

メイン画面とは
  ウィンドウを継承する
  
  はじめの手順
    初期化する
    表部品1のデータ表をデータに変える
  終わり
  初期化する手順
ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
この実質大きさを{477,329}に変える
この内容を「表部品のテスト」に変える
このドラッグドロップを○に変える
初期化開始する
ボタン1というボタンを作る
その位置と大きさを{404,293,61,24}に変える
その内容を「ボタン1」に変える
その移動順を3に変える
表部品1という表部品を作る
表部品1を初期化開始する
その位置と大きさを{12,12,453,271}に変える
その移動順を2に変える
その位置固定方向を「右+左+下+上」に変える
表部品1を初期化終了する
初期化終了する
終わり

  開いた時の手順
    行一覧は、表部品1の行一覧
    番号を1から表部品1の行数まで増やしながら繰り返す
      もし行一覧(番号)の新しいなら、繰り返しを続ける
      行一覧(番号)の見出しは、番号
    繰り返し終わり
  終わり

ボタン1がクリックされた時の手順
データを「年齢表.CSV」へ保存する
終わり

終わり

-----ここまで

今回作成したサンプルを鵜退かしてみました。

CSVファイルを部品表に読み込む

プロデルの表部品の中にある表部品のサンプルプログラムに手を加えて CSVファイルの内容を読み込むように変えます。読み込むファイルは前回使用した 「年齢表.CSV」 です。

プロデルのサンプルにある表部品のサンプルをファイル読み込みに変更します。

---ここから

データというデータ表を作る
データに{「名前」、「年齢」 、「住所」 、「メモ」}という列を加える
データへ「年齢表.CSV」から読み込む

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

メイン画面とは
  ウィンドウを継承する
  
  はじめの手順
    初期化する
    表部品1のデータ表をデータに変える
  終わり
  初期化する手順
ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
この内部領域大きさを{442、258}に変える
この内容を「表部品のテスト」に変える
このドラッグドロップを○に変える
表部品1という表部品を作る
表部品1を初期化開始する
その位置と大きさを{12、12、418、234}に変える
その移動順を2に変える
その位置固定方向を「右+左+下+上」に変える
表部品1を初期化終了する
  終わり

  開いた時の手順
    行一覧は、表部品1の行一覧
    番号を1から表部品1の行数まで増やしながら繰り返す
      もし行一覧(番号)の新しいなら、繰り返しを続ける
      行一覧(番号)の見出しは、番号
    繰り返し終わり
  終わり
終わり

―--ここまで

実行するとこんな感じになります。

プロデルでCSVファイルを読み込みます。

プロデルでCSVファイルを読み込みます。

プロデルのサンプルにあるCSVファイルの読み混みを少しだけいじりました。

前提条件として「年齢表」という名前のCSVファイルを作ります。

プロデルのサンプルにある「data.csv」の名前を変えて作ったものです。住所を追加してみましたが内容はそのままでも構いません。

name,age,add,else
山田次郎,56 , ,
河野雄太,82 , ,
高橋裕香,52 , ,
佐藤美里,90 , ,

サンプルプログラム( 年齢表.CSV と同じフォルダに保存してください。)


---ここから

デ ータ表を作ってデータとする
データへ「年齢表.CSV」から読み込む
データの一覧のすべての【行要素】についてそれぞれ繰り返す
行要素を{名前,年齢,住所}とみなす
「お名前は、[名前]さんです。年齢は[年齢]歳です」を報告する
 繰り返し終わり

―--ここまで

行要素の3つに {名前,年齢,住所} という変数名を付けます。

実行するとこのような結果が得られます。

プロデル入門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行目に映す事で、画面を表示して待機する事で画面に処理の主導権を渡すようになります。(ボタンを押さないと動かない状態にする)

次回に続きます。

プロデルで画面作成・入門ゼロ

プロデルをインストールしてから起動すると、このような画面が最初に出てくる

起動する

右上の方に注目

画面を作る01

ここで赤い✖の左にあるボタンを押すと

メイン画面の作成

メイン画面と記入されたものが出てくる。名前を変えたければ自由に変更できる

最初の画面

そのまま改行すると何も入っていないメイン画面が作成される。

張り付ける部品を選ぶ

張り付ける部品を左側のパーツから選ぶ

張り付ける部品を選ぶ

部品を選んだら画面の中に置く

部品を張り付ける

画面の左上にある「無題」と書かれているタグを選ぶと、置いた画面を表示するプログラムが出来ている。

画面のプログラムが出来ている

上部にある実行(緑の三角)を押す

実行してみる

プログラムが動く

画面が表示された

こんな感じでプログラムを作ることが出来る

テキスト項目を変えたり加えたりするとこんな感じになる

ちょいと思う事があって

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

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

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

閑話休題・プロデルで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に変える

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

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

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

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