Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT] SQL (SQLite)


Автор: theShadow 13.9.2008, 17:48
здравствуйте!

я тут новичок, сильно не бейте если глупые вопросы будут))

сижу пытаюсь понять как работать с SQLite. С командами еще разбираюсь, но сейчас у меня вот такой вопрос. Можно ли (если да - то как?) создать базу данных в произвольном файле? Скажем, мое приложение сканирует мою музыкальную библиотеку и записывает теги в базу данных. Я не хочу чтобы база данных лежала "где-то", а хочется чтобы лежала в папке с программой.

среда разработки - QDevelop, тулкит QT4.3.4, sqlite 2.8.17 и 3.4.2 (обе установлены), ОС Ubuntu 8.04

Автор: theShadow 13.9.2008, 23:09
немного разобрался, теперь такая проблема.

есть функция, вызываемая по нажатию кнопки. функция открывает базу данных.

Код

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(homePath + "/.database/test.db");
db.open();
db.close();

как видите, она сразу же закрывается. НО. при выполнении программы QDevelop выдает следующее в Output:

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

он выдает это каждый раз при повторном вызове функции. база данных не закрыта?

Автор: JackYF 14.9.2008, 11:45
Цитата(theShadow @  13.9.2008,  22:09 Найти цитируемый пост)
он выдает это каждый раз при повторном вызове функции. база данных не закрыта? 

Да, у меня такое тоже было когда-то. Вроде бы на работоспособность это не влияло.

Автор: theShadow 14.9.2008, 14:23
Код

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    QString homePath = QDir::homePath();
    db.setDatabaseName(homePath + "/database.db");
    QSqlQuery query;
    db.open();                                                        // открываем базу данных
    query.exec("SELECT * FROM Data");
    while (query.next())
    {
        QStringList str;
        for (int i=0; i<=6;i++)
        {
            str << query.value(i).toString();                        // считываем данные из таблицы в QStringList
        }
        addToTable(str);                                            // внешняя функция, добавляет данные в таблицу
    } 
    db.close();                                                        // закрываем базу данных

в чем я мудак? почему query.next() всегда возвращает false? база существует, данные в ней есть.

Автор: W4FhLF 14.9.2008, 14:31
Цитата(theShadow @  14.9.2008,  14:23 Найти цитируемый пост)
QSqlQuery query;


А созданную БД кто задавать будет?

Добавлено через 44 секунды
QSqlQuery query(db);

Автор: theShadow 14.9.2008, 14:38
спасибо!))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)