Не могу сделать Select

Модератор: Модераторы разделов

zayac_val
Сообщения: 38
ОС: openSuse10.3

Не могу сделать Select

Сообщение zayac_val »

Коннекчусь к базе через 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 опять пустая. Как такое попобороть?
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Не могу сделать Select

Сообщение Assuri »

Предлагаю сделать так:

Код: Выделить всё

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

Сообщение zayac_val »

-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

Сообщение Assuri »

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

Сообщение zayac_val »

Да пустой он - query.lastError().text();
Спасибо сказали:
zayac_val
Сообщения: 38
ОС: openSuse10.3

Re: Не могу сделать Select

Сообщение zayac_val »

query.isActive() возвращает true, а вот query.isValid() - false, т.е. он не может стать на запись, а вот почему?
Спасибо сказали:
Alexandro
Сообщения: 33
ОС: FreeBSD, Ubuntu, Debian

Re: Не могу сделать Select

Сообщение Alexandro »

Была такая же проблема с базой FoxPro, но не через Qt. Симптомы те же: к базе конектимся, но селекты пустые. Конектимся к не FoxPro'шной базе - все ОК. Разбирался с проблемой не я, так что подробно не скажу, но, как мне сказали, проблема была с кодировкой
Спасибо сказали:
Аватара пользователя
nonstop
Сообщения: 132
ОС: Slackware

Re: Не могу сделать Select

Сообщение nonstop »

QSqlQuery ( QSqlDatabase db )
конструировать объект QSqlQuery нужно от открытой QSqlDatabase
пример

Код: Выделить всё

QSqlQuery q(db);
q.prepare("SELECT * FROM table1");
q.exec();
while (q.next())
{
}
slackware - linux for human brains
Спасибо сказали: