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  --万分感谢

 

posted @ 2018-09-12 18:23  xianyongchao  阅读(579)  评论(0编辑  收藏  举报