我正在使用qt 4.8和psql驱动程序连接到postgres 9.1数据库。qt选择不与where语句工作
我正在做一个通用库来连接并插入数据库;几乎所有方法都已准备就绪,但在最后一个方法中,我需要从表中进行选择以将值插入另一个表中。当我尝试select语句时,它的行为有所不同。根据代码反过来,但没有一个我做的测试导致了一个正确的解决方案。 这里是我的代码:
struct enfriadores enf;
enf.horaE=time(&enf.horaE);
enf.horaS=time(&enf.horaS)+1900;
//base1.insertaEvento(db,enf);
QString consulta = "Select id_evento from eventos where extract(epoch from horae)=:hora_bus";
QDateTime hora_bus(QDateTime::fromTime_t(enf.horaE));
//qDebug()<< enf.horaE;
QSqlQuery query(db);
query.prepare(consulta);
query.bindValue(":hora_bus",hora_bus);
query.exec();
query.first();
while(query.next())
{
int valor = query.value(0).toInt();
qDebug() << valor << endl;
}
的base1.insertaEvento是一类我也插在哪里之后,我需要提取ID表数据的调用。
qDebug() << enf.horaE;
我把它知道,如果时间是正确的形式之前,我把它附加到查询,顺便说一句,是正确的。 horaE取自我在前面提到的类中声明的结构。
当我运行查询,因为它与它运行良好的while(query.next())
但返回任何结果,如果我删除了while循环,但仍维持query.next()
编译器返回
QSqlQuery::value: not positioned on a valid record
0
我使用query.first尝试()方法和query.setForwardOnly(true),但结果相同。
另外,如果我用qDebug()尝试hora_bus的值并直接在psql控制台中替换它,我会得到一个肯定的匹配,所以问题不在于数据插入或格式化的方式,而是查询的方式检索我相信但不知道如何解决这个 任何想法? 感谢
试过,但我得到了下一个错误: “错误:从'time_t {aka long int}'转换为'const QVariant'是不明确的”,如果我通过QDatetime并检查它的值,它可以正常工作... –
@克罗诺斯:好的,看我的编辑。但是当你说你检查它的值是在你的程序中完成的,而不是在postgresql中。这曾经被转换为一个SQL参数,该值并非您所期望的。 –