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:\Qt\Qt5.3.1\5.3\msvc2012路径下的文件夹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 --万分感谢
坚持成就伟大