日本語プログラミング言語Mind9でSQLite3に接続しグリッドビュー表示するプログラム(その2)です。
変更点
選択、検索、追加、更新、削除の機能を付けました。
汎用機能をライブラリとして分割しました。
トランザクション処理、エラー処理などは未実装です。
必要環境
OS:Windows,コンパイラー:Mind9。 コンパイル・実行にはMind9 基本セット(無料)(GUIライブラリ評価版が付属)が必要です。詳しくはMind9のダウンロードサイトをご覧ください。
実行画面
ソースコード
SQLite3_02.src
"SQLite3_Tool.src"を コンパイル。
データベース名は 「./sample01_5.db」。
ユーザテーブル名は "users"。
ユーザテーブルの定義は 「id INTEGER PRIMARY KEY , name TEXT, age INT」。
ユーザテーブル項目は 「id, name, age」。
グリッドビューのフレームは ID。
情報板とボタンのフレームは ID。
情報板配置は ID。
※情報板の表示項目
IDエントリーは ID。
氏名エントリーは ID。
年齢エントリーは ID。
id文字列は 文字列実体。
氏名文字列は 文字列実体。
年齢文字列は 文字は列実体。
サンプルデータベース作成とは (・ → ・)
データベース名に SQLITE3データベース接続する
ユーザテーブル名を ユーザテーブルの定義で テーブルが無ければ新規作成する
※サンプルデータ追加する id をユニーク制約していませんので、実行のたびに追加されます。
ユーザテーブル名の 「name, age」に 「"磯野波平",30」を テーブルにデータを追加する
ユーザテーブル名の 「name, age」に 「'磯野ふね',50」を テーブルにデータを追加する
ユーザテーブル名の 「name, age」に 「'磯野かつお',11」を テーブルにデータを追加する
ユーザテーブル名の 「name, age」に 「'磯野ワカメ',9」を テーブルにデータを追加する
ユーザテーブル名の 「name, age」に 「'ふぐ田マスオ',28」を テーブルにデータを追加する
ユーザテーブル名の 「name, age」に 「'ふぐ田サザエ',24」を テーブルにデータを追加する
ユーザテーブル名の 「name, age」に 「"ふぐ田タラオ",3」を テーブルにデータを追加する
すべての保留イベントを処理する
SQLITE3データベースクローズする。
グリッドビュー表示は (・ → ・) ※ 見出しの中に空白や、,[]{}などTCLで意味がある記号を含まないこと
「id ID 50, name 名前 200, age 年齢 50」を 項目をグリッドビュー表示する。
グリッドビューにデータ表示するとは (・ → ・)
※ 検索結果をループでグリッドビューに追加
データベース名を 「SELECT id, name, age FROM users」を SQLでSELECTしたデータをグリッドビューに表示する 。
選択したデータを情報板に表示するとは (・ → ・)
グリッドビューの一行を選択する
1 列目のデータをリストから取得し IDエントリーに 先行入力文字列を設定
2 列目のデータをリストから取得し 氏名エントリーに 先行入力文字列を設定
3 列目のデータをリストから取得し 年齢エントリーに 先行入力文字列を設定
。
データ検索は
SQL文は 文字列実体
イベント引数を捨て
idエントリーの 入力文字列を参照し id文字列に 入れる
氏名エントリーの 入力文字列を参照し 氏名文字列に 入れる
年齢エントリーの 入力文字列を参照し 年齢文字列に 入れる
「id文字列=」と 表示し id文字列を 表示する
「氏名文字列=」と 表示し 氏名文字列を 表示する
「SELECT id, name, age FROM users WHERE 」を SQL文に 入れる
id文字列が 空列?
ならば
「name = 」を SQL文に 追加する
氏名文字列を 引用符で挟んで SQL文に 追加する
さもなければ
「id = 」を SQL文に 追加する
id文字列を SQL文に 追加する
つぎに
データベース名を SQL文で SQLでSELECTしたデータをグリッドビューに表示する。
全件表示は
イベント引数を捨て
グリッドビューにデータ表示し。
データ選択は
イベント引数を捨て
選択したデータを情報板に表示する。
データ追加は
追加データ文字列は 文字列実体
イベント引数を捨て
氏名エントリーの 入力文字列を参照し 氏名文字列に 入れる
年齢エントリーの 入力文字列を参照し 年齢文字列に 入れる
氏名文字列を 引用符で挟んで 追加データ文字列に 入れる
「,」を 追加データ文字列に 追加する
年齢文字列を 追加データ文字列に 追加する
データベース名に SQLITE3データベース接続する
ユーザテーブル名の 「name, age」に 追加データ文字列を テーブルにデータを追加する
グリッドビューにデータ表示し
。
データ削除は
SQL文は 文字列実体
イベント引数を捨て
idエントリーの 入力文字列を参照し id文字列に 入れる
id文字列が 空列?
ならば 終わり
つぎに
「DELETE FROM users WHERE id = 」を SQL文に 入れる
id文字列を SQL文に 追加する
データベース名に SQLITE3データベース接続する
SQL文で 結果なしSQL実行する
グリッドビューにデータ表示し 。
データ更新は
SQL文は 文字列実体
イベント引数を捨て
idエントリーの 入力文字列を参照し id文字列に 入れる
氏名エントリーの 入力文字列を参照し 氏名文字列に 入れる
年齢エントリーの 入力文字列を参照し 年齢文字列に 入れる
id文字列が 空列?
ならば 終わり
つぎに
「UPDATE users SET name = 」を SQL文に 入れる
氏名文字列を 引用符で挟んで SQL文に 追加する
「, age = 」を SQL文に 追加する
年齢文字列を SQL文に 追加する
「 WHERE id = 」を SQL文に 追加する
id文字列を SQL文に 追加する
データベース名に SQLITE3データベース接続する
SQL文で 結果なしSQL実行する
グリッドビューにデータ表示する。
情報板を表示とは (・ → ・)
情報板とボタンのフレームで 14桁の エントリーのIDを取得し IDエントリーに 入れる
情報板とボタンのフレームで 14桁の エントリーのIDを取得し 氏名エントリーに 入れる
情報板とボタンのフレームで 14桁の エントリーのIDを取得し 年齢エントリーに 入れる
「{MSP 明朝} 14」を IDエントリーに フォントを設定し
「{MSP 明朝} 14」を 氏名エントリーに フォントを設定し
「{MSP 明朝} 14」を 年齢エントリーに フォントを設定し
IDエントリーと 氏名エントリーと 年齢エントリーを 3個で これらを有効化し
IDエントリーと 氏名エントリーと 年齢エントリーを 3個で これらの並べ配置のIDを取得し 情報板配置に 入れ
上から下を 情報板配置に 並べ方向を設定し
北寄せを 情報板配置に 寄せを設定
5ピクセルを 情報板配置に パディングの幅を設定する
5ピクセルを 情報板配置に パディングの高さを設定する
情報板配置を 配置し。
ボタン文字群は 文字列定数配列 「全件表示」、「 選 択 」、「 検 索 」、「 追 加 」、「 更 新 」、「 削 除 」。
ボタン数は 定数 ボタン文字群の 要素数。
全件表示の実行情報は 全件表示の 実行情報。
選択の実行情報は データ選択の 実行情報。
検索の実行情報は データ検索の 実行情報。
追加の実行情報は データ追加の 実行情報。
更新の実行情報は データ更新の 実行情報。
削除の実行情報は データ削除の 実行情報。
ボタン群は ボタン数の ID。
操作ボタンを配置とは
ボタン配置は ID
情報板とボタンのフレームで ボタン数で ボタンのIDを複数取得し ボタン群に 複数のIDを配列に格納
ボタン数 回数指定し
回数で 選択する
全件表示の実行情報、
選択の実行情報、
検索の実行情報、
追加の実行情報、
更新の実行情報、
削除の実行情報
選択終わり
ボタン群(回数)に イベント処理登録し
ボタン文字群(回数)を ボタン群(回数)に テキスト設定する
ボタン群(回数)を 有効化する
繰り返す
ボタン群から 配列から複数のIDを取り出し ボタン数で
これらの並べ配置のIDを取得し ボタン配置に 入れる
上から下を ボタン配置に 並べ方向を設定し
10ピクセルを ボタン配置に パディングの幅を設定する
ボタン配置を 配置する
すべての保留イベントを処理する。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
メインとは
フレーム配置全体は ID
※ コンソールを開く
「{MS ゴシック} 12」を TkDefaultFontに フォントマクロを置換し
SQLITE3使用開始する
サンプルデータベース作成
メインウィンドウで フレームのIDを取得して有効化し グリッドビューのフレームに 入れる
グリッドビューのフレームで グリッドビュー名を設定する
メインウィンドウで フレームのIDを取得して有効化し 情報板とボタンのフレームに 入れる
グリッドビュー表示し
情報板を表示し
操作ボタンを配置し
グリッドビューのフレームと 情報板とボタンのフレームと 2個で これらの並べ配置のIDを取得し フレーム配置全体に 入れる
左から右を フレーム配置全体に 並べ方向を設定し
フレーム配置全体を 配置し
グリッドビューにデータ表示し
「メインの終り」で このメッセージでスタック検査し
。
※終り※
ライブラリソース
SQLite3_Tool.src
引用符で挟むとは (文字列 → 文字列)
編集文字列は 文字列実体
「'」を 編集文字列に 入れる
編集文字列に 追加する
「'」を 編集文字列に 追加する
編集文字列を 返す。
SQLITE3使用開始とは (・ → ・)
「package require sqlite3」を 評価する。
SQLITE3データベース接続は (データベース名 → ・)
スクリプト文は 文字列実体
Wデータベース名は 文字列
Wデータベース名に 入れる
「sqlite3 db "」を スクリプト文に 入れる
Wデータベース名 スクリプト文に 追加し
「"」を スクリプト文に 追加し
スクリプト文を 評価する。
SQLITE3データベースクローズは (・ → ・)
「db close」を 評価する。
結果なしSQL実行するとは (SQL文 → ・)
SQL文は 文字列実体
SQL文に 入れる
「db eval {」に SQL文を 合成し 「}」を 合成し 評価する。
テーブルが無ければ新規作成するとは (テーブル名、テーブル定義 → ・)
Wテーブル名は 文字列
Wテーブル定義は 文字列実体 長さ 1024
WSQL文は 文字列実体 長さ 1024
Wテーブル名と Wテーブル定義に 入れる
「CREATE TABLE IF NOT EXISTS 」を WSQL文に 入れる
Wテーブル名を WSQL文に 追加する
「(」を WSQL文に 追加する
Wテーブル定義を WSQL文に 追加する
「)」を WSQL文に 追加する
WSQL文を 結果なしSQL実行する。
テーブルにデータを追加するとは (テーブル名、項目名、設定内容 → ・)
Wテーブル名は 文字列実体
W項目名は 文字列実体
W設定内容は 文字列実体
Wテーブル名と W項目名と W設定内容に 入れる
「db eval {INSERT INTO 」と Wテーブル名を 合成し 「 (」を 合成し
W項目名を 合成し 「) VALUES (」を 合成し
W設定内容を 合成し
「)}」を 合成し 評価する。
グリッドビューフレーム名は 文字列実体。
グリッドビュー名は 文字列実体。
グリッドビュー名設定とは (フレームID → ・)
ウィジェット名を得て グリッドビューフレーム名に 入れる
グリッドビューフレーム名を グリッドビュー名に 入れる
".grdvw001"を グリッドビュー名に 追加する。
項目をグリッドビュー表示とは (項目文字列 → ・)
番号は 変数
項目文字列は 文字列実体 長さ 512
項目名は 20個の 文字列実体 長さ 10
項目見出は 20個の 文字列実体 長さ 20
項目幅は 20個の 文字列実体 長さ 3
項目名群は 文字列実体 長さ 220
命令文は 文字列実体 長さ 200
フレーム名は 文字列実体 長さ 10
項目文字列に 入れる
グリッドビューフレーム名を フレーム名に 入れる
項目名群を クリアする
番号を クリアする
ここから
項目文字列が 空列?
ならば 打ち切り
つぎに
番号が 20 以上
ならば 打ち切り
つぎに
番号を 一つ増加する
項目文字列から 単語切り出し 項目名(番号)に 入れる
項目文字列から 単語切り出し 項目見出(番号)に 入れる
項目文字列から 単語切り出し 項目幅(番号)に 入れる
項目名(番号)を 項目名群に 追加する
" "を 項目名群に 追加する
繰り返す
※ 縦スクロール付きのグリッドビューを表示する
※ グリッドビューのフレームを配置し
「pack 」に フレーム名を 合成し 「 -fill both」を 合成し 評価する
「ttk::treeview 」に グリッドビュー名を 合成し 「 -columns {」を 合成し 項目名群を 合成し
「} -show headings -yscrollcommand "」を 合成し フレーム名を 合成し 「.vsb set"」を 合成し 評価する
「ttk::scrollbar 」に フレーム名を 合成し 「.vsb -orient vertical -command "」を 合成し
グリッドビュー名を 合成し 「 yview"」を 合成し 評価する
番号 回数指定し
※ 各列の見出しを設定
グリッドビュー名と 「 heading 」を 合成し 項目名(回数)を 合成し
「 -text "」を 合成し 項目見出(回数)を 合成し 「"」を 合成し 評価する
※ 各列の幅を設定
グリッドビュー名を 命令文に 入れる
「 column 」を 命令文に 追加する
項目名(回数)を 命令文に 追加する
「 -width 」を 命令文に 追加する
項目幅(回数)を 命令文に 追加する
※ 命令文を 表示する 改行する
命令文を 評価する
繰り返す
「pack 」と フレーム名を 合成し 「.vsb -side right -fill y」を 合成し 評価する
「pack 」と グリッドビュー名を 合成し 「 -side left -fill both」を 合成し 評価する
すべての保留イベントを処理する。
グリッドビューをクリアするとは (・ → ・)
グリッドビュー名と 「 delete [」を 合成し
グリッドビュー名を 合成し 「 children {}]」を 合成し 評価する。
SQLでSELECTしたデータをグリッドビューに表示するとは (データベース名、SQL文 → ・)
Wデータベース名は 文字列
SQL文は 文字列実体 長さ 256
作業文字列は 文字列実体 長さ 256
切り出し単語は 文字列実体
抽出文字列は 文字列実体 長さ 256
実行文は 文字列実体 長さ 512
Wデータベース名と SQL文に 入れる
グリッドビューをクリアし
SQL文を 作業文字列に 入れる
作業文字列から 単語切り出し 切り出し単語に 入れる
切り出し単語が "SELECT"と 等しい文字列?
でなければ 終わり
つぎに
抽出文字列を クリアする
ここから
作業文字列が 空列?
ならば 終わり
つぎに
作業文字列から 単語切り出し 切り出し単語に 入れる
切り出し単語が "FROM"と 等しい文字列?
ならば 打ち切り
つぎに
抽出文字列に " $"を 追加し
抽出文字列に 切り出し単語を 追加し
繰り返す
Wデータベース名に SQLITE3データベース接続する
「db eval {」を 実行文に 入れる
SQL文を 実行文に 追加する
「 } {」を 実行文に 追加する
グリッドビュー名を 実行文に 追加する
「 insert {} end -values [list」を 実行文に 追加する
抽出文字列を 実行文に 追加する
「]}」を 実行文に 追加する
「set results [list]」を 評価する
実行文を 評価する
すべての保留イベントを処理する
SQLITE3データベースクローズする。
グリッドビューの一行を選択するとは (・ → ・)
「set sel [」に グリッドビュー名を 合成し 「 selection]」を 合成し 評価する
「set values [」に グリッドビュー名を 合成し 「 item $sel -values]」を 合成し 評価する。
データをリストから取得とは (データ個数 → データ個数の 文字列)
データ個数は 変数
番号は 文字列実体
データ文字列は 100個の 文字列実体
データ個数に 入れる
データ個数 回数指定し
回数から 一つ引いて 文字列変換し 番号に 入れる
「set data [lindex $values 」と 番号を 合成し 「]」を 合成し 評価する
「data」を 参照し データ文字列(回数)に 入れる
データ文字列(回数)を 返す
繰り返す。
列目のデータをリストから取得とは (列番号 → 文字列)
番号は 文字列実体
一つ引いて 文字列変換し 番号に 入れる
「set data [lindex $values 」と 番号を 合成し 「]」を 合成し 評価する
「data」を 参照し 返す。
次回は、できればトランザクション処理、エラー処理機能を追加します。
