Russian Qt Forum

Qt => Базы данных => Тема начата: z11t3 от Октябрь 11, 2010, 10:21



Название: Помогите локализовать баг
Отправлено: z11t3 от Октябрь 11, 2010, 10:21
Доброе время суток.
Собираю свой-же старый проект, который стал вываливатся на таком коде:
Код:
				QSqlQuery sqlQuery(WriteSQLThread.pdb);
sqlQuery.prepare("SELECT * FROM ti ORDER BY tiid DESC LIMIT 1");
sqlQuery.exec();
sqlQuery.next();
Archiver.countTI = sqlQuery.value(0).toInt();//полученное количество записей в текущей рабочей таблице

sqlQuery.prepare("SELECT * FROM messages ORDER BY msgid DESC LIMIT 1");
sqlQuery.exec();///ВЫВАЛИВАЕТСЯ НА ЭТОЙ СТРОЧКЕ
sqlQuery.next();
Archiver.countMS = sqlQuery.value(0).toInt();//так-же для сообщений
Вываливается вот что:
(http://img189.imageshack.us/img189/8664/47208465.th.jpg) (http://img189.imageshack.us/i/47208465.jpg/)
Если ошибку проигнорить, далее аналогичные запросы выполняются:
Цитировать
sqlQuery.prepare("SELECT * FROM tc ORDER BY tcid DESC LIMIT 1");
            //sqlQuery.prepare("SELECT COUNT(*) FROM tc");
            sqlQuery.exec();
            sqlQuery.next();
            Archiver.countTS = sqlQuery.value(0).toInt();//аналогично для TC
Прошу помощи уважаемые комрады.
До этого участка кода, идёт некоторая успешная работа с БД:
Код:
boolean create_classificators (ChanelServer* CS)
{
//QTextCodec *codec1;
//codec1 = QTextCodec::codecForName("utf8");
//QTextCodec::setCodecForCStrings(codec1);
QString Value;

std::string IdentName;
int IdentNum1;
std::string str_ident;


QSqlQuery sqlQuery(WriteSQLThread.pdb);

sqlQuery.prepare("SET NAMES 'utf8'");//настройка кодировки общения с базой
sqlQuery.exec();

sqlQuery.prepare("truncate table msident");//удаление значений старого классификатора за ненадобностью
sqlQuery.exec();
{//получений из сервера каналов всех ident для MS
str_ident=CS->GetCSIdents()->MesIdents.FindFirstSectionIdent("Names");

while (str_ident!="")
{
IdentNum1=atoi(str_ident.c_str());
IdentName=CS->GetCSIdents()->GetMesName(IdentNum1);
Value = QString(IdentName.c_str());
Value ="'"+Value+"'"+ ","+"'"+str_ident.c_str()+"'";
if ((str_ident!="") & (IdentName!=""))
{
sqlQuery.prepare("insert into msident (ident, unical) values("+Value+")");
do
{
if (sqlQuery.exec())
{//NOerror
break;
}
else
{
LastError = WriteSQLThread.pdb.lastError().databaseText();
return false;
}
}while(true);
}
str_ident=CS->GetCSIdents()->MesIdents.FindNextSectionIdent();
}
}

sqlQuery.prepare("truncate table tiident");
sqlQuery.exec();
{//создание классификатора Ti
str_ident=CS->GetCSIdents()->TIIdents.FindFirstSectionIdent("Names");
while (str_ident!="")
{
IdentNum1=atoi(str_ident.c_str());
IdentName=CS->GetCSIdents()->GetTIName(IdentNum1);
Value = QString(IdentName.c_str());
Value ="'"+Value+"'"+ ","+"'"+str_ident.c_str()+"'";
if ((str_ident!="") & (IdentName!=""))
{
sqlQuery.prepare("insert into tiident (ident, unical) values("+Value+")");
do
{
if (sqlQuery.exec())
{//NOerror
break;
}
else
{
LastError = WriteSQLThread.pdb.lastError().databaseText();
return false;
}
}while(true);
}
str_ident=CS->GetCSIdents()->TIIdents.FindNextSectionIdent();
}
}
//создание классификатора TS
sqlQuery.prepare("truncate table tsident");
sqlQuery.exec();
{
str_ident=CS->GetCSIdents()->TSIdents.FindFirstSectionIdent("Names");
while (str_ident!="")
{
IdentNum1=atoi(str_ident.c_str());
IdentName=CS->GetCSIdents()->GetTSName(IdentNum1);
Value = QString(IdentName.c_str());
Value ="'"+Value+"'"+ ","+"'"+str_ident.c_str()+"'";
if ((str_ident!="") & (IdentName!=""))
{
sqlQuery.prepare("insert into tsident (ident, unical) values("+Value+")");
do
{
if (sqlQuery.exec())
{//NOerror
break;
}
else
{
LastError = WriteSQLThread.pdb.lastError().databaseText();
return false;
}
}while(true);//
}
str_ident=CS->GetCSIdents()->TSIdents.FindNextSectionIdent();
}
}
return true;
}

UPD:
Заметил что вылетает ошибка, в случае возврата запросом ноля записей.
В таблице messages их как-раз ноль


Название: Re: Помогите локализовать баг
Отправлено: z11t3 от Октябрь 11, 2010, 11:31
Собственно локализовал  :-X
Тему можно дропать.