【发布时间】:2014-11-16 23:04:13
【问题描述】:
我的QSqlQuery返回的结果总是相同的顺序,不管ORDER BY状态如何:
void Sy_loggingModel::reload()
{
auto query = d_->buildQuery();
query.setForwardOnly( true );
if ( !query.exec() ) {
throw Sy_exception( QObject::tr( "Failed to query logging data: " ) +
query.lastError().text() );
}
beginResetModel();
qDebug() << query.lastQuery()
<< d_->filter_ // First ? param
<< d_->sortedColumn_; // Second ? param
d_->entries_.clear();
while ( query.next() ) {
auto timestamp = query.value( 1 ).toLongLong();
auto level = query.value( 2 ).toInt();
d_->entries_ << Sy_loggingModel_d::Entry{
query.value( 0 ).toLongLong(),
QDateTime::fromMSecsSinceEpoch( timestamp ).toString(),
static_cast< Sy_loggerInterface::DebugLevel >( level ),
query.value( 3 ).toString() };
qDebug() << "\t" << query.value( 0 ).toLongLong()
<< timestamp
<< level
<< query.value( 3 ).toString();
}
endResetModel();
}
在排序顺序交替时产生此输出:
"SELECT rowid, timestamp, debugLevel, message FROM Sy_logger WHERE rowid >= ? AND debugLevel IN ( 0, 1, 2 ) ORDER BY ? DESC;" 0 1
1 1415399097350 0 "Opened database ./logs/Syren2.log"
2 1415399097382 1 "Listening on port 23000"
3 1415399418377 2 "New log rotation settings received, Metric: 0, Interval: 720"
4 1416178611851 2 "Opened database ./logs/Syren2.log"
5 1416178611852 2 "Listening on port 23000"
6 1416178612776 2 "New log rotation settings received, Metric: 0, Interval: 720"
"SELECT rowid, timestamp, debugLevel, message FROM Sy_logger WHERE rowid >= ? AND debugLevel IN ( 0, 1, 2 ) ORDER BY ? ASC;" 0 1
1 1415399097350 0 "Opened database ./logs/Syren2.log"
2 1415399097382 1 "Listening on port 23000"
3 1415399418377 2 "New log rotation settings received, Metric: 0, Interval: 720"
4 1416178611851 2 "Opened database ./logs/Syren2.log"
5 1416178611852 2 "Listening on port 23000"
6 1416178612776 2 "New log rotation settings received, Metric: 0, Interval: 720"
从命令行使用时,SQL 语句返回预期的结果集。有什么建议么?我正在使用 Qt v5.3.2。
【问题讨论】:
-
看起来您正在使用准备好的查询,但您的示例代码不包含构建查询的部分。
-
@MrEricSir 你说得对,我觉得没有必要显示代码,因为我给出了
QSqlQuery::lastQuery()返回的输出 - 这是重要的一点。