Коннекчусь к базе через ODBC (база Sybase ASE),
QSqlDatabase * db = QSqlDatabase::addDatabase("QODBC3");
db->setDatabaseName("DSN_NAME");
db->setUserName("login");
db->setPassword("password");
if( !db->open() )
{
db->lastError().showMessage( "An error occured. Please read the README file in the sqltable"
"dir for more information.\n\n" );
}
//база открывается без проблем, далее делаю так
QSqlQuery query("SELECT * FROM table1");
QString str;
query.next();
str=query.value(1).toString();
QMessageBox *mb=new QMessageBox();
mb->message("MB",str,"ok_ok",this,0);
db->close();
В результате строка str пустая ,а в консоле сообщение QSqlQuery::value: not positioned on a valid record.
Пробовал такое сделать :
QSqlRecord record=db->record("_odb");
QString recs=record.fieldName(1);
QMessageBox *mfdb=new QMessageBox();
mfdb->message("MaaaB",recs,"ok_ok",this,0);
Получил имя второй колонки , но когда попытался взять значение поля
QVariant variant=record.value(0);
str=variant.toString();
то строка str опять пустая. Как такое попобороть?
Не могу сделать Select
Модератор: Модераторы разделов
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Не могу сделать Select
Предлагаю сделать так:
Код: Выделить всё
QSqlQuery query;
query.exec("SELECT * FROM table1");
QString str;
query.next();
str=query.record().value(1).toString();
QMessageBox *mb=new QMessageBox();
mb->message("MB",str,"ok_ok",this,0);
db->close();-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
Re: Не могу сделать Select
-DooM- писал(а): ↑05.12.2007 17:49Предлагаю сделать так:
Код: Выделить всё
QSqlQuery query; query.exec("SELECT * FROM table1"); QString str; query.next(); str=query.record().value(1).toString(); QMessageBox *mb=new QMessageBox(); mb->message("MB",str,"ok_ok",this,0); db->close();
Таже беда, дело в том, что query.next() возвращает false при первом-же выполнении, т.е. он не переходит на запись.
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Не могу сделать Select
zayac_val писал(а): ↑05.12.2007 18:24-DooM- писал(а): ↑05.12.2007 17:49Предлагаю сделать так:
Код: Выделить всё
QSqlQuery query; query.exec("SELECT * FROM table1"); QString str; query.next(); str=query.record().value(1).toString(); QMessageBox *mb=new QMessageBox(); mb->message("MB",str,"ok_ok",this,0); db->close();
Таже беда, дело в том, что query.next() возвращает false при первом-же выполнении, т.е. он не переходит на запись.
Ну вообще можно не гадать, а посмотреть содержание query.lastError().text(). А там видно будет.
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
Re: Не могу сделать Select
Да пустой он - query.lastError().text();
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
Re: Не могу сделать Select
query.isActive() возвращает true, а вот query.isValid() - false, т.е. он не может стать на запись, а вот почему?
-
Alexandro
- Сообщения: 33
- ОС: FreeBSD, Ubuntu, Debian
Re: Не могу сделать Select
Была такая же проблема с базой FoxPro, но не через Qt. Симптомы те же: к базе конектимся, но селекты пустые. Конектимся к не FoxPro'шной базе - все ОК. Разбирался с проблемой не я, так что подробно не скажу, но, как мне сказали, проблема была с кодировкой
-
nonstop
- Сообщения: 132
- ОС: Slackware
Re: Не могу сделать Select
QSqlQuery ( QSqlDatabase db )
конструировать объект QSqlQuery нужно от открытой QSqlDatabase
пример
конструировать объект QSqlQuery нужно от открытой QSqlDatabase
пример
Код: Выделить всё
QSqlQuery q(db);
q.prepare("SELECT * FROM table1");
q.exec();
while (q.next())
{
}slackware - linux for human brains