精华内容
下载资源
问答
  • 对sql数据库实现多重条件查询,做了一个简单的demo void ASqlQuery::SlotQuery() { QString sqlCmd; bool flag = false; if(ui->Edit_num->text() != "") { sqlCmd = QString::fromUtf8("select * ...

    对sql数据库实现多重条件查询,做了一个简单的demo

    void ASqlQuery::SlotQuery()
    {
        QString sqlCmd;
        bool flag = false;
        if(ui->Edit_num->text() != "")//序号
        {
            sqlCmd = QString::fromUtf8("select * from WeldQuality where uQualityNo = %1").arg(ui->Edit_num->text().toInt());   // uQualityNo 是int 

            }

            flag = true;
        }

        if(ui->Edit_ProgramNum->text() != "")//规范号
        {
            if(flag == false)
            {
                sqlCmd = QString::fromUtf8("select * from WeldQuality where uProgramNum = %1").arg(ui->Edit_ProgramNum->text().toInt());  // uProgramNum 是int 

            }
            else
            {
                sqlCmd = QString::fromUtf8("select * from (%1)  where uProgramNum = %2").arg(sqlCmd).arg(ui->Edit_ProgramNum->text().toInt()); 
            }
            flag = true;
        }

        if(ui->Edit_CustomizeField->text() != "")//自定义字段
        {
            if(flag == false)
            {
                sqlCmd = QString::fromUtf8("select * from WeldQuality where sField_Customize1 = '%1'").arg(ui->Edit_CustomizeField->text()); // sField_Customize1 是varchar ,需要使用引号'%1', int型的数字不需要

            }
            else
            {
                sqlCmd = QString::fromUtf8("select * from (%1)  where sField_Customize1 = '%2'").arg(sqlCmd).arg(ui->Edit_CustomizeField->text());
            }
            flag = true;
        }

        if(QueryTimeEnableFlag == true)//时间
        {
            //时间
            QString sDateEditStart = ui->dateEdit_start->text();
            QString sDateEditEnd = ui->dateEdit_end->text();
            QString sTimeEditStart = ui->timeEdit_start->text();
            QString sTimeEditEnd = ui->timeEdit_end->text();
            if(flag == false)
            {
                sqlCmd = QString::fromUtf8("select * from WeldQuality where sQualityDate >= '%1' and sQualityTime >= '%2'").arg(sDateEditStart).arg(sTimeEditStart);
                sqlCmd = QString::fromUtf8("select * from (%1) where sQualityDate <= '%2' and sQualityTime <= '%3'").arg(sqlCmd).arg(sDateEditEnd).arg(sTimeEditEnd);
            }
            else
            {
                sqlCmd = QString::fromUtf8("select * from (%1)  where sQualityDate >= '%2' and sQualityTime >= '%3'").arg(sqlCmd).arg(sDateEditStart).arg(sTimeEditStart);
                sqlCmd = QString::fromUtf8("select * from (%1) where sQualityDate <= '%2' and sQualityTime <= '%3'").arg(sqlCmd).arg(sDateEditEnd).arg(sTimeEditEnd);
            }
        }

        //sqlCmd = QString::fromUtf8("select * from WeldQuality where sQualityDate = '2021-01-27'");//ok
        //sqlCmd = QString::fromUtf8("select * from WeldQuality where sQualityDate > '2021-01-27'");//ok
        //sqlCmd = QString::fromUtf8("select * from WeldQuality where sQualityDate = '2021-01-27' and ( sQualityTime > '09:40:54' and sQualityTime < '18:00:54')");//ok
        model->setQuery(sqlCmd); //QSqlQueryModel->setQuery(sqlCmd)

    }

    展开全文
  • QT5.7条件查询数据库

    千次阅读 2017-04-24 18:32:49
    QString guanlibain; QString gname; QString bumen; QString quan; QString bianhao; QSqlQuery query;... query.exec(QString("SELECT * FROM member WHERE (管理员姓名='%1')").arg(Menage
     QString guanlibain;
        QString gname;
        QString bumen;
        QString quan;
        QString bianhao;
        QSqlQuery query;
        query.exec(QString("SELECT * FROM member WHERE (管理员姓名='%1')").arg(Menager::loginname));
        while(query.next())
        {
            guanlibain = query.value(0).toString();
            gname= query.value(1).toString();
            bumen = query.value(2).toString();
            quan = query.value(3).toString();
            bianhao = query.value(4).toString();
            qDebug()<<QString("A:%1 B:%2 C:%3 D:%4 E:%5 ").arg(guanlibain).arg(gname).arg(bumen).arg(quan).arg(bianhao);
        }
    展开全文
  • 数据库使用:QSQLITE数据库建立:1)创建数据库表数据类型 2)存入测试数据(.CSV文件数据导入)3)tabview显示表数据4)根据条件查询数据遇见问题总结:主要出现在数据库查询部分,但是归根结底还是数据库time类型...

    数据库使用:QSQLITE

    数据库建立:

    1)创建数据库表数据类型 

    2)存入测试数据(.CSV文件数据导入)

    3)tabview显示表数据

    4)根据条件查询数据


    遇见问题总结:

    主要出现在数据库查询部分,但是归根结底还是数据库time类型的问题(varchar)

    刚开始数据库表为:


    可以看到time数据类型varchar时,数据存入格式为2018/4/28即为yyyy/m/dd、yyyy/m/dd、yyyy/mm/d、yyyy/mm/dd四种格式。问题就出在这。由于数据库查询时语句采用的是QString字符串匹配,代码为

       char *ch;
       QSqlQueryModel *mod = new QSqlQueryModel(this);
       QDate dateEdit=ui->dateEdit->date();
       QString date=dateEdit.toString("yyyy/MM/dd");
       qDebug()<<"日期:"<<date;
       QByteArray ba=date.toLatin1();
       ch=ba.data();
       qDebug()<<"日期:"<<ch;
       mod->setQuery(QString("select * from hdata1 where time = '%1'").arg(ch));
       qDebug()<<"转换"<<QString("select * from hdata where time ='%1'").arg(ch);
       if (mod->lastError().isValid())
           qDebug() << mod->lastError();
       ui->tableView->setModel(mod);

    这里就有一个问题了,当我们真正查询时,会发现查询的是这个:

    日期: "2018/04/29"

    日期: 2018/04/29

    转换 "select * from hdata where time ='2018/04/29'" 

    刚开始我没有注意到时间上的区别,后来仔细一想,还是和时间time的类型varchar有关系,它是按字符形式来匹配的,

    因此按字符形式匹配时,‘2018/4/29’与‘2018/04/29’是不相同的。

    这是最后才想到的问题,一点点小问题搞得怀疑自我了,真的不能忽视细节!

    最后代码语句没有更改,将数据库内容更改了,一下子就查出来了!

    查询结果:

    当然,遇到了问题不仅仅是解决了问题,同时也加深了我对其他问题的理解;

    第一、就是不同数据库数据类型,不同数据类型如何选择类型,本文的时间其实 用date更好,在mysql中使用datetime都会自动转换,而不是在这里设计到字符的问题了。当初也是字符出错,处理方式虽然对了,但是还是数据库类型不一致,导致后来没有察觉到。

    void HData::on_pushButton_clicked()
    {
        char *ch0;
        char *ch1;
        char *ch2;
        QSqlQueryModel *mod = new QSqlQueryModel(this);
        QDate dateEdit=ui->dateEdit->date();
        QString date=dateEdit.toString("yyyy/MM/dd");
        QStringList list = date.split("/");//QString字符串分割函数
    //    qDebug()<<"日期:"<<date;
    //    QByteArray ba=date.toLatin1();
    //    ch=ba.data();
    //    qDebug()<<"日期:"<<ch;
    //        qDebug()<<list[i]<<endl;
            QByteArray ba0=list[0].toLatin1();
            QByteArray ba1=list[1].toLatin1();
            QByteArray ba2=list[2].toLatin1();
            ch0=ba0.data();
            qDebug()<<ch0;
            ch1=ba1.data();
            qDebug()<<ch1;
            ch2=ba2.data();
            qDebug()<<ch2;
        mod->setQuery(QString("select * from hdata where time=%1/%2/%3").arg(ch0).arg(ch1).arg(ch2));
        if (mod->lastError().isValid())
            qDebug() << mod->lastError();
        ui->tableView->setModel(mod);
    }

    对QString字符串的分割有了深入的理解!

    第二、对数据库数据段时间查询,有了深入的理解,同时知道了数据库这方面还是有点薄弱(不太常用数据库),下面就需要搞基本数据库的书,结合项目深入探索一下,很爽的感觉!(方向:分布式数据库技术要掌握)

    一些基本的段时间查询语句总结如下:

    select * from tongji where [销售时间]=date('now','localtime') --当天
    select * from tongji where strftime('%Y%m',[销售时间])=strftime('%Y%m','now','localtime')  --当月
    select * from tongji where strftime('%Y',[销售时间])=strftime('%Y','now','localtime')  --当年

    对于项目中取变量数据查询,需要QString匹配:

    setQuery(QString("select * from hdata1 where time = '%1'").arg(ch));

    QString SqlStr = QString("time > '%1' and time < '%2'").arg(startDateTime).arg(endDateTime);
    QString SqlStr = QString("select * from hdata where time between '%1' and '2%'").arg(startDateTime).arg(endDateTime);
    model->setFilter(SqlStr);//按这个方式查询
    model->select();

    第三,QSQLITE数据类型(摘取一些)




    获取的时间函数date():



    写了这篇文章,目的是也希望遇到同样问题的朋友,有一个参考解决的方法!

    不至于像我这样摸索半天,浪费时间!毕竟时间很宝贵!

    展开全文
  • 搜索引擎搜索出来的结果也基本上都是翻页显示的,那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt数据库操作的封装也是相当完美的,显示也是如此,为此...

    dbbb258f12926867072c77a96af099d7.png

    一、前言

    在Qt与数据库结合编程的过程中,记录一多,基本上都需要用到翻页查看记录,翻页有个好处就是可以减轻显示数据的表格的压力,不需要一次性将数据库表的记录全部显示,也基本上没有谁在一页上需要一次性显示所有记录,搜索引擎搜索出来的结果也基本上都是翻页显示的,那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt对数据库操作的封装也是相当完美的,显示也是如此,为此特意封装成了一个类,直接用就行。

    主要功能:

    1. 自动按照设定的每页多少行数据分页
    2. 只需要传入表名/字段集合/每页行数/翻页指示按钮/文字指示标签
    3. 提供公共静态方法绑定字段数据到下拉框
    4. 建议条件字段用数字类型的主键,速度极快
    5. 增加线程查询符合条件的记录总数,数据量巨大时候不会卡主界面
    6. 提供查询结果返回信号,包括当前页/总页数/总记录数/查询用时
    7. 可设置所有列或者某一列对齐样式例如居中或者右对齐
    8. 可设置增加一列,列的位置,标题,宽度
    9. 可设置要查询的字段集合

    二、代码思路

    void DbPage::bindData(const QString &sql)
    {
        queryModel->setQuery(sql, QSqlDatabase::database(connName));
        tableView->setModel(queryModel);
    
        //依次设置列标题列宽
        int columnCount = tableView->model()->columnCount();
        int nameCount = columnNames.count();
        columnCount = columnCount > nameCount ? nameCount : columnCount;
    
        QList<QString> columnNames = this->columnNames;
        QList<int> columnWidths = this->columnWidths;
    
        //根据设置添加新列,将对应新列的标题名称和宽度按照索引位置插
        if (insertColumnIndex >= 0) {
            columnCount++;
            columnNames.insert(insertColumnIndex, insertColumnName);
            columnWidths.insert(insertColumnIndex, insertColumnWidth);
            queryModel->insertColumn(insertColumnIndex);
        }
    
        //设置列标题和列宽度
        for (int i = 0; i < columnCount; i++) {
            queryModel->setHeaderData(i, Qt::Horizontal, columnNames.at(i));
            tableView->setColumnWidth(i, columnWidths.at(i));
        }
    
        if (labPageCurrent != 0) {
            labPageCurrent->setText(QString("第 %1 页").arg(pageCurrent));
        }
    
        if (labPageCount != 0) {
            labPageCount->setText(QString("共 %1 页").arg(pageCount));
        }
    
        if (labResultCount != 0) {
            labResultCount->setText(QString("共 %1 条").arg(resultCount));
        }
    
        if (labResultCurrent != 0) {
            labResultCurrent->setText(QString("每页 %1 条").arg(resultCurrent));
        }
    
        if (labInfo != 0) {
            labInfo->setText(QString("共 %1 条  每页 %2 条  共 %3 页  第 %4 页").arg(resultCount).arg(resultCurrent).arg(pageCount).arg(pageCurrent));
        }
    
        //发送结果信号
        emit receivePage(pageCurrent, pageCount, resultCount, resultCurrent);
    }
    
    void DbPage::slot_receiveCount(quint32 count, double msec)
    {
        if (labResult != 0) {
            labResult->setText(QString("查询用时 %1 秒").arg(QString::number(msec / 1000, 'f', 3)));
        }
    
        resultCount = count;
    
        int yushu = resultCount % resultCurrent;
    
        //不存在余数,说明是整行,例如300%5==0
        if (yushu == 0) {
            if (resultCount > 0 && resultCount < resultCurrent) {
                pageCount = 1;
            } else {
                pageCount = resultCount / resultCurrent;
            }
        } else {
            pageCount = (resultCount / resultCurrent) + 1;
        }
    
        //2014-10-9增加翻页按钮可用不可用处理,如果只有一页数据,则翻页按钮不可用
        if (pageCount <= 1) {
            btnFirst->setEnabled(false);
            btnLast->setEnabled(false);
            btnNext->setEnabled(false);
            btnPre->setEnabled(false);
        } else {
            btnFirst->setEnabled(true);
            btnLast->setEnabled(true);
            btnNext->setEnabled(true);
            btnPre->setEnabled(true);
        }
    
        tempSql = QString("select %1 from %2 %3 order by %4").arg(selectColumn).arg(tableName).arg(whereSql).arg(orderSql);
        sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); //组织分页SQL语句
    
        bindData(sql);
    }
    
    void DbPage::first()
    {
        if (pageCount > 1) {
            startIndex = 0;
            pageCurrent = 1;
            sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent);
            bindData(sql);
            btnLast->setEnabled(true);
            btnNext->setEnabled(true);
        }
    
        btnFirst->setEnabled(false);
        btnPre->setEnabled(false);
    }
    
    void DbPage::previous()
    {
        if (pageCurrent > 1) {
            pageCurrent--;
            startIndex -= resultCurrent;
            sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent);
            bindData(sql);
            btnLast->setEnabled(true);
            btnNext->setEnabled(true);
        }
    
        if (pageCurrent == 1) {
            btnFirst->setEnabled(false);
            btnPre->setEnabled(false);
        }
    }
    
    void DbPage::next()
    {
        if (pageCurrent < pageCount) {
            pageCurrent++;
            startIndex += resultCurrent;
            sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent);
            bindData(sql);
            btnFirst->setEnabled(true);
            btnPre->setEnabled(true);
        }
    
        if (pageCurrent == pageCount) {
            btnLast->setEnabled(false);
            btnNext->setEnabled(false);
        }
    }
    
    void DbPage::last()
    {
        if (pageCount > 0) {
            startIndex = (pageCount - 1) * resultCurrent;
            pageCurrent = pageCount;
            sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent);
            bindData(sql);
            btnFirst->setEnabled(true);
            btnPre->setEnabled(true);
        }
    
        btnLast->setEnabled(false);
        btnNext->setEnabled(false);
    }
    

    三、效果图

    93f59f935b8c80351d4dc53bc1450846.png

    四、开源主页

    以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。

    1. 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
    2. 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
    3. 个人主页:https://blog.csdn.net/feiyangqingyun
    4. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
    展开全文
  • 请问用什么语句可以实现SQLITE数据库的多条件查询?查询的条件有一个或者多个,也可能是空的。谁能帮我解答一下。
  • Qt开源作品19-通用数据库翻页查询

    千次阅读 2020-05-25 08:56:01
    那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt数据库操作的封装也是相当完美的,显示也是如此,为此特意封装成了一个类,直接用就行。 主要功能: 自动按照设定...
  • 搜索引擎搜索出来的结果也基本上都是翻页显示的,那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt数据库操作的封装也是相当完美的,显示也是如此...
  • 在进行数据库查询时,有完整查询和模糊查询之分。一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件其中关于条件,SQL提供了四种匹配模式:1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,...
  • Qt QSqlTableModel使用心得连接数据库执行sql查询条件显示,排序获取记录数,列数以及记录内容,字段内容新增,修改,删除,恢复其它1---------------连接数据库(我用的access2003做实验)在.pro文件添加QT +=SQL2-...
  • 获取dateEdit控件的日期 //日期 QDate date=ui->dateEdit->date(); QString year=QString::number(date.year()); //年 QString month=QString::number(date.month());...在数据库中使用dat
  • F查询(取字段的值)关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能的双下划线,但是如果有这样一个需求,查询a表中的aa字段数值大于b表...
  • Qt操作数据库模式之一QSqlQueryModelQt操作数据库的几个层次1、Qt SQL模块简介2、驱动层3、SQL接口层4、用户接口层5、数据库操作抽象层级创建数据库查询记录条件查询 Qt操作数据库的几个层次 1、Qt SQL模块简介 QT...
  • Qt编写数据库通用翻页demo(开源)

    千次阅读 2018-09-08 16:28:19
    Qt数据库结合编程的过程中,记录一多,基本上...那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt数据库操作的封装也是相当完美的,显示也是如此,为此特意封装...
  • 生成exe ...。。) ... 执行完以后,打开项目地址生成的debug文件夹: 接着,打开Release文件夹,将生成的exe文件拷贝出来,放到一个单独...有可能会像我一样,出现多个编译器,这里选择 Qt5.14.1(MinGW)。 打开进入到e://d
  • Qt数据库结合编程的过程中,记录一多,基本上...那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt数据库操作的封装也是相当完美的,显示也是如此,为此特意封装...
  • QT SQL 变量 条件查询 插入数据

    千次阅读 2013-06-03 22:00:44
    QT SQL 變量值 條件查詢 插入數據 (本文只是总结网络上的教程) 在操作数据库时 SQL语句中难免会用到变量 比如 在條件值已知的情況下 INSERT INTO table_name (列1, 列2,...
  • 求大神帮忙,用QT写了一个应用程序,有很多查询条件,现在我想要只有一个查询条件的例程,想依葫芦画瓢。求大神带,我用的 数据库是 SQL server 2008. 谢谢大神了。空白框 是显示的 查询结果。就是一个查询按钮,一...
  • 搜索引擎搜索出来的结果也基本上都是翻页显示的,那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt数据库操作的封装也是相当完美的,显示也是如此,为此...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

qt数据库条件查询