Здравствуйте, гость ( Вход | Регистрация )
Mira | Дата 27.7.2015, 18:16 |
Проблема решилась: оказалось postgress хранит неведомо где старые названия полей, которые и выдает в модель. Сделала резервную копию базы, удалила ее нафиг и создала новую из резервной копии. Теперь названия полей в модель отдаются корректные. | |
Mira | Дата 27.7.2015, 17:35 |
Проблема сдвинулась с мертвой точки, выяснилось что модель не пишется в базу данных потому что при выполнении UPDATE WHERE idSensors= Он не может найти это поле. Конечно не может - поле уже давно переименовано, и в проге не упоминается вообще, откуда он выдергивает это старое название - загадка? (пересборка и чистка сборочного каталога не возымели эффекта) Откуда он берет эти названия полей для модели? |
|
Mir | Дата 23.7.2015, 16:18 |
Добрый день! Прошу не судить строго за возможно элементарную ошибку - Данные из базы выводятся в виджеты (через модель и мэппер) корректно, редактируются, но изменения не фиксируются (при переходе к следующей записи и возврате к первой - изменения пропадают) Собственно код(переделываю стандартный пример): Раскрывающийся текст #include <QtWidgets> #include <QtSql> #include <QSqlDatabase> #include "window.h" #include <QDebug> #include <QSqlError> //! [Set up widgets] Window::Window(QWidget *parent) : QWidget(parent) { setupModel(); nameLabel = new QLabel(tr("Sensor Name:")); nameEdit = new QLineEdit(); topLabel = new QLabel(tr("Top lvl:")); topEdit = new QLineEdit(); nextButton = new QPushButton(tr("&Next")); previousButton = new QPushButton(tr("&Previous")); mapper = new QDataWidgetMapper(this); mapper->setModel(SensorsMod); mapper->addMapping(nameEdit, SensorsMod->fieldIndex("name")); mapper->addMapping(topEdit, SensorsMod->fieldIndex("top")); connect(previousButton, SIGNAL(clicked()), mapper, SLOT(toPrevious())); connect(nextButton, SIGNAL(clicked()), mapper, SLOT(toNext())); connect(mapper, SIGNAL(currentIndexChanged(int)), this, SLOT(updateButtons(int))); QGridLayout *layout = new QGridLayout(); layout->addWidget(nameLabel, 0, 0, 1, 1); layout->addWidget(nameEdit, 0, 1, 1, 1); layout->addWidget(previousButton, 0, 2, 1, 1); layout->addWidget(topLabel, 1, 0, 1, 1); layout->addWidget(topEdit, 1, 1, 2, 1); layout->addWidget(nextButton, 1, 2, 1, 1); setLayout(layout); mapper->toFirst(); } void Window::setupModel() { db = QSqlDatabase::addDatabase("QPSQL", "AstroDB"); db.setHostName("localhost"); db.setDatabaseName("AstroDB"); db.setUserName("postgres"); db.setPassword("admin"); if (!db.open()) { QMessageBox::critical(0, tr("Cannot open database"), tr("Unable to establish a database connection.\n" ), QMessageBox::Cancel); return; } SensorsMod = new QSqlRelationalTableModel(this,db); SensorsMod->setTable("sensors"); SensorsMod->setEditStrategy(QSqlTableModel::OnFieldChange); SensorsMod->select(); } void Window::updateButtons(int row) { previousButton->setEnabled(row > 0); nextButton->setEnabled(row < SensorsMod->rowCount() - 1); } Заранее благодарю за ответы! |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 25.4.2024, 2:56 |