QT连接多种数据库f方法及测试
QT提供了对多种数据库的访问支持,对SQL Server也可以通过ODBC来进行访问。
要想顺利访问SQL Server。 首先要保证以下几点:
1. QT编译时已经编译了QtSql
2. 编译了ODBC插件。可以通过 configure -plugin-sql-odbc来保证,也可以单独编译~/src/plugins/sqldrivers/odbc
qmake -t vclib odbc.pro
qmake
nmake
编译后,在~/plugins/sqldrivers/下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll
此时,可以用下面的程序,测试一下你的QT目前支持哪些数据库访问。
#include <QApplication>
#include <QSqlDatabase>
#include <QStringList>
#include <QDebug>
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "/t" << driver;
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << "ODBC driver valid?" << db.isValid();
}
如果输出中有
Available drivers:
"QSQLITE"
"QODBC4"
"QODBC"
ODBC driver valid? true
就说明已经可以成功支持ODBC了。
3. 要连接数据库,有3种方式:
http://hi.baidu.com/wenjiejia/blog/item/1cd8ef11cbce4ecea7ef3f4b.html(详情)
QT连接数据库 是应用开发的常用基础操作。经过实验,我总结了一些例程。这些例程可以连接各种数据库。
ps:这里只是我觉得好用的方法。QT另外提供了更高级的方法,如有需要请自己尝试。
连接数据库需要的头文件:
#include <QSqlDatabase>
#include <QSqlQuery>
1、连接微软的Access----------------------------------------------------------------------------------------------
QSqlDatabase ldb = QSqlDatabase::addDatabase("QODBC");
ldb.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=system.mdb;UID=;PWD=xiaozhuset");
bool ok = ldb.open();
//新定义一个查询集合,并指定 链接关键字。 如果有多个连接,可以随意指定一个你需要的。
QSqlQuery mquery=QSqlQuery::QSqlQuery(ldb);
if(ok)
{
bool isok=mquery.exec("select * from sql_set;");
if (!isok)
{
ldb.close();
return -1;
}
//这个是必须的,因为查处的结果集当前位置不在第一条记录上。
mquery.next();
QString sHostName=mquery.value(1).toString();
QString sDatabaseName=mquery.value(2).toString();
QString sUserName=mquery.value(3).toString();
QString sPassword=mquery.value(4).toString();
//清除结果集
mquery.clear();
// 如果该连接不再使用,就可以关闭。
ldb.close();
//这里是将从数据库读出的数据写到一个list控件里
ui.list_out->insertItem(ui.list_out->count(),sHostName);
ui.list_out->insertItem(ui.list_out->count(),sDatabaseName);
}
else
{
// 打开本地数据库失败,
QMessageBox::critical(0, QObject::tr("读取Access数据库错误!"),db.lastError().text());
return -1;
}
2、连接mssql2000 数据库--------------------------------------------------------------------------------------------
QString strDatabaseName = QString("DRIVER={SQL Server};Server=(%1);Database=%2").arg("local").arg(sDatabaseName);
db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc数据库驱动
db.setHostName(sHostName);
db.setPort(1433);
db.setDatabaseName(strDatabaseName); // 我们之前建立的数据库连接关键字
db.setUserName(sUserName);
db.setPassword(sPassword);
bool ok = db.open(); //尝试连接数据库
if(ok)
{
menuset_set->db=db;
// 这里用sa已经成功连上数据库
return 0;
}
else
{
// 打开数据库失败,
QMessageBox::critical(0, QObject::tr("数据库连接错误!"),db.lastError().text());
return -2;
}
mssql2000数据库连接的使用和Access连接使用方法一样。
QSqlQuery mquery=QSqlQuery::QSqlQuery(db);
bool ok1=mquery.exec("select * from CarteMenu;");
if (ok1==false)return -1;
QString menu_mkey=mquery.value(13).toString();
QString strmenu_lang=mquery.value(3).toString();
//清除结果集
mquery.clear();
3、连接mysql 数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动
db.setHostName("localhost");
db.setDatabaseName("exampledb"); // 数据库名称
db.setUserName("sa"); // 用户名
db.setPassword("1"); // 密码
bool ok = db.open(); // 尝试连接数据库
if(ok)
{
QSqlQuery myquery;
if(myquery.exec("select * from employeedb"))
{
int num = 0;
if(db.driver()->hasFeature(QSqlDriver::QuerySize))
{
num = myquery.size(); // 如果支持结果影响的行数,那么直接记录下来
}
else
{
myquery.last(); //否则定位到结果最后
num = myquery.at() + 1;
}
//这里添加数据库的查询结果处理操作
}
else // 如果查询失败
{
QSqlError error = myquery.lastError();
}
}
else // 打开数据库失败
{
}
QT4如何连接MS SQL SERVER
1.网上上了很久,其实语法很简单
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName( "DRIVER={SQL Server};SERVER=127.0.0.1;UID=hello;PWD=hello;DATABASE=hello" );
2.要看连接是否正常,若有错,什么错,可以这样写
bool r = db.open();
QSqlError err = db.lastError();
QString s = err.text();
查看S的内容,即可得到错误内容。
3.若出错信息是驱动未加载,那么使用如下方法,可得到本地是否支持该驱动
QApplication a(argc, argv);
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "/t" << driver;
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << "ODBC driver valid?" << db.isValid();
4.若是返回结果是未支持该驱动,那么就需要重新编译sqldrivers,可以在命令行下,先使用configure,再nmake,我找到一个 简便方法,由于QT4.3.1与MS VS2005支持较好,因此安装了QT在VS2005上的插件(名称例如:qt-vsintegration-1.3.1.exe)之后,可以直接在 VS2005中,使用"QT->Open Solution from .pro file",找到QT的安装目录中的“projects.pro”,导入后,可发现几百个Project,“批生成”即可。
QT连接多种数据库f方法及测试的更多相关文章
- Linux系统下 解决Qt5无法连接MySQL数据库的方法
Linux平台下解决Qt5连接mysql数据库的问题:输入sudo apt-get install libqt5sql5-mysql解决,这种方法只能解决Qt是用sudo apt-get instal ...
- LOADRUNNER连接ORACLE数据库的方法
LOADRUNNER连接ORACLE数据库的方法 最近正在做一个测试数据库性能的项目,直接写出来的连接数据库并且进行数据库查询和插入的脚本在VUSER_INIT中(连接数据库)#include ...
- [转]Java连接各种数据库的方法
//MySQL: String Driver="com.mysql.jdbc.Driver"; //驱动程序 String URL="jdbc:m ...
- JDBC-ODBC桥接方法连接Excel数据库的方法
通过JDBC-ODBC桥接器访问Excel电子表格 1.设置数据源 Excel数据源选择的驱动程序是Microsoft Excel Driver 2.选择表 与访问其他数据库不同的是,我们必须在电子表 ...
- Python3实现连接SQLite数据库的方法
本文实例讲述了Python3实现连接SQLite数据库的方法,对于Python的学习有不错的参考借鉴价值.分享给大家供大家参考之用.具体方法如下: 实例代码如下: ? 1 2 3 4 5 6 7 8 ...
- JDBC连接各种数据库的方法,连接MySql,Oracle数据库
JDBC连接各种数据库的方法: JDBC编程步骤: 1.导入jar包 2.注册驱动 3.获取数据库连接对象 4.定义SQL语句 5.获得执行SQL语句对象statemnet 6.执行SQL语句 7.处 ...
- [C#.Net]C#连接Oracle数据库的方法
首先介绍下开发环境:WIn10 64bit+Visual Studio 2015+Oracle10ClientWin32(只是客户端,如果安装整个数据库也是可以的) 目前了解C#中连接Oracle数据 ...
- C#连接Oracle数据库的方法(Oracle.DataAccess.Client也叫ODP.net)
官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...
- 用ASP.Net(C#)连接Oracle数据库的方法及实例
今天看了一下asp.net连接oracle数据库的方法,得到了如下代码.这段代码打开了MyTable表,并把操作员的名字列出.字段类型是OracleString.读取的时候用的是字段编号,我不知道怎么 ...
随机推荐
- datagrid中需要填写长文本,扩展的textarea
$.extend($.fn.datagrid.defaults.editors, { textarea: {//textarea就是你要自定义editor的名称 init: function(cont ...
- jQuery修改操作css属性实现方法
在jquery中我们要动态的修改css属性我们只要使用css()方法就可以实现了,下面我来给各位同学详细介绍介绍. css()方法在使用上具有多样性,我们先来了解css()方法基本知识. css() ...
- SVN - 主干/分支
一个大项目在开发中可能会拆分成几个小项目,分别分去,同时共通的部分再由人做,做完后再统一合并.同时,在开发中,共通的部分修改后,其它人要保持同步. 这种情况反应到SVN的分支/合并功能上,再贴切不过了 ...
- HDU 5698 瞬间移动
瞬间移动 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- OD使用经验【转载】
文章整理发布:黑客风云 1.我的os是winXP,无法使用trw2000,而softice装了多次均未成功,还蓝屏死机多次.郁闷. 2.友好的gui界面,不像softice.可以边干活边听歌,不像s ...
- js会飞的li标签
当点击左边的li标签的时候,这边的li标签飞到右边去,点击右边的li标签飞到左边来,并且有顺序 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- Python的数据类型的一些知识
int 类型表示(正负)整数,str 类型表示字符串(Unicode字符序列): 所表示的整数大小只受限于机器内存,而非固定的字节数. 字符串可以用双引号或是单引号封装,需要成对的出现. 传统上,py ...
- uvalive 2797 Monster Trap
题意:给定一些线段障碍,判断怪物能不能逃离到无穷远处. 思路:从(0,0)点能否到无穷远处.用BFS搜索.那满足什么样的点符合要求,能加入到图中呢? 遍历每个点,显然一开始已经在某些线段上的点要删去. ...
- 关于T公司的强矩阵架构的思考
我所在的T公司是强矩阵架构,关于这类公司,应该是不少大公司的主流架构,也就是说一个职员在公司内不仅在项目内有相应的级别,在其行政上也是有相应的级别,日常工作以项目的内容为主,但是同时也是属于行政的一员 ...
- jad的用法(反编译某目录下所有class)
jad -s java -d E:\scm\MonitorServerEx\src2 -o -ff -r E:\scm\MonitorServerEx\classes-recomp\**\*.clas ...