• 5884阅读
  • 11回复

qt有关数据库查询的问题 [复制链接]

上一主题 下一主题
离线xdhxdk
 
只看楼主 倒序阅读 楼主  发表于: 2012-04-30
— 本帖被 XChinux 从 论坛公告栏 移动到本区(2012-05-02) —
关键词: 数据库查询
void query::on_pushButton_clicked()
{
    QString present_query,destination_query;//为查询获得的参数定义
    present_query=ui->lineEdit->text();
    destination_query=ui->lineEdit_2->text();


     QSqlTableModel model;//定义一个model,便于操作数据
    model.setTable("Ticket");//选中一个数据库ticket进行操作
    model.setFilter("prsent=present_query");
    model.setFilter("destination=destination_query");
    model.select();
    if (model.rowCount()==1)
    {
      QSqlRecord record=model.record(0);
        int i = record.value("price").toInt();
        QMessageBox::information(this,tr("query"),tr("%1到%2的查票是:%3").arg(present_query).arg(destination_query).arg(i));
   }
   else
       QMessageBox::information(this,tr("query"),tr("您所查询的不存在!"));


}
点击按钮时,如果输入的是数据库里存有的信息,仍然弹出查询不存在的消息。
void query::on_pushButton_clicked()
{
    QString present_query,destination_query;//为查询获得的参数定义
    present_query=ui->lineEdit->text();
    destination_query=ui->lineEdit_2->text();


     QSqlTableModel model;//定义一个model,便于操作数据库
    model.setTable("Ticket");//选中一个数据库ticket进行操作
    model.setFilter("prsent=present_query");
    model.setFilter("destination=destination_query");
    model.select();
          QSqlRecord record=model.record(0);
        int i = record.value("price").toInt();
        QMessageBox::information(this,tr("query"),tr("%1到%2的查票是:%3").arg(present_query).arg(destination_query).arg(i));
   }


如果改成这样的,则报错,说“请求程序以一个不寻常的方式终止”,大概就这意思。
各位大侠,帮帮忙,小妹不是很懂啊
离线alexltr

只看该作者 1楼 发表于: 2012-04-30
1. 你的数据裤的结构是怎样的?
2. 这两句有问题 (大概看了一下)
  model.setFilter("prsent=present_query");
    model.setFilter("destination=destination_query");
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线xdhxdk
只看该作者 2楼 发表于: 2012-04-30
在主函数里建立的一个小的数据库。
static bool createConnection(void)//连接数据库
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//选择数据库类型

    db.setDatabaseName("datebase.dat");//建立数据库文件
    if(!db.open())
    {
        qDebug() << "Database Error: " ;

        return false;//打开数据库,否则输出错误
    }
      return true;

}
void createFakeData()
{
    QSqlQuery qq;//定义一个
    //qq.exec("DROP TABLE Ticket");
qq.exec("CREATE TABLE Ticket("
            "id int(20) PRIMARY KEY , "
            "present STING(50) , "
            "destination STRING(40) ,"
            "price INT(40) )");
qq.exec("INSERT INTO Ticket "
            "VALUES (1,”邯郸“,“邢台”,11)");
qq.exec("INSERT INTO Ticket "
            "VALUES (2,”邯郸“,“石家庄”,25)");
qq.exec("INSERT INTO Ticket "
            "VALUES (3,”邯郸“,“北京”,65)");
}

int main(int argc, char *argv[])
{


    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());//增加中文字体显示
    bool create = !QFile::exists("datebase.dat");


   if (!createConnection())//连接数据库
   {
       return 1;
   }
   if (create)//若没存在数据库文件,则创建

   {
      createFakeData();//建立ticket表

   }
    MainWindow w;
    w.show();

    return a.exec();
}


就是这样子的
离线xdhxdk
只看该作者 3楼 发表于: 2012-04-30
window xp
离线xdhxdk
只看该作者 4楼 发表于: 2012-04-30
model.setFilter(  );这个是按着书上写的。只是条件不同。
离线alexltr

只看该作者 5楼 发表于: 2012-04-30
QString strQuery = QString("present  = %1 AND destination =%2 ")
                                   .arg(present_query).arg(destination_query);

model.setFilter(strQuery);

試試看.
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 6楼 发表于: 2012-04-30
QString strQuery = QString("present  = '%1' AND destination = '%2' ")
                                   .arg(present_query).arg(destination_query);

model.setFilter(strQuery);
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 7楼 发表于: 2012-04-30
main()函數也有很多問題喔.
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线xdhxdk
只看该作者 8楼 发表于: 2012-04-30
还是不行,我把那两行屏蔽了,后面的采用if else 不变,结果还是显示,查询结果不存在,

如果把if else 改改,改成第二种的那种,就会显示消息了,不过,票价是0
离线xdhxdk
只看该作者 9楼 发表于: 2012-04-30
main函数就这么几句话,还有很多的问题啊?
大哥,帮忙看看呗
离线xdhxdk
只看该作者 10楼 发表于: 2012-05-02
改好了,谢谢啊,哈
离线淳于半邪

只看该作者 11楼 发表于: 2012-05-02
  bool create = !QFile::exists("datebase.dat");
if (create)//若没存在数据库文件,则创建

   {
      createFakeData();//建立ticket表

   }
这句判断就不要了吧!之前那个创建数据库的过程已经包含存在于不存在的两种情况,多余了啊!
快速回复
限100 字节
 
上一个 下一个