Russian Qt Forum

Qt => Базы данных => Тема начата: sinbad7 от Декабрь 01, 2010, 13:32



Название: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 13:32
Может кто-нибудь кинуть в тему архивчик такого проекта
1 форма, 1 TableView на ней, одна БД SQLite с одной таблицей с одним полем, чтобы эта таблица была присоединена к TableView с помощью модели?
Заранее благодарен. Посылки в сторону гугла и книжек не принимаю.


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 01, 2010, 13:39
а не надо ни в книжки ни в гугл... открой примеры Qt и посмотри...


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 14:26
если бы ты ознакомился с примерами, ты бы так не говорил


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 01, 2010, 14:40
ознакамливался... лет 5 назад... и вопрос на твой вопрос я там ответ нашел....


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 15:21
Итак что мы имеем
примеры из ветки SQL
1. Cashed Table - нет формы, БД создается в памяти хоть это и не столь критично, но все-таки
2. Drill Down - нет формы, БД создается в памяти
3. Query Model - нет формы, БД создается в памяти
4. Relational Table Model - нет формы, БД создается в памяти
5. Table Model - нет формы, БД создается в памяти
6. Music Archive - нет формы, БД создается в памяти
7. SQL Widget Mapper - нет формы, БД создается в памяти
Может у меня примеры не те что 5 лет назад?


Название: Re: SQLite + GUI
Отправлено: sergun1604 от Декабрь 01, 2010, 15:33
Человек задал конкретный вопрос, надо дать ему конкретный ответ.
Дружище я тебе архив не буду высылать скажу как я сделал.
1 Создал форму
2 Кинул табле виев
3 Создается база в каталоге с прогой

Код:
 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //подключаем драйвер базы
        db.setDatabaseName("my");                               //подключаем бызу данных "мой"
        db.setUserName("sergey");                               //имя пользователя
        db.setHostName("localhost");                            //имя хоста
        db.setPassword("password");                             //пароль
        if(!db.open())                                          //открываем базу
        {
            qDebug()<<"Невозможно открыть базу данных:"<<db.lastError();
        }

4 Таблицы я создавал с помощью sqlitebrowser

5 Запрсы к ним организовывал с помощью

QSqlQuery query;                             //запрос
QString StrName;                             //строка
query.exec("SELECT * FROM ktr;");     //извлечь увсе строки из контрагентов
   


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 16:06
Спасибо Сергей, за ответ, скажи только, вот этот код ты где набирал в каком из файлов проекта? И еще хотелось бы про модель немного...


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 01, 2010, 16:14
Итак что мы имеем
примеры из ветки SQL
1. Cashed Table - нет формы, БД создается в памяти хоть это и не столь критично, но все-таки
2. Drill Down - нет формы, БД создается в памяти
3. Query Model - нет формы, БД создается в памяти
4. Relational Table Model - нет формы, БД создается в памяти
5. Table Model - нет формы, БД создается в памяти
6. Music Archive - нет формы, БД создается в памяти
7. SQL Widget Mapper - нет формы, БД создается в памяти
Может у меня примеры не те что 5 лет назад?


QTableView это GUI... если это не тот вариант то возьмите к примеру QWIdget и положите view на него....
для того что бы база создавалась не в памяти нужно всего лишь заменить :memory: на имя файла в котором вы хотите хранить...


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 16:21
Цитировать
QTableView это GUI... если это не тот вариант то возьмите к примеру QWIdget и положите view на него....
для того что бы база создавалась не в памяти нужно всего лишь заменить :memory: на имя файла в котором вы хотите хранить...
под GUI я подразумеваю файл формы созданный в QT Creator, а не создаваемый динамически в коде, насчет базы я сказал что для меня это неважно. Для меня проблема в том, где что будет находиться и как оно между собой связывается.


Название: Re: SQLite + GUI
Отправлено: sergun1604 от Декабрь 01, 2010, 16:24
файл .срр не забудь подключить SQL
#include "QtSql"

Код:
QSqlQueryModel *md = new QSqlQueryModel;                       //модель
    QString strF;                                                                          //строка
    strF="SELECT id, name, amount, cen, nac, cenr, sumo, sumr FROM vrem";
    md->setQuery(strF);
    md->setHeaderData(1,Qt::Horizontal,trUtf8("Наименоваие\n товара"));        //создаем имя столбца наме
    md->setHeaderData(2,Qt::Horizontal,trUtf8("Кол-во"));        //создаем имя столбца количество
    md->setHeaderData(3,Qt::Horizontal,trUtf8("Цена"));        //создаем имя столбца цена
    md->setHeaderData(4,Qt::Horizontal,trUtf8("Нац-ка"));        //создаем имя столбца наценка
    md->setHeaderData(5,Qt::Horizontal,trUtf8("Цена\n продажи"));        //создаем имя столбца
    md->setHeaderData(6,Qt::Horizontal,trUtf8("Сумма\n опт-ая"));        //создаем имя столбца
    md->setHeaderData(7,Qt::Horizontal,trUtf8("Сумма\n реал-ии"));        //создаем имя столбца


    ui->tableView->setModel(md);                                                 //привязыва*/ем набор данных к таблице
    ui->tableView->resizeColumnsToContents();                               //по ширене текста колонка
    ui->tableView->setColumnHidden(0,true);             //скрыть 1 столбец
                         


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 01, 2010, 16:34
данный код даст утечку.... если не удалить модель в деструкторе ...


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 16:42
Программа компилится, но не запускается, вылетает с ошибкой что не так?


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 01, 2010, 16:47
ui->setupUi(this) должен быть в начале конструктора


Название: Re: SQLite + GUI
Отправлено: sergun1604 от Декабрь 01, 2010, 16:55
что за ошибка?
(кстати crossly  а как удалить модель в деструктере, меня волнует эта тема)


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 01, 2010, 17:07
Код:
delete md;
для того что бы не думать об этом... назначайте объектам родителя.... new QSqlQueryModel(this);


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 17:45
Теперь запускается, но ничего не отображает в TableView


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 01, 2010, 18:13
во избежание ошибок указывайте полный путь и имя файла...
Код:
db.setDatabaseName(QCoreApplication::applicationDirPath()+"/test.db3");


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 01, 2010, 18:58
C определением  пути через функцию чего то не получилось(может база должна лежать рядом с exe файлом?), прописал в текстовом виде и заработало, правда слэши пришлось по 2 раза ставить. Спасибо за помощь!


Название: Re: SQLite + GUI
Отправлено: sergun1604 от Декабрь 02, 2010, 09:52
Crossly благодарю за ответ, я как раз здесь парился что у меня бинарник не подхватывает SQLite, хотя в qt норм запускается при отладке


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 21, 2010, 19:54
Код:
    md->setHeaderData(1,Qt::Horizontal,trUtf8("Наименоваие\n товара"));        //создаем имя столбца наме
 
                         
При попытке задания имени столбца русскими буквами, так как в примере на экране вопросики в ромбиках. Причем в базе все нормально, русские буквы в таблице отображаются. Поиск по форуму не дал ничего вразумительного. Может w7 виновата, на XP пока не пробовал. а так все работает даже приделал кнопки добавления удаления


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 21, 2010, 20:55
в какой кодировке исходники?


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 21, 2010, 21:16
пишу в винде, в QT Creator, наверно win1251 http://clip2net.com/s/Gg1p
в Total Commander Lister показывает ANSI Windows


Название: Re: SQLite + GUI
Отправлено: crossly от Декабрь 21, 2010, 21:41
переведите в utf8....или используйте
Код:
void QTextCodec::setCodecForTr ( QTextCodec * c ) [static]
+
Код:
void QTextCodec::setCodecForTr ( QTextCodec * c ) [static]


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 21, 2010, 21:57
поменял кодировку файла, теперь в программе работает нормально а в окне QT Creator показывает кракозяблы, попробую с кодеками


Название: Re: SQLite + GUI
Отправлено: BRE от Декабрь 21, 2010, 21:59
поменял кодировку файла, теперь в программе работает нормально а в окне QT Creator показывает кракозяблы, попробую с кодеками
Лучше в исходниках использовать кодировку utf8, а в creator изменить кодировку по умолчанию на utf8, и все будет показываться нормально.


Название: Re: SQLite + GUI
Отправлено: sinbad7 от Декабрь 21, 2010, 22:07
Спасибо, теперь работает и в программе и отображается в Creatore.