やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

QSqlTableModelを使ってレコード追加してみた

 QSqlRecordを渡してinsertできた。

成果物

github.com

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 2018-06-27
  • Qt 5.7.1

前回

コード抜粋

  1. DB作成
  2. テーブル作成
  3. モデル作成
  4. モデルからinsert

1. DB作成

QSqlDatabase _db = QSqlDatabase::addDatabase("QSQLITE", "Memo");
QString dbPath = QDir(QApplication::applicationDirPath()).filePath("Memo.sqlite3");
_db.setDatabaseName(dbPath);

2. テーブル作成

QSqlDatabase db = QSqlDatabase::database("Memo");
QSqlQuery query(db);
query.exec(tr("create table Memo(id INTEGER PRIMARY KEY AUTOINCREMENT, Memo TEXT, Created TEXT)"));
query.exec(tr("insert into Memo(Memo,Created) values('メモ内容だよ', '1999-12-31 23:59:59')"));
query.exec(tr("select * from Memo"));
while (query.next()) {
    qDebug() << query.value(0) << "|" << query.value(1) << "|" << query.value(2);
}

3. モデル作成

QSqlTableModel model(nullptr, db);
qDebug() << model.tableName();
qDebug() << "columnCount: " << model.columnCount();

4. モデルからinsert

QSqlField fMemo("Memo");
fMemo.setValue("追記したメモ");

QSqlField fCreated("Created");
fCreated.setValue("1999-12-31 23:59:59");

QSqlRecord record;
record.append(fMemo);
record.append(fCreated);

model.insertRecord(0, record);
model.submitAll();

所感

 Fieldに関してはテーブル定義がすでにあるはずなので、情報を取得できそうだが。