吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1175|回复: 4
收起左侧

[求助] Qt 中数据库查询的问题

[复制链接]
akjarjash 发表于 2020-6-9 17:16
在 Qt 中使用 Access 数据库进行条件查询
        // 设置查询语句;
        query.prepare("select * from 表_数据字典 where 键 = ? ;");
        query.addBindValue(itemText);
        // 上方两条语句查询不到但是直接使用下方的整条 SQL 语句是可以的
        query.prepare("select * from 表_数据字典 where 键 = '企业类型';");
        // 查询数据库
        if (query.exec())

如果注释上方的两条 SQL 语句启用加粗的语句可以直接得到查询结果但是使用上方的两条SQL语句注释加粗的却无法得到查询结果?
很是神奇,不明白是什么原因?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

brujah 发表于 2020-6-9 18:11
试一下:
query.prepare("select * from 表_数据字典 where 键 = ?")
query.bindValue(0, itemText)

或者改为ODBC数据库表示方式:
query.prepare("select * from 表_数据字典 where 键 =:占位符")
query.bindValue(":占位符", itemText)
 楼主| akjarjash 发表于 2020-6-9 19:55
brujah 发表于 2020-6-9 18:11
试一下:
query.prepare("select * from 表_数据字典 where 键 = ?")
query.bindValue(0, itemText)

还是不可以的 但是当使用 :占位符 形式的时候好像还有点起色是参数不足,期待是1  另也采用这种形式但是将其更换为英文 :key 程序运行无误但是查询结果还是出不来

更加详细的代码:
    // 创建数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    // 创建查询对象
    QSqlQuery query;
    // 设置数据库路径
    QString dbFilePath = QDir::currentPath() +"/Data.mdb";
    // 判断数据库文件是否存在
    if (!QFile::exists(dbFilePath))
    {
        ::QMessageBox::about(this,"提示信息","数据库文件不存在!");
        return;
    }
    // 设置数据库
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ="+dbFilePath+";UID='';PWD=''");
    // 打开数据库进行操作
    try
    {
        // 打开数据库
        if (!db.open())
        {
            ::QMessageBox::about(this,"提示信息","抱歉,数据库打开失败!");
            return;
        }
        // 设置查询语句;
        query.prepare("select * from 表_数据字典 where 键 = ? ;");
        query.bindValue(0,itemText);
        // 查询数据库
        if (query.exec())
        {
            // 循环添加设置节点
            while(query.next())
            {



brujah 发表于 2020-6-9 20:47
akjarjash 发表于 2020-6-9 19:55
还是不可以的 但是当使用 :占位符 形式的时候好像还有点起色是参数不足,期待是1  另也采用这种形式但是 ...

Access数据库我没操作过,但感觉你的问题出在db.setDatabaseName后面的配置上,你可以用qDebug() << db.isValid()来验证db每步返回是否有效,或者直接用qDebug() << db.lastError()

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
akjarjash + 1 + 1 热心回复!

查看全部评分

 楼主| akjarjash 发表于 2020-6-10 07:27
brujah 发表于 2020-6-9 20:47
Access数据库我没操作过,但感觉你的问题出在db.setDatabaseName后面的配置上,你可以用qDebug()

测试了下 LastError 显示的是空文本 isValid() 显示的是 true 唉不管了可能是 Bug 吧 直接改用拼接字符串的方式了  另外有一个登陆窗体中就是用的 where name = ? and pwd = ? ; bindValue() 的形式无完好的
不管了 哈哈   多谢帮助
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 15:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表