2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語プログラミング言語Mind9でSQLite3に接続しグリッドビュー表示(その2)

2
Last updated at Posted at 2026-08-14

日本語プログラミング言語Mind9でSQLite3に接続しグリッドビュー表示するプログラム(その2)です。

変更点

選択、検索、追加、更新、削除の機能を付けました。
汎用機能をライブラリとして分割しました。
トランザクション処理、エラー処理などは未実装です。

必要環境

OS:Windows,コンパイラー:Mind9。 コンパイル・実行にはMind9 基本セット(無料)(GUIライブラリ評価版が付属)が必要です。詳しくはMind9のダウンロードサイトをご覧ください。

実行画面

SQLite03.jpg

ソースコード

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」を 参照し  返す。

次回は、できればトランザクション処理、エラー処理機能を追加します。

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?