• 4950阅读
  • 8回复

(急)很奇怪的QSqlQuery,请高人指点 [复制链接]

上一主题 下一主题
离线蓝调
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-13
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("/home/person.db");
    if (!db.open()) {
        QMessageBox::critical(0, qApp->tr("Cannot open database"),
            qApp->tr("Unable to establish a database connection.\n"
                     "This example needs SQLite support. Please read "
                     "the Qt SQL driver documentation for information how "
                     "to build it.\n\n"
                     "Click Cancel to exit."), QMessageBox::Cancel);
        return false;
    }

    QSqlQuery query();
    query.exec("create table person (id int primary key, "
               "firstname varchar(20), lastname varchar(20))");
    query.exec("insert into person values(101, 'Danny', 'Young')");
    query.exec("insert into person values(102, 'Christine', 'Holand')");    
    query.exec("insert into person values(103, 'Lars', 'Gordon')");
    query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
    query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");
    
    QSqlQuery query_1("select * from person");      
    qDebug() <<"------------------------------"<<query_1.record().field(1).value();    
    while (query_1.next()) {
         QString country = query_1.value(query_1.record().indexOf("firstname")).toString();
         qDebug() <<"------------------------------"<<query_1.record().field(1).value();     }



以上是我的代码,粗体部分是一摸一样的代码,为什么运行后的结果却不一样呢,如图是运行的结果:
离线channon
只看该作者 1楼 发表于: 2009-10-13
你的运行结果是正确的。

在while (query_1.next())之前,还没有移到第一条记录上嘛
操作系统: Archlinux
Qt SDK: Qt 4.7.1 for Linux
开发方向: Qt,Java
常用数据库:Firebird、SQLite
离线蓝调
只看该作者 2楼 发表于: 2009-10-13
回 1楼(channon) 的帖子
在创建完表 和 insert 数据完,如下:
QSqlQuery query();
    query.exec("create table person (id int primary key, "
               "firstname varchar(20), lastname varchar(20))");
    query.exec("insert into person values(101, 'Danny', 'Young')");
    query.exec("insert into person values(102, 'Christine', 'Holand')");    
    query.exec("insert into person values(103, 'Lars', 'Gordon')");
    query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
    query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");

假如我想得到 redord 的一个域值,是不是一定要重新定义一个 QSqlQuery query_1("select * from person");    然后在   query_1.next() 从而才 active query ???????
离线蓝调
只看该作者 3楼 发表于: 2009-10-13
回 1楼(channon) 的帖子
还有就是今后对每条记录进行添加,更改,删除,是不是都要重新定义 QSqlQuery query("select * from person") 啊,然后再 query.next 才能进行相应操作
离线蓝调
只看该作者 4楼 发表于: 2009-10-13
麻烦高手指点一下啊
离线hiti_tony
只看该作者 5楼 发表于: 2009-10-13
回 3楼(蓝调) 的帖子
每条记录进行添加,更改,删除?
你改变sql语句不就行了,干吗还要用("select * from person")
离线蓝调
只看该作者 6楼 发表于: 2009-10-13
回 5楼(hiti_tony) 的帖子
比如更改某条记录,那也要得到该条记录吧,必须要 where 什么什么,所以还是要query一下啊
离线foxyz

只看该作者 7楼 发表于: 2009-10-13
QT本身就提供了很好的数据库链接管理方式。你用多少个query都无所谓,链接可以只有一个。所以,你爱怎么用都可以
离线蓝调
只看该作者 8楼 发表于: 2009-10-13
回 7楼(foxyz) 的帖子
谢谢!
快速回复
限100 字节
 
上一个 下一个