Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: smirnoff от Январь 30, 2011, 18:08



Название: QTableView и QSqlTableModel
Отправлено: 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?


Название: Re: QTableView и QSqlTableModel
Отправлено: sadhu от Январь 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;//верно, используеться подключение по умолчанию



Название: Re: QTableView и QSqlTableModel
Отправлено: smirnoff от Январь 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;//верно, используеться подключение по умолчанию


Спасибо. Теперь все ясно.


Название: Re: QTableView и QSqlTableModel
Отправлено: AdAn от Апрель 22, 2011, 14:24
У меня стоит lampp (xampp), как сделать так чтобы qt цеплялся на лампововский mysql?