Database マニュアル · Chapter 1

Database チュートリアル開始

本チュートリアルは、QMachineStudio に同梱されている SampleProject/Database/DB_Sqlite プロジェクトを最初から最後まで辿りながら、データベース機能を学ぶ構成です。

サンプルは SQLite ひとつで動く小さなツールで、オーダー作業履歴(order_history テーブル)を画面で登録 · 修正 · 削除します。本マニュアルに登場するコードはすべて、このプロジェクトの RunScript/*.xms から抜粋しています。

サンプルプロジェクトの場所

SampleProject/Database/DB_Sqlite/
├── DB_Sqlite.xmp                  # プロジェクトファイル(DatabaseOption を含む)
├── XDatabase/
│   ├── connections.json           # 接続設定(DB Studio と同期)
│   └── LocalDB.db                 # 実体の SQLite ファイル(自動生成)
└── RunScript/
    ├── Data.xms                   # DB_* 関数 (Open/Refresh/Insert/Update/Delete/...)
    ├── ViewRun.xms                # ボタンハンドラ (OnOpenClick / OnAddClick / ...)
    ├── ModifyDlg.xms              # レコード編集ダイアログ
    └── (その他 Init / Mon / Event / ViewMain ...)

画面構成 — ViewRun

ランページ(ViewRun)は 6 つのボタンと 1 つの XDataGrid で構成されます。

ボタン呼び出し関数動作
OpenData::DB_Open()接続 +(空なら)サンプル 5 件挿入 + DataGrid 更新
AddData::DB_InsertSample()新規オーダーを 1 件 INSERT
UpdateData::DB_UpdateSelected()選択行を完了(end_time / result)処理
ModifyData::DB_OpenModifyDlg()ダイアログを表示し自由編集 → OK で UPDATE
DeleteData::DB_DeleteSelected()選択行を 1 件削除
CloseData::DB_Close()接続終了 + DataGrid を空に

上部のラベル(Data::DbStatusText● OPEN / ● CLOSED)が現在の接続状態を表示します。

中心キーワード — DB["接続名"]

スクリプトでは、データベースは常に接続名でアクセスします。サンプルの接続名は local ひとつです。

// 接続を開く
DB["local"].Open();
 
// SELECT して RowCount / GetRowArray で結果を読む
DB["local"].RunSqlSelect("SELECT id, order_no, menu_name FROM order_history ORDER BY id ASC");
int rows = DB["local"].RowCount;
 
// 単一値
int total = DB["local"].RunSqlScalarInt("SELECT COUNT(*) FROM order_history");
 
// パラメータバインディング(SQL インジェクション防止)
array p[] = {""};  p.Clear();
p.Add("O1234"); p.Add("Latte"); p.Add(SYS.DateTimeString);
DB["local"].RunSqlQueryParam(
    "INSERT INTO order_history(order_no, menu_name, start_time) VALUES(?,?,?)",
    p);
 
// トランザクション
DB["local"].BeginTransaction();
DB["local"].RunSqlQueryParam(/* ... */);
if( DB["local"].Commit() == false ) DB["local"].Rollback();
 
// 接続終了
DB["local"].Close();

IO["..."]MOTOR["..."] と同じ「名前で引く」 慣用句で、初めて触れても違和感がありません。

学習の流れ

テーマ扱うサンプルコード
2接続設定 — connections.json とプロジェクトオプションDB_Sqlite.xmp DatabaseOption
3テーブルスキーマ — order_historyDB_InsertInitialSamples
4DB Studio の SQL · Data タブで動作検証
5INSERT · UPDATE — パラメータバインディングとトランザクションDB_InsertSample · DB_UpdateSelected
6SELECT — RowCount · GetRowArray · RunSqlScalarIntDB_Refresh
7DataGrid · ModifyDlg バインディングDispData · SelectIndex · Edit*
8ボタンイベント — ViewRun ハンドラOnOpenClick 他 5 つ
9バックアップ · WAL · 運用チェックポイントDatabaseOption.BackupFolder

サンプルを動かしながら結果を確認しつつ章を進めることを推奨します。