crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 23:55