• 7328阅读
  • 8回复

qt4访问sqlite3的问题 [复制链接]

上一主题 下一主题
离线fayhong
 
只看楼主 倒序阅读 楼主  发表于: 2010-06-25
关键词: QT4界面

最近在做一个Linux下的项目,是网吧收费系统,图形界面是用Qt4来做的,数据库用sqlite3,现在遇到了一些问题,由于涉及到了用户的登入和注册,有关用户的信息都存在数据库里,数据库中有张表叫users,create table users(uid integer primary key, uname text, passwd varchar(16),balance float);我想在用户界面登入时能访问表中的uid,不是uid中的数据就不让登入,需要注册,注册后能自动的在users表中添加用户信息。可是不知道要怎么做,因为是自学的Qt4,不知道要怎么处理,急需各路高手出谋划策,小弟感激不尽!
离线fayhong
只看该作者 1楼 发表于: 2010-06-25
以下是关于登入控件的代码,感觉没有错,可还是不行,调试成功,输入数据的时候,我输的是NetBAr.db 数据库中users表中的数据,可提示是这样的

请求帮忙,指点!!!
void MainDialog::on_loginbutton_clicked()
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("NetBar.db");
    bool ok=db.open();
    if(!ok)
    {
        QMessageBox::critical(this,tr("Error"),tr("Can't open database: NetBar.db"));
    }
    else
    {
        QSqlQuery query;
        if (query.exec("select * from users"))
                {
                        QString uid, passwd;
                        uid = query.value(0).toString();
                        passwd = query.value(2).toString();
                        if(m_ui->userline->text().trimmed()==uid && m_ui->passwdline->text()==passwd)
                            accept();
                        else{
                            QMessageBox::warning(this,tr("Warning"),tr("user name or password error!"),QMessageBox::Yes);
                            m_ui->userline->clear();
                            m_ui->passwdline->clear();
                            m_ui->userline->setFocus();
                        }
                    }
    }
}
离线fayhong
只看该作者 2楼 发表于: 2010-06-25
只是数据库中表的内容
离线gzfreeman
只看该作者 3楼 发表于: 2010-06-25
先根据用户名中的问题框 获得用户的用户名后在数据库里根据用户名查询是否有这个用户,如果没有的话就转到注册流程,有的话就可以根据该用户名来查询该用户名在数据库中的所有信息(包括密码等等) 然后再跟用户输入的密码作比较,正确的就登入,错误的就不让登陆,当然可以在数据结构里面加多两个字段,是用来计数和设定改用户的状态使用的(防止恶意的尝试登入)达到一定次数的时候可将该用户锁定
离线fayhong
只看该作者 4楼 发表于: 2010-06-25
回 3楼(gzfreeman) 的帖子
这个我知道,就是不知道我那错哪了,我的代码的意思就是你说的这个意思!呵呵,你有做过类似的项目吗? 有的话给点提示,感激不尽呀,都折腾了我好几天了!
离线gzfreeman
只看该作者 5楼 发表于: 2010-06-29
void MainDialog::on_loginbutton_clicked()
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("NetBar.db");
    bool ok=db.open();
    if(!ok)
    {
        QMessageBox::critical(this,tr("Error"),tr("Can't open database: NetBar.db"));
    }
    else
    {
        QSqlQuery query;
        if (query.exec("select * from users"))  //你这里查询所有的记录出来,有何作用? 应该是根据m_ui->userline->text().trimmed()来查询数据库里面是否有这个ID然后再看密码是否正确
                {
                        QString uid, passwd;
                        uid = query.value(0).toString();      
                        passwd = query.value(2).toString();
                        if(m_ui->userline->text().trimmed()==uid && m_ui->passwdline->text()==passwd)
                            accept();
                        else{
                            QMessageBox::warning(this,tr("Warning"),tr("user name or password error!"),QMessageBox::Yes);
                            m_ui->userline->clear();
                            m_ui->passwdline->clear();
                            m_ui->userline->setFocus();
                        }
                    }
    }
}
离线liuxingfly
只看该作者 6楼 发表于: 2010-07-02
个人感觉,类似这种登录查询问题,应该像楼上的兄弟说的,根据用户名去查数据库,如果没有返回,证明用户名错误,如果有返回,再比对密码。
至于LZ的程序,原因在于query.exec()后,如果有查询到的话,query是一个数据库中数据的集合,而不是单条数据,因此一般情况下应该是使用query.first(),先使其指向集合的第一条记录,然后采用循环query.next(),通过判断query.isValid()控制循环。
楼主的程序中,通过query.exec()查询到了所有的数据,可是query.value(0)只是其中一条记录的数据,因此报“用户名和密码错误”应该是正确的。
离线fayhong
只看该作者 7楼 发表于: 2010-07-07
回 5楼(gzfreeman) 的帖子
谢谢,挺久没上这了,问题解决了,也交了,应该是和passwdline中输入的想结合。
离线fayhong
只看该作者 8楼 发表于: 2010-07-07
回 6楼(liuxingfly) 的帖子
嗯,问题解决了,差不多就是这意思,呵呵,谢谢
快速回复
限100 字节
 
上一个 下一个