QT连接access数据库

待续_1006 2018-03-12 10:55:10
QT5.2.1连接VS2010

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=C:/test.mdb");
QSqlQuery q;
QString sqlString = "select * from ReturnInfo";
q.exec(sqlString);

int numRows;
if (db.driver()->hasFeature(QSqlDriver::QuerySize)) {
numRows = q.size();
} else {
// this can be very slow
q.last();
numRows = q.at() + 1;
qDebug()<<q.at();
}


读取数据正常,现在无法获取结果集的行数呢,不知道哪里有问题q.last()始终为-1
...全文
767 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jenf_Mu 2018-03-23
  • 打赏
  • 举报
回复
int QSqlQuery::size() const Returns the size of the result (number of rows returned), or -1 if the size cannot be determined or if the database does not support reporting information about query sizes. Note that for non-SELECT statements (isSelect() returns false), size() will return -1. If the query is not active (isActive() returns false), -1 is returned. 数据库不支持返回行数,Qt也没办法。 建议用next()遍历数据集。 如果实在想知道多少行,那就查count呗。
shoppo0505 2018-03-13
  • 打赏
  • 举报
回复
引用 楼主 shiyanbo_1006 的回复:
QT5.2.1连接VS2010

 QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=C:/test.mdb");
    QSqlQuery q;
    QString sqlString = "select * from ReturnInfo";
    q.exec(sqlString);

    int numRows;
    if (db.driver()->hasFeature(QSqlDriver::QuerySize)) {
        numRows = q.size();
    } else {
        // this can be very slow
        q.last();
        numRows = q.at() + 1;
        qDebug()<<q.at();
    }
读取数据正常,现在无法获取结果集的行数呢,不知道哪里有问题q.last()始终为-1
如果始终为-1,那应该是没有读取阿。 你确认数据都看到了?
shoppo0505 2018-03-13
  • 打赏
  • 举报
回复
引用 2 楼 shiyanbo_1006 的回复:
[quote=引用 1 楼 shoppo0505 的回复:] [quote=引用 楼主 shiyanbo_1006 的回复:] QT5.2.1连接VS2010

 QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=C:/test.mdb");
    QSqlQuery q;
    QString sqlString = "select * from ReturnInfo";
    q.exec(sqlString);

    int numRows;
    if (db.driver()->hasFeature(QSqlDriver::QuerySize)) {
        numRows = q.size();
    } else {
        // this can be very slow
        q.last();
        numRows = q.at() + 1;
        qDebug()<<q.at();
    }
读取数据正常,现在无法获取结果集的行数呢,不知道哪里有问题q.last()始终为-1
如果始终为-1,那应该是没有读取阿。 你确认数据都看到了?[/quote] 是啊逼的我在获取数据的同时,下发了一个条件一样的select count函数查询来获取结果集格式[/quote] QT没玩过。 我查了下,网上QString的声明是这样子的: QSqlQuery query; QString qry = QString("SELECT Count(*) FROM customers"); query.prepare(qry); 要不你试试看。
待续_1006 2018-03-13
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
[quote=引用 楼主 shiyanbo_1006 的回复:] QT5.2.1连接VS2010

 QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=C:/test.mdb");
    QSqlQuery q;
    QString sqlString = "select * from ReturnInfo";
    q.exec(sqlString);

    int numRows;
    if (db.driver()->hasFeature(QSqlDriver::QuerySize)) {
        numRows = q.size();
    } else {
        // this can be very slow
        q.last();
        numRows = q.at() + 1;
        qDebug()<<q.at();
    }
读取数据正常,现在无法获取结果集的行数呢,不知道哪里有问题q.last()始终为-1
如果始终为-1,那应该是没有读取阿。 你确认数据都看到了?[/quote] 是啊逼的我在获取数据的同时,下发了一个条件一样的select count函数查询来获取结果集格式

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧