crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Не обновляется модель QsqlRelationTableModel
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
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);

}


Заранее благодарю за ответы!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 22.4.2021, 23:44