Russian Qt Forum
Сентябрь 28, 2024, 02:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView и QSqlTableModel  (Прочитано 3188 раз)
smirnoff
Гость
« : Январь 30, 2011, 18:08 »

Имеем код:

Код:
#include <QtGui>
#include "widget.h"
#include <QtSql>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;

    QTableView view(&w);
    QSqlTableModel model;

    QTextCodec *codec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForCStrings(codec);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    db.setDatabaseName("test");
    db.setHostName("localhost");
    db.setUserName("root");
    db.setPassword("2628381165");

    if(db.open())
    {}
    else
        QMessageBox::critical(0, "Ошибка соединения", "Невозможно соединиться с базой");

    model.setTable("table1");
    model.select();
    model.setEditStrategy(QSqlTableModel::OnFieldChange);
    view.setModel(&model) ;

    w.show();

    return a.exec();
}

Результат выполнения - смотреть прикрепленный файл widget.jpg.

Почему не отображает данные?

В таблице есть 6 записей. Если делать так:

Код:
QSqlQuery query;

if(query.exec("SELECT * FROM table1;"))
        {
            QSqlRecord rec = query.record();
            int nNumber = 0;
            QString strName;
            QString strPhone;
            QString strEmail;

            while(query.next())
            {
                nNumber = query.value(rec.indexOf("number")).toInt();
                strName = query.value(rec.indexOf("name")).toString();
                strPhone = query.value(rec.indexOf("phone")).toString();
                strEmail = query.value(rec.indexOf("email")).toString();
            }
        }

то все прекрасно читает. Почему не читает при использовании интерьвью QTableView и QSqlTableModel?
Записан
sadhu
Гость
« Ответ #1 : Январь 30, 2011, 23:19 »

 
Код:
QSqlTableModel model;//неверно, где задаёшь базу данных?
QSqlTable model(0,db);//верно, задаёшь базу данных в конструкторе

//но в твоём случае достаточно поменять местами создание модели и подключения
/*
ибо "If db is not valid, the default database connection will be used." т.е :
*/
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
QSqlTableModel model;//верно, используеться подключение по умолчанию

Записан
smirnoff
Гость
« Ответ #2 : Январь 31, 2011, 12:57 »

Код:
QSqlTableModel model;//неверно, где задаёшь базу данных?
QSqlTable model(0,db);//верно, задаёшь базу данных в конструкторе

//но в твоём случае достаточно поменять местами создание модели и подключения
/*
ибо "If db is not valid, the default database connection will be used." т.е :
*/
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
QSqlTableModel model;//верно, используеться подключение по умолчанию


Спасибо. Теперь все ясно.
Записан
AdAn
Гость
« Ответ #3 : Апрель 22, 2011, 14:24 »

У меня стоит lampp (xampp), как сделать так чтобы qt цеплялся на лампововский mysql?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 21.