Проблема с sql запросом
День добрый. В очередной раз прошу вашей помощи в свзяи со странным поведением sql запроса. Данные из таблицы не возвращаются, проверка на isValid не проходит. Примечательно, что в этом же файле есть несколько других запросов, обращающихся к той же базе данных и тем же таблицам, выполняющихся корректно. Вот код:
- QString name;
- QString nameOfCreator;
- QStringList list;
- QStringList exhibitors;
- QStringList ListOfTheGroups;
- QStringList ListOfPasswords;
- in>>name>>list;
- QSqlQuery query;
- //name VARCHAR(30) PRIMARY KEY, creator VARCHAR(30),exhibitors TEXT, files TEXT, password VARCHAR(20)"
- for(int i=0;i<list.count();i++)
- {
- //Here is a location of problem with joining into group.
- //query do not get a value from table Groups
- query.exec("SELECT * FROM Groups WHERE name='"+list.at(i)+"'");
- if(query.isNull(0))
- qDebug()<<query.lastError();
- else
- {
- qDebug()<<"In table Groups was selected:"<<query.value(0)<<query.value(1)<<query.value(2)<<query.value(3)<<query.value(4);
- }
- if(query.isValid())
- {
- exhibitors.append(query.value(2).toStringList());
- nameOfCreator=query.value(1).toString();
- }
- if((name!=nameOfCreator)&&(!exhibitors.contains(name)))
- {
- ListOfTheGroups.append(query.value(1).toString());
- ListOfPasswords.append(query.value(3).toString());
- }
- }
- QByteArray data;
- out<<(quint16)0;
- out<<MyClient::SendToClientListOfPasswords;
- out<<ListOfTheGroups;
- out<<ListOfPasswords;
- out.device()->seek(0);
- out<<(quint16)(data.size()-sizeof(quint16));
- _sok->write(data);
- _sok->flush();
- }
- break;
Вопрос в догонку: это может быть связано с переносом проекта с одной среды на другую? У меня несколько сред Qt и работаю поочерёдно на обоих. Конфигурация одна и таже, но мало ли…
Заранее спасибо.
2 replies
Немного доделал запрос чтобы точно выяснить в чём дело. Получилось так:
- QString name;
- QString nameOfCreator;
- QStringList list;
- QStringList exhibitors;
- QStringList ListOfTheGroups;
- QStringList ListOfPasswords;
- in>>name>>list;
- QSqlQuery query;
- //name VARCHAR(30) PRIMARY KEY, creator VARCHAR(30),exhibitors TEXT, files TEXT, password VARCHAR(20)"
- for(int i=0;i<list.count();i++)
- {
- query.exec("SELECT * FROM Groups WHERE name='"+list.at(i)+"'");
- if(!query.isActive())
- qDebug()<<query.lastError();
- else
- {
- qDebug()<<"In table Groups was selected:"<<query.value(0).toString()<<query.value(1).toString()<<query.value(2).toString()<<query.value(3).toString()<<query.value(4).toString();
- }
- if(query.isValid())
- {
- exhibitors.append(query.value(2).toStringList());
- nameOfCreator=query.value(1).toString();
- }
- else
- qDebug()<<query.lastError();
На
- qDebug()<<"In table Groups was selected:"<<query.value(0).toString()<<query.value(1).toString()<<query.value(2).toString()<<query.value(3).toString()<<query.value(4).toString();
- ...
- qDebug()<<query.lastError();
говорит соответственно:
- In table Groups was selected: "" "" "" "" ""
Я так понимаю, дело в значениях таблицы. У меня начались серьёзные проблемы с работой БД. Долшло до того, что система выполняет всего один запрос в БД, после чего начинается вышеописанное.
Метод заполнения таблиц следующий:
- QString nameOfCreator;
- QString nameOfTheGroup;
- QString listOfTheGroupExhibitors;
- QString passwordOfTheNewGroup;
- QStringList listOfAlreadyExistingGroups;
- in>>nameOfCreator>>nameOfTheGroup>>listOfTheGroupExhibitors>>passwordOfTheNewGroup;
- QSqlQuery query;
- if(!listOfTheGroupExhibitors.contains(nameOfCreator))
- listOfTheGroupExhibitors.insert(0,nameOfCreator);
- query.exec("SELECT name FROM Groups");
- while(query.next())
- listOfAlreadyExistingGroups.append(query.value(0).toString());
- if(!listOfAlreadyExistingGroups.contains(nameOfTheGroup))
- {
- query.exec("INSERT INTO Groups(name, creator, exhibitors, files, password)" "VALUES(:name,:creator,:exhibitors,:files,:password)");
- query.bindValue(":name",nameOfTheGroup);
- query.bindValue(":creator",nameOfCreator);
- query.bindValue(":exhibitors",listOfTheGroupExhibitors);
- query.bindValue(":files",NULL);
- query.bindValue(":password",NULL);
- query.exec();
- }
Я так понимаю, встаёт вопрос о смене формата вводимых данных с QString на что-то другое. Что это может быть, если формат таблиц:
- name VARCHAR(30) PRIMARY KEY, creator VARCHAR(30),exhibitors TEXT, files TEXT, password VARCHAR(20)"
- Groups (name VARCHAR(30) PRIMARY KEY, creator VARCHAR(30),exhibitors TEXT, files TEXT, password VARCHAR(20))
В перспективе будет и BLOB. Тему также развиваю здесь. [qt-project.org]
You must log in to post a reply. Not a member yet? Register here!
