Название: QSqlLite Отправлено: kadr от Декабрь 13, 2009, 16:54 Не заносятся данные в таблицу. Использую QSqlLite:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("sqllite1.db"); db.open(); if (!db.isOpen()) { QMessageBox::warning(this, "Warning", tr("База данных не может быть открыта."),QMessageBox::Ok); return; } SQL = QString("INSERT INTO primer VALUES ('%1')") .arg(response.value().toString()); q.exec(SQL); Название: Re: QSqlLite Отправлено: MoPDoBoPoT от Декабрь 13, 2009, 19:16 Во-первых, очень неинформативно...
Во-вторых, есть метод такой QSqlQuery::lastError(). В-третьих, точно db.setDatabaseName("sqllite1.db"), а не db.setDatabaseName("sqllite1")? В-четвертых, не видно где создается q (объект QSqlQuery). Предполагаю, что до создания соединения с БД, что неверно. Название: Re: QSqlLite Отправлено: Marat(Qt) от Декабрь 13, 2009, 20:42 Не знаю какой там синтаксис в SQLite, но обычно "INSERT INTO primer (column) VALUES('something')"
где column - имя колонки, primer - имя таблицы. Но чтобы правильно определять ошибки вам и правда следует использовать lastError. Примерно так: Код: q.exec(SQL); Код: q.exec(SQL); Название: Re: QSqlLite Отправлено: MoPDoBoPoT от Декабрь 13, 2009, 21:25 Marat(Qt), там все правильно . Так пишут, когда не хотят перечислять все поля таблицы.
Название: Re: QSqlLite Отправлено: Marat(Qt) от Декабрь 13, 2009, 21:38 т.е. в VALUES('%1') подставляются все аргументы через запятую? если колонка одна то здорово, но если их несколько то должна быть ошибка, потому что 'something,something' - должно трактоваться как один аргумент (из-за кавычек) - если я не прав, то очень хочу увидеть опровержение, стало любопытно
Название: Re: QSqlLite Отправлено: MoPDoBoPoT от Декабрь 13, 2009, 22:03 VALUES('%1') подставляются все аргументы через запятую? Конечно нет, потому что, как ты уже заметил, аргумент заключен в апострофы, то есть имеется одно тектсовое поле (конечно, чисто гипотетически something может содержаться еще апострофы и перечисление полей, но мы это исключаем :D). Поэтому колонка-то одна. Ну а вообще, может быть такое:Код где table_1 содержит 4 поля. Название: Re: QSqlLite Отправлено: break от Декабрь 13, 2009, 22:13 только при этом прийдется передавать значения для всех полей таблицы, и вообще конструкция потенциально опасная для человеческих ошибок, - поменялся порядок полей в БД и все хана - если тип несоврпадет
Название: Re: QSqlLite Отправлено: kadr от Декабрь 14, 2009, 08:32 Привет, сделал как посоветовали, использовал lasterror() и получил вот что:
file is encrypted or is not a database Unable to execute statement. Файл находиться в каталоге с программой! Самое интересное, что файл больше ничем и нигде не открыт! Название: Re: QSqlLite Отправлено: kadr от Декабрь 14, 2009, 09:30 Все решил проблему, всем спасибо за размышления, дело было в том что я создавал базу и таблички через стороннюю программу, и видимо не совпадали версии и он ругался на то, что что файл защищен от записи! А если создавать структуру запросами через прогу, то все нормально добавляется. :)
|