Я вставляю/обновляю таблицу базы данных из приложения Qt, используя QSqlTableModel
методы setData
, submitAll
и commit
. Для целей ведения журнала мне нужно записать соответствующие операторы SQL. Как я могу это сделать? (Я смотрю на QSqlTableModel::query()
, но кажется, что он возвращает только SELECT)
Вот упрощенная версия того, что я делаю.
QSqlTableModel *_dataTableModel = qobject_cast<QSqlTableModel*>(dataTableView->model());
_dataTableModel->setData(item, value);
_dataTableModel->database().transaction();
_dataTableModel->submitAll();
_dataTableModel->database().commit()
QSqlQuery _currentQuery = _dataTableModel->query();
qDebug() << _currentQuery.lastQuery();
Последняя строка всегда печатает SELECT, даже когда я делаю обновление или вставку.
Обновить
Вот самодостаточный фрагмент кода. Настройка такова, что у меня есть пользовательский интерфейс с QTableView
и QPushButton
. clicked()
сигнал кнопки фиксируется в слоте addNewRow()
и произвольное значение вставляется в первую ячейку. Я печатаю результат lastQuery()
, ожидая, что это будет оператор вставки, но это оператор SELECT для данной таблицы. Что я делаю не так?
main.cpp
{
QApplication a(argc, argv);
test1 w;
// connect to and open database
w.setDataTable("MY_TEST_TABLE");
w.show();
return a.exec();
}
test1.h
public:
void setDataTable(QString dataTableName);
private slots:
void addNewRow();
test1.cpp
void test1::setDataTable( QString dataTableName )
{
QSqlTableModel *tableModel = new QSqlTableModel();
tableModel->setTable(dataTableName);
tableModel->select();
ui.tableView->setModel(tableModel);
}
void test1::addNewRow()
{
QSqlTableModel *tableModel = qobject_cast<QSqlTableModel*>(ui.tableView->model());
if(!tableModel->insertRow(tableModel->rowCount())) {
return;
}
tableModel->setData(tableModel->index(0, 0), QVariant("123345"));
tableModel->database().transaction();
if(!tableModel->submitAll()) {
return;
}
if (!tableModel->database().commit()) {
return;
}
qDebug() << tableModel->query().lastQuery();
}
exec()
, а затемexecutedQuery()
. - person fortytwo   schedule 03.01.2014