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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужна помощь с SQLite  (Прочитано 5726 раз)
sinj
Гость
« : Март 01, 2011, 23:08 »

Собственно есть вот такой вот код. Есть окошко в нем есть две кнопки. По нажатию на одну окошко должно закрываться, а по нажатию на вторую должны добавляться данные в таблице. Долго ковырялся, не могу понять, почему база создается, а данные в нее не добавляются. Посмотрите, может кто найдет ошибки и посоветует, в какую сторону искать. Пользовался ассистентом, но походу где-то не разобрался.

Код:
#include <QDate>
#include <QtSql>
#include "mainwindow.h"
#include "ui_mainwindow.h"

void DBaddData()
{
    QSqlDatabase myBase=QSqlDatabase::addDatabase("QSQLITE");
    myBase.setDatabaseName("allDataODKO");
    myBase.open();
    QSqlQuery myquery;
    myquery.exec("create table pDB(id int primary key,PCA int)");
    myquery.exec("insert into pDB(id,PCA) values(12,212)");
}


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //----------
    QDate dateNow=QDate::currentDate();
    ui->lineEdit_20->setText(dateNow.toString("dd.MM.yyyy"));
    //----------
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_2_clicked()
{
    //это кнопка выхода из программы
    close();
}

void MainWindow::on_pushButton_clicked()
{
    //функция нажатия на кнопку внесения
    DBaddData();
}
« Последнее редактирование: Март 02, 2011, 07:14 от sinj » Записан
alexman
Гость
« Ответ #1 : Март 01, 2011, 23:13 »

А таблица то pDB создана? QSqlQuery myquery; - без параметров создаете Непонимающий
Записан
sinj
Гость
« Ответ #2 : Март 01, 2011, 23:15 »

А как надо правильно?
Записан
developer
Гость
« Ответ #3 : Март 02, 2011, 04:43 »

myquery.exec("create table pDB(id int primary key,PCA int)");
myquery.exec("insert into pDB(PCB,PCA) values(12,212)");


Поле в таблице то "id", а ты используеш PCB. А вообще-то есть функции lastQuery(), lastError().
Записан
sinj
Гость
« Ответ #4 : Март 02, 2011, 07:13 »

Таблица создана. Но все равно данные не добавляются... Поправил код. Не могу разобраться что я делаю неправильно. Таблица создается. В консоли креатор пишет "QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed". Пытался удалить соединение разными способами, но видимо неправильно. Как оно должно удаляться? Делал myBase.close(); потом делал myBase.removeConnection();
« Последнее редактирование: Март 02, 2011, 07:17 от sinj » Записан
alexman
Гость
« Ответ #5 : Март 02, 2011, 08:49 »

Ну и? Разобрался?
Записан
sinj
Гость
« Ответ #6 : Март 03, 2011, 14:03 »

Нет, разобраться не получается. Написал вот такую вот функцию:
Код:
void DBTestConn()
{
    QSqlQuery myquery;
    QSqlDatabase myBase=QSqlDatabase::addDatabase("QSQLITE","myCONNECTION");
    myBase.setDatabaseName("D:/allDataODKO.db");
    myBase.open();
    myquery.exec("create table pDB (id integer primary key,PCA integer)");
    myquery.exec("insert into pDB values(1,2)");
    myBase.close();
    myBase.removeDatabase("myCONNECTION");
}

Эту функцию вызываю при нажатии на кнопку. В результате база создается, но она пустая, а в консоли Qt пишет мне:
Цитировать
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlDatabasePrivate::removeDatabase: connection 'myCONNECTION' is still in use, all queries will cease to work.

Уже перепробовал все комбинации. Кто поможет добавить в базу данные?))) Посмотрел пример в ассистенте, написал как там.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Март 03, 2011, 14:07 »

Код
C++ (Qt)
void DBCreate()
{
   QSqlDatabase myBase=QSqlDatabase::addDatabase("QSQLITE");
   myBase.setDatabaseName("D:/allDataODKO.db");
   if (!myBase.open()) {
       qDebug () << myBase.lastError ().text ();
   } else {
       QSqlQuery myquery;
       myquery.exec("create table pDB (id integer primary key,PCA integer)");
       const boo result = myquery.exec("insert into pDB values(1,2)");
       if (!result) {
           qDebug () << myquery.lastError ().text ();
       }
   }
   myBase.close ()
}
 
Но не вешай это на кнопку, так как это должно отработать только один раз.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
sinj
Гость
« Ответ #8 : Март 03, 2011, 14:47 »

Вопрос решил следующим образом:
Код:
void DBTestConn()
{
    QSqlDatabase myBase=QSqlDatabase::addDatabase("QSQLITE","myCONNECTION");
    myBase.setDatabaseName("allDataODKO.db");
    myBase.open();
    QSqlQuery myquery(myBase);
    myquery.exec("create table pDB (id int,PCA int)");
    myquery.exec("insert into pDB values(1,2)");
    myBase.close();
    myBase.removeDatabase("myCONNECTION");
}
Оказалось, что квери необходимо создавать после установления соединения, и после привязки его к соединению
Код:
QSqlQuery myquery(myBase);
в моем случае все заработало. Привинтил к кнопке, но теперь у меня не удаляется соединения. говорит что занято, помогите разобраться? Спасибо за ответы.
Записан
sinj
Гость
« Ответ #9 : Март 03, 2011, 14:56 »

Разобрался. Вот код. Возможно кому-то поможет.
Код:
    
void DBTestConn()
{
        QSqlDatabase myBase=QSqlDatabase::addDatabase("QSQLITE","myCONNECTION");
        myBase.setDatabaseName("allDataODKO.db");
        myBase.open();
        QSqlQuery myquery(myBase);
        myquery.exec("create table pDB (id int,PCA int)");
        myquery.exec("insert into pDB values(1,2)");
        myBase.close();
    }
    QSqlDatabase::removeDatabase("myCONNECTION");
Если удалять соединение так, то все отлично!
« Последнее редактирование: Март 03, 2011, 14:58 от sinj » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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