Russian Qt Forum

Qt => Базы данных => Тема начата: anDROid от Апрель 24, 2011, 12:32



Название: bindValue
Отправлено: anDROid от Апрель 24, 2011, 12:32
http://www.prog.org.ru/topic_7098_0.html

Аналогичная проблема,так и не понял в чем суть.
Код:
qry.prepare( "SELECT value FROM settings WHERE name=:name" );
    qry.bindValue(":name","Start");
    qry.exec();
Не пашет
Код:
qDebug() << qry.lastQuery();
Выдает
Код:
"SELECT value FROM settings WHERE name=:name"


Название: Re: bindValue
Отправлено: Drafter от Апрель 24, 2011, 22:38
Попробуйте:
qry.bindValue(":name", QVariant("Start"));


Название: Re: bindValue
Отправлено: silver47 от Апрель 25, 2011, 07:16
Какая база? Чего отвечает qDebug() << qry.lastError().text();


Название: Re: bindValue
Отправлено: anDROid от Апрель 26, 2011, 14:06
Попробуйте:
qry.bindValue(":name", QVariant("Start"));
Не помогло


Название: Re: bindValue
Отправлено: anDROid от Апрель 26, 2011, 14:06
Какая база? Чего отвечает qDebug() << qry.lastError().text();
sqlite

Код:
" Parameter count mismatch"


Название: Re: bindValue
Отправлено: Drafter от Апрель 28, 2011, 10:16
А база подключена к qry? И открыта ли она - db.isOpen()?

Должно быть как-то так:
Код:
    
    QSqlDatabase db = QSqlDatabase::database(DBConnectionName, true);

    QSqlQuery query(db);
    query.prepare("SELECT * FROM ExerciseResults "
                  "WHERE UserId = :UserId "
                  "AND ModuleId = :ModuleId "
                  "ORDER BY ExerciseId ");
    query.bindValue(":UserId", QVariant(userId));
    query.bindValue(":ModuleId", QVariant(moduleId));
    query.exec();


Название: Re: bindValue
Отправлено: anDROid от Май 05, 2011, 10:48
Да,подключена,INSERT работает,а вот с селект такая трабла.

Проблему решил средствами QString


Название: Re: bindValue
Отправлено: shirushizo от Май 05, 2011, 11:19
Попробуйте:
1.Апострофы добавить.
qry.prepare( "SELECT value FROM settings WHERE name= ':name' " );
2. Заменить char* на QString
qry.bindValue(":name",QString("Start"));


Название: Re: bindValue
Отправлено: anDROid от Май 16, 2011, 13:20
Попробуйте:
1.Апострофы добавить.
qry.prepare( "SELECT value FROM settings WHERE name= ':name' " );
2. Заменить char* на QString
qry.bindValue(":name",QString("Start"));

Пробовал,не получается


Название: Re: bindValue
Отправлено: LisandreL от Май 16, 2011, 13:47
Цитировать
Апострофы добавить.
qry.prepare( "SELECT value FROM settings WHERE name= ':name' " );
Не нужно. Бинд их добавляет, если нужно.
Цитировать
qry.bindValue(":name", QVariant("Start"));
qry.bindValue(":name",QString("Start"));
Не нужно, хотя и не навредит.


Цитировать
Да,подключена,INSERT работает,а вот с селект такая трабла.
Попробуйте вот так: qry.prepare( "SELECT [value] FROM [settings] WHERE [name]=:name;" );
Если будет та же ошибка по очереди:
qry.prepare( "SELECT * FROM [settings] WHERE [name]=:name;" );
qry.prepare( "SELECT * FROM [settings]" ); - последнюю без бинда.
Если и это не сработает, проверяйте не опечатались ли где-нибудь в названии таблицы.