В общем есть код:
Код: Выделить всё
callkeeper::callkeeper(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.toolButton_Insert, SIGNAL(clicked()), this, SLOT(button_add_clicked()));
db = QSqlDatabase::addDatabase("QSQLITE", "connection");
db.setDatabaseName(qApp->applicationDirPath() + "/database.sqlite");
if (!db.open()) {
QMessageBox::critical(this, this->windowTitle(), tr("База данных не может быть открыта."));
return;
}
if (!createDatabase())
return;
connectToTableView();
}
void callkeeper::button_add_clicked()
{
DialogAddCall dialog(this);
if (dialog.exec() != QDialog::Accepted)
return;
QString date = dialog.getDate();
QString time = dialog.getTime();
int type = dialog.getTypeCall();
QString fromto = dialog.getFromTo();
QString comment = dialog.getComment();
if (fromto.isEmpty()) {
QMessageBox::information(this, this->windowTitle(), tr("Не заполнено поле \"от кого/кому\"."));
button_add_clicked();
}
QSqlQuery query("", db);
QString sql = "INSERT INTO calls VALUES(NULL, '" + date + "', '" + time + "', "
"" + QString::number(type) + ", '" + fromto + "', '" + comment + "');";
if (!query.exec(sql)) {
QMessageBox::critical(this, this->windowTitle(), tr("Не возможно выполнить запрос."));
return;
}
connectToTableView();
}
void callkeeper::connectToTableView()
{
QSqlQuery query("SELECT `date_call`, `time_call`, `type_call`, `from_call`, `comment_call` FROM calls;",QSqlDatabase::database("connection"));
model = new QStandardItemModel( ui.tableView );
if (!query.exec()) {
QMessageBox::critical(this, this->windowTitle(), tr("Не возможно выполнить запрос."));
return;
}
int rows = query.numRowsAffected();
model->insertColumns(0, 5);
model->insertRows(0, rows);
model->setHeaderData(0, Qt::Horizontal, tr("Дата"));
model->setHeaderData(1, Qt::Horizontal, tr("Время"));
model->setHeaderData(2, Qt::Horizontal, tr("Входящий/Исходящий"));
model->setHeaderData(3, Qt::Horizontal, tr("От кого/Кому"));
model->setHeaderData(4, Qt::Horizontal, tr("Комментарий"));
query.first();
for (int i = 0; i < rows; ++i) {
model->setData(model->index(i, 0), query.value(0).toString());
model->setData(model->index(i, 1), query.value(1).toString());
model->setData(model->index(i, 2), query.value(2).toString());
model->setData(model->index(i, 3), query.value(3).toString());
model->setData(model->index(i, 4), query.value(4).toString());
query.next();
}
ui.tableView->setModel(model);
ui.tableView->setSortingEnabled(true);
ui.tableView->resizeColumnsToContents();
}
bool callkeeper::createDatabase()
{
QSqlQuery query(QSqlDatabase::database("connection"));
QString sqlQuery = "CREATE TABLE IF NOT EXISTS calls(i integer primary key autoincrement, date_call varchar, time_call varchar, type_call integer, from_call varchar, comment_call varchar);";
if (!query.exec(sqlQuery)) {
QMessageBox::critical(this, this->windowTitle(), tr("Не возможно создать таблицу."));
return false;
}
return true;
}А проблема в том что таблица создается а при добавлении записей добавляется только одно запись и все, после завершения программы база становится пустой, как будтто в неё ниче и не добавляли. Помогите разобраться плз...