crossplatform.ru

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

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Qt + SQLite, Не могу закрыть соединение с базой
Dimix
  опции профиля:
сообщение 25.11.2010, 13:50
Сообщение #11


Студент
*

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

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




Репутация:   0  


Ничего не помогает. Может кто то знает еще какие либо варианты почему не получается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 25.11.2010, 14:10
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(Dimix @ 25.11.2010, 13:50) *
Ничего не помогает. Может кто то знает еще какие либо варианты почему не получается?

Нужно почитать документацию по QSqlDatabase вообще и про:
void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static]
в частности.
Обратить внимание какой параметр принимает этот метод и посмотреть пример в документации к этому методу, как правильно удалять соединение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 2.12.2010, 18:33
Сообщение #13


Участник
**

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

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




Репутация:   0  


Привьём пожалуй любовь к QtSql =))
Сделай вот так:
void Action::listClicked()
{
    QString namedb = list->currentItem()->text();
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",namedb);
    db.setDatabaseName(namedb);
    if (!db.open()) {
        qDebug() << db.lastError().text();
        db.close();
        return 0;
    }
}

bool getDBlist()
{
    { // не спроста тут мы взяли всё это в скобки
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","masterdb");
        db.setDatabaseName("masterdb");
        if (!db.open()) {
            qDebug() << db.lastError().text();
            db.close();
            return 0;
        }
    }
    // сейчас база данных открыта, но переменная db удалена
    
    QSqlQuery q(QSqlDatabase::database("masterdb")); // вот так можно обратиться к открытому соединению
    if (!q.exec("SELECT name FROM table;")) return 0;
    while (q.next()) list->addItem(q.value(0).toString());
    
    // суть в том, чтобы сейчас не было НИ ОДНОЙ живой переменной указывающей на db
    if (QSqlDatabase::contains("masterdb")) { // masterdb - это имя подключения к бд. такое же как и то, которое мы указали при создании соединения
        if (QSqlDatabase::database("masterdb").isOpen()) QSqlDatabase::database("masterdb").close();
        QSqlDatabase::removeDatabase("masterdb");
    }
    return 1;
}


ещё кажись понадобится q.clear() перед закрытием бд..

Сообщение отредактировал 512es - 2.12.2010, 18:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 7.12.2010, 15:14
Сообщение #14


Студент
*

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

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




Репутация:   0  


Проблема вот такого плана

существует виджет QLineEdit
создаю БД по обращению к функции
bool maindbCreate()
{
    QSqlDatabase maindbCreate = QSqlDatabase::addDatabase("QSQLITE");
    maindbCreate.setDatabaseName("base.db");
    maindbCreate.setHostName("localhost");
    maindbCreate.setUserName("user");
    maindbCreate.setPassword("password");
    if(!maindbCreate.open()){
        maindbCreate.lastError().text();
        QSqlDatabase::removeDatabase("QSQLITE");
    }else{
        maindbCreate.close();
        QSqlDatabase::removeDatabase("QSQLITE");
        return false;
    };
    return true;
}

создаю Таблицу по обращению к функции
bool maindbCreateTable()
{
    QSqlDatabase maindbCreateTable = QSqlDatabase::addDatabase("QSQLITE");
    maindbCreateTable.setHostName("localhost");
    maindbCreateTable.setDatabaseName("base.db");
    if(!maindbCreateTable.open("user", "password")){
        maindbCreateTable.lastError().text();
        QSqlDatabase::removeDatabase("QSQLITE");
    }else{
    QSqlQuery queryMaindbCreateTable;
    queryMaindbCreateTable.exec("CREATE TABLE user (id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(20));");
    queryMaindbCreateTable.clear();
    maindbCreateTable.close();
    QSqlDatabase::removeDatabase("QSQLITE");
    return false;
    };
return true;
}

пытаюсь заполнить таблицу по обращению к функции
bool maindbInsert()
{
    QSqlDatabase maindbInsert = QSqlDatabase::addDatabase("QSQLITE");
    maindbInsert.setHostName("localhost");
    maindbInsert.setDatabaseName("base.db");
    if(!maindbInsert.open("user", "password")){
        maindbInsert.lastError().text();
        QSqlDatabase::removeDatabase("QSQLITE");
    }else{
    QSqlQuery queryMaindbInsert;
    queryMaindbInsert.exec("INSERT INTO (name) VALUES ('"+editCreateName->text()+"');");
    queryMaindbInsert.clear();
    maindbInsert.close();
    QSqlDatabase::removeDatabase("QSQLITE");
    return false;
    };
return true;
}

Она ругается на editCreateName->text() вот что пишет : error: ‘editCreateName’ was not declared in this scope
Как надо правильно ПОМОГИТЕ!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 7.12.2010, 22:09
Сообщение #15


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


наверное, не зря ругается, и так оно и есть :) Попробуй

ui->editCreateName->text()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 8.12.2010, 15:56
Сообщение #16


Студент
*

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

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




Репутация:   0  


Цитата(Алексей1153 @ 7.12.2010, 22:09) *
наверное, не зря ругается, и так оно и есть :) Попробуй

ui->editCreateName->text()


Я эту проблему решил вот так
void maindbCreate();
void maindbCreateTable();

и т.п.

Вопрос возник такого плана. Как получить выделенную строку в QTableView?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 8.12.2010, 16:57
Сообщение #17


Студент
*

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

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




Репутация:   0  


Цитата(Dimix @ 8.12.2010, 15:56) *
Вопрос возник такого плана. Как получить выделенную строку в QTableView?

Разобрался
QSqlTableModel model;
model.setTable("coming");
model.select();
model.removeRow(view->currentIndex().row());
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.12.2010, 20:30
Сообщение #18


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

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

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




Репутация:   94  


Цитата(Dimix @ 8.12.2010, 18:57) *
Разобрался
QSqlTableModel model;
model.setTable("coming");
model.select();
model.removeRow(view->currentIndex().row());
это не соответствует вопросу. так ты удалишь выделенную строку.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 8.12.2010, 20:40
Сообщение #19


Участник
**

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

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




Репутация:   0  


Dimix, если честно вообще ничего в твоём примере не понял.. советую перечитать его (код) ещё раз самому и попытаться представить логику. что и как делается. очень много противоречий и ненужных действий..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 8.12.2010, 20:55
Сообщение #20


Студент
*

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

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




Репутация:   0  


Почему не соотвецтвует вопросу :mellow: . Я же не говорил для чего мне нужно узнать выделенную строку. А по коду вроде ясно что view это аргумент QTableView.
view->currentIndex().row()

Незнаю я не вижу в коде ненужных действий.
P. S. Все время програмировал на Delphi поэтому я новичек в Qt да и впринципе в С++.
Может логика и неправильная но во всяком случае я другого решения не нашел.
А текущий пример работает (ну пока проблем небыло :) ).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 19:56