akjarjash 发表于 2020-6-9 17:16

Qt 中数据库查询的问题

在 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()

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() 的形式无完好的
不管了 哈哈   多谢帮助
页: [1]
查看完整版本: Qt 中数据库查询的问题