zoukankan      html  css  js  c++  java
  • access数据库调用

    1、工程环境配置(vs+qt)

    点击项目,右键,选择项目设置,选择SQL

    2、获取自己数据库的驱动版本有哪些,如下代码所示:

    QStringList drivers = QSqlDatabase::drivers();
        for (int i = 0; i < drivers.size(); i++)
            qDebug() << drivers[i];
    运行结果如下:  //access数据库对应的是QODBC,MySql的驱动是QMYSQL,Oracle数据的驱动是QOCI,SQLite数据的驱动是QSQLITE
    "QSQLITE" 
    "QMYSQL"
    "QMYSQL3"
    "QODBC" 
    "QODBC3" 
    "QPSQL" 
    "QPSQL7"    //或者查看帮助文档,输入SQL Database Drivers查看

    3、代码如下

    QSqlDatabase mainDB = QSqlDatabase::addDatabase("QODBC", "MAINDB"); //使用驱动类型和连接名称connectionName将数据库添加到数据库连接列表中。在构造函数定义此对象,不然多次addDatabase会出错。 连接名称不能与电脑中已经连接的连接名相同,否则将会导致之前的连接被删除
    QString dsn = QString("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=%1").arg(filePath);//filePath是数据库的绝对路径(包括数据库的文件名)
    mainDB.setDatabaseName(dsn);//设置数据库路径      注意:如果设置好了数据库源名,可以直接使用数据库的源名就好
    QString sqlStr;//数据库操作(sql)语句
    if (!mainDB.open())
    {
      qDebug() << "打开数据库失败";
    }
    else
    {
       QSqlQuery query(db);    //QSqlQuery类提供了一种执行和操作SQL语句的方法。
       sqlStr = QString("SELECT * FROM tableName");
       query.exec(sqlStr);  //执行完此操作,将结果存入query对象中
    }
    QVector x,x1;
    while(query.next())  //按行读取
    {
      x<<query.value("X").toDouble();  //这里使用的类似于键值,也可以使用列数,query.value(0).toDouble();这里的0代表第0列
      x1<<query.value("X1").toDouble();
    }

    注意:

    1.数据库回收

    {
      //这里用{}画出一个作用域,当这个域完成之后,数据库的所有操作动作都被回收了
       QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
      QString dsn = QString("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=%1").arg(DB_PATH);
      db.setDatabaseName(dsn);//设置数据库路径
       db.open();
      //数据库操作
    }
    QSqlDatabase::removeDatabase("qt_sql_default_connection");//这句话之前保证当前连接的数据库没有任何数据操作,由上面的作用域实现。   如果在定义数据库的时候已经定义了连接名称,就可以将参数改为连接名。

    2、打包报错,driver not load

    1)将C:QtQt5.3.15.3msvc2012路径下的文件夹plugins复制到exe文件目录下,打开plugins,只保留sqldrivers文件夹,需要确认里面是否有你需要的驱动, 如:程序中使用了QSqlite数据库,则需要有qsqlite.dll(发布版)qsqlited.dll(调试版),
    
    2)在main.cpp文件中添加下面第二行和第三行:
    
      QApplication a(argc, argv);   
    QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirPath())+QDir::separator()+"plugins");
    a.addLibraryPath(strLibPath);

    参考借鉴:https://blog.csdn.net/cibiren2011/article/details/52792476;https://www.cnblogs.com/judes/p/7305953.html;https://www.cnblogs.com/judes/p/9107423.html  --万分感谢

    坚持成就伟大
  • 相关阅读:
    flash 显示对象的getRect()方法的问题
    John Maccarthy
    一个c++ 2d图形引擎 AGG
    lisp 编程入门
    linux图形开发工具
    wxDevC++ – Dev C++的愛好者一定要知道的C++ IDE
    备忘 html5 canvas context2d/3d
    windows下使用boost库可以下载编译好的二进制安装包
    酷壳
    [.NET] : Provider Pattern
  • 原文地址:https://www.cnblogs.com/xian-yongchao/p/9634558.html
Copyright © 2011-2022 走看看