crossplatform.ru

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

potkin
  опции профиля:
сообщение 14.8.2010, 23:01
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


users.h
private:
    Ui::Users *ui;
    Glav gl;
    QSqlDatabase db;
    QSqlTableModel *model;


users.cpp
1.Отображение данных.
    db = QSqlDatabase::addDatabase(VarClass::Server);
    db.setHostName(VarClass::HostName);
    db.setDatabaseName(VarClass::DatabaseName);
    db.setUserName(VarClass::UserName);
    db.setPassword(VarClass::Passwor);
    if(db.open())
    {
        model = new QSqlTableModel(this, db);
        model->setTable("users");
        model->setHeaderData(0, Qt::Horizontal, "id");
        model->setHeaderData(1, Qt::Horizontal, "firstname");
        model->setHeaderData(2, Qt::Horizontal, "lastname");
        model->select();
        ui->tVUsers->setModel(model); //Это таблица "tableView"
        ui->tVUsers->resizeColumnsToContents();
        //db.close();
    }

поле id int not nul auto_increment, primary key (id)

2.Сохранение данных
    if(db.open())
    {
        model->submitAll();
    }


Проблема: изменяю записи и нажимаю баттон "Сохранить". Сохраняет все записи, кроме какой-то одной.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 15)
Litkevich Yuriy
  опции профиля:
сообщение 15.8.2010, 2:20
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а что возвращает
model->submitAll();
model->lastError()
?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 15.8.2010, 10:46
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 15.8.2010, 2:20) *
а что возвращает
model->submitAll();
model->lastError()
?


Вот что:
Цитата
The database reported an error: Lost connection to MySQL server during query QMYSQL3: Unable to reset statement


Что это может быть ???

Сообщение отредактировал potkin - 15.8.2010, 10:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 25.8.2010, 16:45
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть таблица в БД "answer", которая содержит 10 полей, надо отобразить 2-а из них.
Делаю так:
    model = new QSqlRelationalTableModel();
    model->setTable("answer");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    if (model->select())
    {
       model->setHeaderData(0, Qt::Horizontal, tr("AnswerRU"));
       model->setHeaderData(1, Qt::Horizontal, tr("CorrectnessRU"));

       ui->tableView->setModel(model);
       ui->tableView->resizeColumnsToContents();
    }
    else
    {
        model->database().rollback();
        QMessageBox::warning(this, tr("Cached Table"), tr("The database reported an error: %1").arg(model->lastError().text()));
    }

Отображает все 10 полей.

Сообщение отредактировал potkin - 25.8.2010, 16:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 25.8.2010, 18:26
Сообщение #5


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Надо показать 2 колонки из 10? Тогда во вьюшке спрячь колонки и все. QTableView::hideColumn(int)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 26.8.2010, 9:44
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо за ответы.
Подскажите ещё кое что.
Нужен номер выбраной строки в Таблице. В нете нашёл только это:
номер_выбраной_строки = view.currentIndex().row();

Не катит :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 26.8.2010, 9:51
Сообщение #7


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


view.selectionModel()->selectedIndexes().at(номер строки в выделении).row()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.8.2010, 9:51
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(potkin @ 26.8.2010, 13:44) *
Не катит
данная фраза не информативна.
Что выделил? Что получил в результате? И т.д.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 26.8.2010, 9:53
Сообщение #9


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Если надо одну строку, то view.setSelectionMode(QAbstractItemView::SingleSelection); а затем view.selectionModel()->selectedIndexes().first().row() только не забудь проверить список на пустоту.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 26.8.2010, 10:11
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


molchanoviv,
Спасибо всё заработало :)

Сообщение отредактировал potkin - 26.8.2010, 10:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 26.8.2010, 10:58
Сообщение #11


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Тема переехала в раздел MVC
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 27.8.2010, 15:20
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


Продолжаю ...
Подскажите, как программно отредактировать, данные в ячейках.
Данные заполняют tableView так:
    model = new QSqlRelationalTableModel();
    model->setTable("answer");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    if (model->select())
    {
       model->setHeaderData(0, Qt::Horizontal, tr("AnswerRU"));
       model->setHeaderData(1, Qt::Horizontal, tr("CorrectnessRU"));

       ui->tableView->setModel(model);
       ui->tableView->resizeColumnsToContents();
    }
    else
    {
        model->database().rollback();
        QMessageBox::warning(this, tr("Cached Table"), tr("The database reported an error: %1").arg(model->lastError().text()));
    }


Заранее спасибо :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.8.2010, 19:19
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


после селекта, ролбэк не нужен - лишнее.
программное изменение осуществляется через метод setData интерисующей тебя модели.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 27.8.2010, 19:35
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


    for(int i=0; i<model->rowCount(); i++)
    {
        QModelIndex index = model->index(i,1);
        modelAZ->setData(index, "Текст ...");
    }


П.С. Мало примеров в сети, в основном так, только общая информация :(

Сообщение отредактировал potkin - 27.8.2010, 19:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.8.2010, 19:59
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(potkin @ 27.8.2010, 23:35) *
Мало примеров в сети, в основном так, только общая информация
примеры смотри в делегатах, они непосредственно с моделью взаимодействуют.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 1.9.2010, 12:13
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем спасибо за ответы :)
Продолжаю.
Есть Реляционная модель:
 QSqlRelationalTableModel *model;
 model = new QSqlRelationalTableModel(this, db);
 model->setTable("answer");
 model->setEditStrategy(QSqlTableModel::OnManualSubmit);
 model->setRelation(6, QSqlRelation("correctness", "correctnessID", "nameEN"));
 if (model->select())
  {
      .................
      model->setHeaderData(5, Qt::Horizontal, tr("answerUA"));
      model->setHeaderData(6, Qt::Horizontal, tr("correctnessID"));  // Реляция
  }

Надо считать несколько записей и проверить их на валидность.
Считываю так:
for(int i=0; i<model->rowCount(); i++)
 {
  QSqlRecord record = model->record(i);
//1.Считывает и проверяет Нормально
  if(record.value("answerUA").toString() == "ТЕКСТ")
   {
      .................
   }

//2.НЕ Считывает.
  if(record.value("correctnessID").toString() == "ТЕКСТ")
   {
      .................
   }
 }


Тоесть "//2. ... " не работает.
"correctnessID", всегда пустое :( - НЕ СЧИТЫВАЕТ потому что оэто реляция 2-х таблиц.
А вот "answerUA" - нормально считывает.

Сообщение отредактировал potkin - 1.9.2010, 17:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 13.7.2025, 4:04