crossplatform.ru

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

История благодарностей участнику 512es ::: Спасибо сказали: 5 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
16.1.2012, 17:14 QSqlTableModel загружает не все записи
База sqlite?

QSqlQueryModel умеет делать это так:
while (canFetchMore()) fetchMore();

а вот QSqlTableModel что то не вижу такого метода..
FantasyOr,
10.12.2010, 22:14 Qt + SQLite
Dimix, почитай доки про склайт. совершенно безопасно сохранять постоянное подключение к бд. мало того, база данных умеет работать и с несколькими пользователями одновременно.
это тебе не xml-ки.
кроме того, что то мне подсказывает что создание множества баз данных в твоём случае тоже не обосновано.

вот напимер. в моём проекте всего одна база склайта, причём, подключаюсь я к одному и тому же файлу двумя коннектами в разных потоках. тоесть, можно сказать, два пользователя, которые постоянно пишут и читают. размер базы планируется сотни м.б. более десяти таблиц. и всё отлично работает!

советую пересмотреть концепцию)
Dimix,
2.12.2010, 18:33 Qt + SQLite
Привьём пожалуй любовь к 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() перед закрытием бд..
Dimix,
15.9.2010, 0:54 Простой beep (звук) под Linux
Спасибо всем за ответы и поддержку))
Поделюсь полученным плеером. Мне не жалко))

void MainWindow::clicker()
{
#ifdef Q_OS_WIN32
    QApplication::beep();
#else
    QProcess player;
    QFile snd(":/sound/blip2.wav");
    if (!snd.open(QIODevice::ReadOnly)) return;
    player.start("aplay -q");
    if (player.write(snd.readAll()) == -1) return;
    player.closeWriteChannel();
    snd.close();
    if (!player.waitForFinished(5000)) player.kill();
#endif
}


Звук играется прямо из ресурсов.
Если за 5 секунд плеер не завершился мы его убиваем.
На винде используем стандартный бип.

Работает быстро, надёжно и универсально!) Задача решена!
grio,
7.5.2009, 14:21 setQuery и prepare
Цитата(Litkevich Yuriy @ 6.5.2009, 20:02) *
при установки запроса в модель она, модель, сама выполняет запрос.

я тоже так думал, однако не выполняет.
как я понял, выполняет если только запрос мы задали в виде QString. а если QSqlQuery::prepare то мы сами должны позаботиться о его выполнении..

Цитата(Litkevich Yuriy @ 6.5.2009, 20:02) *
И по моему подстановку использовать не получится совместно с моделью.

у меня получилось:
QSqlQuery query;
query.prepare("SELECT ?");
query.addBindValue(1);
query.exec();
model->setQuery(query);
m_ui->tableView->setModel(model);

отлично работает!)
Litkevich Yuriy,

RSS Текстовая версия Сейчас: 11.12.2024, 23:12